我正在从 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
将解析为美国邮政编码,而不是德国邮政编码。
我目前的解决方法是在输入仅为数字时添加国家/地区名称,否则仅过滤掉德语结果,但这听起来非常笨拙。有人知道更好的方法吗?
最佳答案
这绝对不是一个详尽的答案,只是一些注意事项:
您正在使用 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
您提到您是根据地标的准确性属性过滤地标。请注意,该字段不再出现在新的 Geocoding API 的结果中,但无论如何,我认为它在旧 API 中仍然不是很可靠。
您可能想尝试使用
bounds
和region
新 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/