谷歌地理编码 API 对于一些“直接匹配”的地址没有返回邮政编码信息。

5

这些似乎不是partial_matches,所以我想知道为什么它没有返回所有数据,特别是postal_code

经过在谷歌地图上的双重检查,这就是我想要的确切地址。换句话说,它是一个直接命中。

Python代码:

address = '34 new street, Green road, Carlow'

geocode_url = "https://maps.googleapis.com/maps/api/geocode/json?address={}&key={}".format(address,api_key)

# Ping google for the reuslts:
results = requests.get(geocode_url)
# Results will be in JSON format - convert to dict using requests functionality
results = results.json()

还有结果。这里应该有一个邮政编码数据,对吧?没有任何说明它只是部分匹配。

{'results': [{'address_components': [{'long_name': '34',
     'short_name': '34',
     'types': ['street_number']},
    {'long_name': 'New Street', 'short_name': 'New St', 'types': ['route']},
    {'long_name': 'Moanacurragh',
     'short_name': 'Moanacurragh',
     'types': ['neighborhood', 'political']},
    {'long_name': 'Carlow',
     'short_name': 'Carlow',
     'types': ['locality', 'political']},
    {'long_name': 'County Carlow',
     'short_name': 'County Carlow',
     'types': ['administrative_area_level_1', 'political']},
    {'long_name': 'Ireland',
     'short_name': 'IE',
     'types': ['country', 'political']}],
   'formatted_address': '34 New St, Moanacurragh, Carlow, Ireland',
   'geometry': {'location': {'lat': 52.8296466, 'lng': -6.9331115},
    'location_type': 'RANGE_INTERPOLATED',
    'viewport': {'northeast': {'lat': 52.83099558029149,
      'lng': -6.931762519708498},
     'southwest': {'lat': 52.82829761970849, 'lng': -6.934460480291502}}},
   'place_id': 'EhozNCBOZXcgU3QsIENhcmxvdywgSXJlbGFuZCIaEhgKFAoSCZ93HqizQl1IEZZMDB0YIkdXECI',
   'types': ['street_address']}],
 'status': 'OK'}

现在,如果我将完全相同的字符串输入官方邮政编码数据库(爱尔兰),它将返回邮政编码。
顺便提一下,官方数据库在这里(链接),您可以尝试地址字符串'34 new street, Green road, Carlow'

1
这很有趣。我想也许 Google 只是不知道邮政编码,但在地图中查看地址 - 它绝对在那里! - That1Guy
1
如果您使用 place_id 而不是 address 进行查询,会发生什么? - That1Guy
2个回答

4
有两个需要注意的问题,有关于'34 new street, Green road, Carlow'的请求示例。
  1. 你可以看到,结果具有RANGE_INTERPOLATED位置类型,而不是ROOFTOP。这意味着Google在其数据库中没有准确的地址,并且他们试图猜测(插值)地址的位置,基于其他现有的特征。

  2. 如果你对插值点(52.8296466,-6.9331115)执行反向地理编码请求,并使用邮政编码的位置类型https://maps.googleapis.com/maps/api/geocode/json?latlng=52.8296466%2C-6.9331115&result_type=postal_code&key=YOUR_API_KEY,你将得到以下响应:

    { "plus_code":{ "compound_code":"R3H8+VQ Carlow, County Carlow, Ireland", "global_code":"9C4MR3H8+VQ" }, "results":[ ], "status":"ZERO_RESULTS" }

因此,在Google的数据库中不存在包含点(52.8296466,-6.9331115)的邮政编码多边形。你面临着一个Google端的数据问题。
我建议联系Google数据团队,并按照其帮助中心中描述的方式报告数据问题:

https://support.google.com/maps/answer/6320846

希望Google能够尽快解决这个问题。

谢谢提供链接,但不幸的是我有超过100,000个地址需要使用API,所以我不能为每个错误更新地图信息。在使用地理编码器时,我只能忽略这些“range_interpolated”结果。 - SCool
我刚刚注意到在Chrome和Safari上有这个问题。相同的经纬度坐标发送到postal_code,Chrome返回零结果。Safari返回1个结果。 - Mark

0

只需使用坐标查找邮政编码,但首先要使用地址找到坐标。

$apiKey = 'API_KEY';
$address = '&address=' . urlencode( $_POST['address'] )
$url = "https://maps.googleapis.com/maps/api/geocode/json?key={$apiKey}{$address}";
$resp_json = file_get_contents($url);
// decode the json
$resp = json_decode($resp_json, true);

// get the important data
$lat = $resp['results'][0]['geometry']['location']['lat'] ?? "";
$lng = $resp['results'][0]['geometry']['location']['lng'] ?? "";
$cityCoce = "https://maps.googleapis.com/maps/api/geocode/json?key{$apiKey}&latlng=$lat,$lng";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接