我正在从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
时,我只会获得27个地区的一个,明显的原因 - 它不是最大的,也不是最准确的accuracy
,也没有任何其他独特的特征。
有人知道为什么会这样,我能做些什么呢?
我尝试了region
参数但没有用 - 当我不使用, de
时,邮政编码(如50825
)将被解析给美国同行,而不是德国人。< / p>
我目前的解决方法是在输入仅为数字时添加国家/地区名称,否则只过滤掉德语结果,但这听起来非常糟糕。有人知道更好的方法吗?
答案 0 :(得分:2)
这绝对不是一个详尽的答案,只是一些注意事项:
您使用的是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
您提到您在其准确属性上过滤了地标。请注意,此字段不再出现在新地理编码API的结果中,但无论如何,我认为它在旧API中仍然不太可靠。
您可能想尝试使用新API的bounds
和region
参数,但我仍然怀疑它们会解决您的问题。
我相信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种不同的解决方案,每种解决方案对应机场的每个终端。