我遇到了Google Geocoding API的一个奇怪问题。我目前正在使用它来查找卢森堡地址的纬度和经度。我偶然发现,即使我的API请求中的邮政编码和国家/地区出错,我仍然会找回正确的位置和格式化的地址。
例如
https://maps.googleapis.com/maps/api/geocode/json?address=1+route+d%27Arlon%2C8399+Windhof%2CLuxembourg&key={Your-API-Key}&language=fr
这是正确的找到命中,如预期的那样。但是,
https://maps.googleapis.com/maps/api/geocode/json?address=1+route+d%27Arlon%2C83992+Windhof%2CGermany&key={Your-API-Key}&language=fr
也会发现命中,虽然返回了partial_match = true
。
无需滚动即可了解问题。阅读该代码 - 即使您提供国家/地区,邮政编码等错误的详细信息,API也会返回“正确”的地址。
除了我无法想象的错误之外,这可能是什么。但是,最初,我只是假设我会通过要求用户检查提供的地址来检查这些问题,如果发现partial_match
存在。
然而,只是检查这会引发误报。拿网址
https://maps.googleapis.com/maps/api/geocode/json?address=2+route+d%27Arlon%2C8552+Oberpallen%2CLuxembourg&key={Your-API-Key}&language=fr
返回2 Route d'Arlon, 8552 Oberpallen, Luxembourg
- 据我所知 - 与我提供的地址完全相同,但地理编码API STILL 会返回partial_match
。
显然,partial_match
还有更多的东西,而不是眼前的东西。我当然可以开始对返回的结果进行更严格的检查,而不是仅仅依靠partial_match
。但是,我希望这里的某个人能够阐明这里的两个问题
partial_match
?答案 0 :(得分:0)
不知何故,我怀疑我的问题是否会在这里找到答案,因为我明显发现的错误与一个相当"模糊的"全球位置。在此过程中,我学到了一些有价值的东西,我觉得我可以在这里分享,而不仅仅是关闭问题:
事实上,当处理用户输入的多个国家市场的地址,然后您根据Google地理编码API进行检查时,依赖用户的任何原始输入是非常冒险的。以任何方式可靠。根据您在世界上的位置,有许多不同的输入地址的方式
API (col A) | Count (col B)
42227 | = if(a2=a1,b1+1,1) = 1
42227 | = if(a3=a2,b2+1,1) = 2
42229 | = if(a4=a3,b3+1,1) = 1
42310 | = if(a5=a4,b4+1,1) = 1
或
house no, street, zip code, place, country
或
street house no,zip code place, country
或
....
最佳做法是
street, house no, place, zip code, country
位作为用户的不同字段house no + street
,post code before place
,post code after place
,{missing commas
,too many commas
等细微差别。 {1}}等。status = OK
,请不要以任何方式依赖formatted_address
或partial_result
字段。而是使用结果的address_components
部分以您选择的格式重建整个地址。 请注意,address_components中地址组件的顺序可能会有所不同,因此请特别注意类型[0]条目设置为street_number, route, locality, postal_code
和country
的组件。最后,空间可以破坏最好的方案,所以在比较任何事情之前
trim(preg_replace('/\s+/',' ', $str));
确保您摆脱了所有不需要的空间。