谷歌地图地理编码API - 国家偏见,奇怪的结果

时间:2010-05-19 13:54:28

标签: php google-maps geolocation

我正在从PHP连接到Google Maps API,以便为租赁站定位器应用程序分配一些起点。

这些起点不一定是确切的地址;城市名称就足够了。使用accuracy等于或大于4(城市/地区级别)的地理编码响应作为起点,并搜索周围的租赁站。

该应用程序应该在德国工作。当地点名称不明确时(即该名称不止一个地方)我想显示一系列可能性。

这一般不是问题:如果您进行模糊搜索,Google的XML输出会返回<PlaceMark>个元素的列表,而不只是一个。

显然,我需要将地理编码偏向德国,所以如果有人输入邮政编码或其他国家/地区的地址名称,实际上只会出现在德国的点击。

我认为我可以通过向搜索查询添加, de, Deutschland来实现此目的。这种方法效果很好,但在某些情况下会产生奇怪且无法忍受的结果。

例如,德国有27个名为Neustadt的地方。 (Wikipedia

当我单独搜索Neustadt时:

http://maps.google.com/maps/geo/hl=de&output=xml&key=xyz&q=Neustadt

我至少有六个,我可以忍受(可能是其他人没有合并,或者是不同地区的一部分,或者其他什么)。

但是,当我搜索Neustadt, deNeustadt, DeutschlandNeustadt, Germany时,我只会获得27个地区的一个,明显的原因 - 它不是最大的,也不是最准确的accuracy,也没有任何其他独特的特征。

有人知道为什么会这样,我能做些什么呢?

我尝试了region参数但没有用 - 当我不使用, de时,邮政编码(如50825)将被解析给美国同行,而不是德国人。< / p>

我目前的解决方法是在输入仅为数字时添加国家/地区名称,否则只过滤掉德语结果,但这听起来非常糟糕。有人知道更好的方法吗?

3 个答案:

答案 0 :(得分:2)

这绝对不是一个详尽的答案,只是一些注意事项:

  1. 您使用的是old V2 version of the Geocoding API,Google最近弃用了new V3 API。 Google建议从现在开始使用这项新服务,虽然我对新版本没有实际经验,但似乎他们已经在各个方面改进了服务,特别是在响应结构方面。您不需要API密钥即可使用新服务,只需使用稍微不同的URL:

      

    http://maps.google.com/maps/api/geocode/xml?address=Neustadt&sensor=false

  2. 您提到您在其准确属性上过滤了地标。请注意,此字段不再出现在新地理编码API的结果中,但无论如何,我认为它在旧API中仍然不太可靠。

  3. 您可能想尝试使用新API的boundsregion参数,但我仍然怀疑它们会解决您的问题。

  4. 我相信Google Geocoder是一个很好的工具,当你至少以“街道,地点,国家”格式给它一个完整的地址时,它也是非常可靠的其他格式,如果它不需要处理任何歧义(地理编码“伦敦,英国”总是为我工作)。

    但是,在您的情况下,我会考虑预先计算每个德国地区的所有坐标,并简单地从数据库中自行处理地理编码。我认为这是非常可行的,特别是因为您的应用程序本地化到一个国家/地区。 Wikipedia "List of German Towns"中的每个城镇似乎都将坐标存储在一个整齐的小<span>内,看起来非常容易解析:

    <span class="geo">47.84556; 8.85167</span>
    

    该列表中有16个Neustadts,可能比Google的6个更好:)

答案 1 :(得分:1)

发现谷歌自动完成功能比他们的地理编码更好

http://code.google.com/apis/maps/documentation/javascript/places.html#places_autocomplete

答案 2 :(得分:0)

发现此问题正在搜索此问题。然后实现了Bing Maps API更好的工作。它有它的怪癖。例如,如果您传递机场代码,它将显示6种不同的解决方案,每种解决方案对应机场的每个终端。