提问人:Pekka 提问时间:5/19/2010 最后编辑:Pekka 更新时间:10/27/2016 访问量:2354
Google Maps Geocoding API - 国家偏见,奇怪的结果
Google Maps Geocoding API - country biasing, bizarre results
问:
我正在从 PHP 连接到 Google Maps API,以对租赁车站定位器应用程序的一些起点进行地理编码。
这些起点不一定是确切的地址;城市名称就足够了。使用等于或大于 4(城市/地区级别)的地理编码响应作为起点,并搜索周围的租赁站点。accuracy
该应用程序应该在德国工作。当一个地方名称不明确时(即该名称有多个地点),我想显示一个可能性列表。
一般来说,这不是一个问题:如果你进行一个模棱两可的搜索,谷歌的XML输出会返回一个元素列表,而不仅仅是一个。<PlaceMark>
显然,我需要将地理编码偏向于德国,因此,如果有人输入邮政编码或其他国家/地区也存在的地方名称,则实际上只会出现德国的点击。
我以为我可以通过添加 or 到搜索查询来实现这一点。这基本上工作得很好,但在某些情况下会产生奇怪和无法忍受的结果。, de
, Deutschland
例如,德国有 27 个地方被命名为 。(维基百科上的数据Neustadt
)
当我独自搜索时:Neustadt
http://maps.google.com/maps/geo/hl=de&output=xml&key=xyz&q=Neustadt
我至少有六个,我可以忍受(可能是其他的没有被合并,或者是不同地方的一部分,或者其他什么)。
然而,当我搜索 、 或 或 时,我只得到了 27 个地点中的一个,没有明显的原因——它不是最大的,也不是最准确的,也没有任何其他独特的特征。Neustadt, de
Neustadt, Deutschland
Neustadt, Germany
accuracy
有谁知道为什么会这样,我能做些什么?
我尝试了该参数,但无济于事 - 当我不使用 、邮政编码(例如将解析为美国同行,而不是德国同行。region
, de
50825
我目前的解决方法是在输入仅为数字时添加国家/地区名称,否则仅过滤掉德语结果,但这听起来非常笨拙。有人知道更好的方法吗?
答:
这绝对不是一个详尽的答案,而只是一些注意事项:
您正在使用旧的 V2 版本的地理编码 API,Google 最近已弃用该版本,取而代之的是新的 V3 API。谷歌建议从现在开始使用新服务,虽然我对新版本没有实际经验,但似乎他们在各个方面都改进了服务,尤其是在响应结构方面。您不需要 API 密钥即可使用新服务,只需使用稍微不同的 URL:
http://maps.google.com/maps/api/geocode/xml?address=Neustadt&sensor=false
您提到您正在根据地标的准确性属性筛选地标。请注意,此字段不再出现在新地理编码 API 的结果中,但无论如何,我认为它在旧 API 中仍然不是很可靠。
您可能想尝试使用新 API 的 and 参数,但我仍然怀疑它们能否解决您的问题。
bounds
region
我相信 Google Geocoder 是一个很好的工具,当您至少以“街道、地点、国家/地区”格式为其提供完整地址时,并且在不必处理任何歧义时,它在其他格式中也非常可靠(地理编码“英国伦敦”总是对我有用)。
但是,就您而言,我真的会考虑预先计算每个德国地区的所有坐标,并简单地从数据库中自行处理地理编码。我认为这是非常可行的,特别是因为您的应用程序仅本地化到一个国家/地区。维基百科“德国城镇列表”中的每个城镇似乎都存储了一个整洁的小坐标,看起来很容易解析:<span>
<span class="geo">47.84556; 8.85167</span>
该列表中有 16 个 Neustadts,可能比 Google 的 6 个:)要好
评论
发现 Google 自动完成比他们的地理编码效果更好
http://code.google.com/apis/maps/documentation/javascript/places.html#places_autocomplete
评论
发现这个问题正在搜索这个确切的问题。然后意识到 Bing Maps API 的效果要好得多。不过,它有其怪癖。例如,如果您传递机场代码,它将显示 6 种不同的解决方案,每种解决方案对应于机场的每个航站楼。
评论