Google Maps API v3 返回 ZERO_RESULTS 但 Maps.Google.com 显示正常

Posted

技术标签:

【中文标题】Google Maps API v3 返回 ZERO_RESULTS 但 Maps.Google.com 显示正常【英文标题】:Google Maps API v3 returning ZERO_RESULTS but Maps.Google.com showing fine 【发布时间】:2013-12-18 17:34:48 【问题描述】:

在这方面需要一些帮助。

我正在使用 Google Maps API v3 来获取存储在我的数据库中的人类可读地址的纬度和经度,然后在 Google 地图画布上放置 1 个标记。很简单。

我遇到的问题是某些地址正在退回 --> ZERO_RESULTS 的状态代码

如果我在 maps.google.com 中输入这些相同的地址,他们会找到该特定区域并使用带有近似值的标记对其进行映射。

我的数据库中的一些地址并不具体,这意味着它们可能没有邮政编码和/或它们可能没有城市,但都有省/地区和国家/地区。另外需要注意的是,它们都没有街道地址。

一些人类可读的地址可能包含破折号 (-)、空格 ()、撇号 (') 和逗号 (,)

返回 ZERO_RESULTS 的地址示例如下:

Soul-t'ukpyolsi, Korea, South

在该特定示例中,Country 的名称中有逗号和空格,Region 也有撇号和破折号。

这是我正在使用的 javascript 代码:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=MYKEY&sensor=false"></script>
<script>
function initialize() 
  var myLatlng = new google.maps.LatLng(<?php echo $lat; ?>,<?php echo $long; ?>);
  var mapOptions = 
    zoom: 5,
    center: myLatlng
  
  var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

  var marker = new google.maps.Marker(
      position: myLatlng,
      map: map
  );


google.maps.event.addDomListener(window, 'load', initialize);

</script>

我正在使用 PHP 根据存储在我的数据库中的地址元素生成完整的地址路径。这是我用来生成路径然后发出地理定位器请求的代码:

请记住,城市和邮政编码/邮编是可选元素

// Replace any spaces in vars
if (isset($gmaps_city))
    $gmaps_city = str_replace(" ","+",$gmaps_city);

if (isset($gmaps_province))
    $gmaps_province = str_replace(" ","+",$gmaps_province);

if (isset($gmaps_country))
    $gmaps_country = str_replace(" ","+",$gmaps_country);

if (isset($gmaps_pcode))
    $gmaps_pcode = str_replace(" ","+",$gmaps_pcode);


// If Postal Code and City
if (isset($gmaps_city) AND isset($gmaps_pcode)) 
    $gmaps_path = $gmaps_city.",+".$gmaps_province.",+".$gmaps_country.",+".$gmaps_pcode."&sensor=false"; 

// If City but no Postal Code
 else if (isset($gmaps_city) AND !isset($gmaps_pcode)) 
    $gmaps_path = $gmaps_city.",+".$gmaps_province.",+".$gmaps_country."&sensor=false"; 

// If Postal Code but no City
 else if (!isset($gmaps_city) AND isset($gmaps_pcode)) 
    $gmaps_path = $gmaps_province.",+".$gmaps_country.",+".$gmaps_pcode."&sensor=false"; 

// Only Province and Country
 else  
    $gmaps_path = $gmaps_province.",+".$gmaps_country."&sensor=false"; 


// Determine Lat and Long of Address
$geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$gmaps_path);

$output= json_decode($geocode);

$lat = $output->results[0]->geometry->location->lat;
$long = $output->results[0]->geometry->location->lng;

$status = $output->status;

非常感谢任何帮助。

【问题讨论】:

为什么您认为Soul-t'ukpyolsi, Korea, South 这个地址在 Google 地图中有效?请提供一个好的结果的链接(我得到Seoul)。 相信问题的根源是拼写错误,而应该是 --> Seoul-t'ukpyolsi,Korea,South ... 相信它在 Google 地图中有效,因为转到 Maps.Google .com 并输入“Soul-t'ukpyolsi, Korea, South”(拼写错误)确实会在首尔放置一个标记。只需通过 JSON 生成 ZERO_RESULTS 【参考方案1】:

该示例可能由于拼写错误而导致问题。以下: "Seoul-t'ukpyolsi, 韩国, 南" 不返回 ZERO_RESULTS。

根据您的代码,破折号和撇号不应引起问题。请提供另一个例子。

【讨论】:

这里相同:Seoul-t'ukpyolsi,Korea,South 提供完整的 JSON 结果。 看起来拼写错误是问题的根源。谢谢你的收获。尽管如此,当在 Maps.Google.com 中输入“Soul-t'ukpyolsi, Korea, South”(拼写错误)时,它会在首尔正确放置一个标记。有什么方法可以复制相同的效果以提供正确拼写的 JSON 结果?而不是从不正确的拼写中恢复 ZERO_RESULTS。 我也问过同样的问题,但还没有找到谷歌提供的检查方法。防止这种情况的一种可能方法是在用户输入或提交时检查用户输入,并检查 ZERO_RESULTS 并提示存在拼写错误。但是,它很可能会计入您的查询计数,因此并不理想。 另外,您可以对照自己的数据库检查输入并利用您已有的信息。另外,我会很感激答案的箭头。谢谢。 感谢您的帮助 Lothilius ... 非常感谢。我已将此标记为已接受的答案。另外,我尝试向上箭头“标记为有用”,但显然我还没有足够的“声誉”,因为我刚刚加入了 ***。一旦我获得足够的“声誉”点数,我会回来并向上箭头。

以上是关于Google Maps API v3 返回 ZERO_RESULTS 但 Maps.Google.com 显示正常的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps API V3 - 边界内最近的路线

Google Maps API V3 fitbounds() 缩小但从不缩小

v3 Google Maps Geocoding API 是不是有代表准确性的字段?

将 Google Maps API v3 搜索结果限制在某个国家/地区,同时将它们偏向某个位置

Google Maps API V3 中的 API 密钥是啥?

google maps js v3 api教程 -- 在地图上添加标记