php - Google Maps Geocoding API - 国家偏见,奇怪的结果

标签 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, de 时, 或 Neustadt, Deutschland , 或 Neustadt, Germany , 我只得到了二十七个地方中的一个,没有明显的原因-它不是最大的,也不是最多的accuracy准确,也没有任何其他独特的特征。

有人知道这是为什么吗?我能做些什么?

我尝试了 region参数但无济于事 - 当我不使用 , de , 邮政编码(如 50825 将解析为美国邮政编码,而不是德国邮政编码。

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

最佳答案

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

  1. 您正在使用 old V2 version of the Geocoding API ,谷歌最近弃用了 new V3 API .谷歌建议从现在开始使用新服务,虽然我对新版本没有真正的体验,但他们似乎在各个方面改进了服务,尤其是响应的结构。您不需要 API key 即可使用新服务,只需使用略有不同的 URL:

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

  2. 您提到您是根据地标的准确性属性过滤地标。请注意,该字段不再出现在新的 Geocoding API 的结果中,但无论如何,我认为它在旧 API 中仍然不是很可靠。

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

我相信 Google Geocoder 是一个很好的工具,当您至少以“街道、地区、国家/地区”格式为它提供完整地址时,它在其他格式中也非常可靠,当它不需要处理任何歧义(地理编码“英国伦敦”对我来说总是有效)。

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

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

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

关于php - Google Maps Geocoding API - 国家偏见,奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2866102/

相关文章:

php - 如何存储 Bikram Sambat 日期格式?

php - MYSQL 插入到 laravel 5.5 请求 Controller

php - 解析显示在 php/html 表格中的 txt 文件

geolocation - 建立本地场所/企业的数据库

ios - IONIC 2 - 每次打开应用程序时都会询问地理位置或获得许可

php - 使用 PHP 更新数据库

javascript - meteor 的谷歌地图

javascript - 未捕获的 TypeError : inst. 渲染不是函数; react 谷歌地图

android - 如何在 google map v2 marker android 中添加值?

php - 使用 file_get_contents()/PHP 在地理定位中进行字符编码