Google 地理编码 API 错误?
Google Geocoding API Bug?
我 运行 遇到了一个关于 Google 地理编码 API 的奇怪问题。我目前正在使用它来查找卢森堡地址的纬度和经度。我无意中发现,即使我的 API 请求中的 post 代码和国家/地区错误,我仍然会返回正确的位置和格式地址。
例如
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
。
To understand the issue without having to scroll & read that code - the API returns the "right" address even when you supply wrong details for country, postcode etc.
这怎么可能不是我无法想象的错误。但是,最初,我只是假设如果发现 partial_match
存在,我会通过要求用户检查提供的地址来检查此类问题。
但是,仅检查这一点会引发误报。取 URL
https://maps.googleapis.com/maps/api/geocode/json?address=2+route+d%27Arlon%2C8552+Oberpallen%2CLuxembourg&key={Your-API-Key}&language=fr
returns 2 Route d'Arlon, 8552 Oberpallen, Luxembourg
据我所知 - 与我提供的地址完全相同,但地理编码 API STILL returns partial_match
.
显然,partial_match
的内容远不止眼前所见。我当然可以开始对返回的结果进行更严格的检查,而不是简单地依赖 partial_match
。但是,我希望这里有人能够阐明这里的两个问题
- 为什么我上面的第三个例子 returns
partial_match
显然一切正常?
- 当我故意向它提供错误的国家和邮政编码时,为什么 API 会返回错误状态以外的任何内容?
我怀疑我的问题能否在这里找到答案,因为我发现的错误显然与 "obscure" 全局位置有关。一路上我学到了一些有价值的东西,我觉得我不妨在这里分享而不是仅仅关闭问题:
事实是,当处理用户输入的跨越多个国家市场的地址时,然后您根据 Google 地理编码 API 检查这些地址,这太冒险了依靠来自用户的任何原始输入以任何方式可靠。根据您在世界上的位置,输入地址的方式有很多种
house no, street, zip code, place, country
或者
street house no,zip code place, country
或者
street, house no, place, zip code, country
或
.....
最佳做法是
- 保护不同的地址组件——甚至
house no + street
位作为与用户不同的字段
- 在服务器上按照您的喜好构建整个地址字符串 - 地理编码 API 足以处理诸如
post code before place
、post code after place
、missing commas
、too many commas
等
- 如果 API returns a
status = OK
不以任何方式依赖 formatted_address
或 partial_result
字段。相反,使用结果的 address_components
部分以您选择的格式重建整个地址。
- 对您发送到 API 的地址与您刚刚构建的地址执行不区分字符串的比较。
- 只有在获得完美匹配后才继续接受地址。
请注意 address_components 中地址组件的顺序可能会有所不同,因此请专门查找类型 [0] 条目设置为 street_number, route, locality, postal_code
和 country
的组件。最后,空格会破坏最好的方案,所以在比较任何东西之前先做一个
trim(preg_replace('/\s+/',' ', $str));
以确保您已删除所有不需要的空格。
我 运行 遇到了一个关于 Google 地理编码 API 的奇怪问题。我目前正在使用它来查找卢森堡地址的纬度和经度。我无意中发现,即使我的 API 请求中的 post 代码和国家/地区错误,我仍然会返回正确的位置和格式地址。
例如
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
。
To understand the issue without having to scroll & read that code - the API returns the "right" address even when you supply wrong details for country, postcode etc.
这怎么可能不是我无法想象的错误。但是,最初,我只是假设如果发现 partial_match
存在,我会通过要求用户检查提供的地址来检查此类问题。
但是,仅检查这一点会引发误报。取 URL
https://maps.googleapis.com/maps/api/geocode/json?address=2+route+d%27Arlon%2C8552+Oberpallen%2CLuxembourg&key={Your-API-Key}&language=fr
returns 2 Route d'Arlon, 8552 Oberpallen, Luxembourg
据我所知 - 与我提供的地址完全相同,但地理编码 API STILL returns partial_match
.
显然,partial_match
的内容远不止眼前所见。我当然可以开始对返回的结果进行更严格的检查,而不是简单地依赖 partial_match
。但是,我希望这里有人能够阐明这里的两个问题
- 为什么我上面的第三个例子 returns
partial_match
显然一切正常? - 当我故意向它提供错误的国家和邮政编码时,为什么 API 会返回错误状态以外的任何内容?
我怀疑我的问题能否在这里找到答案,因为我发现的错误显然与 "obscure" 全局位置有关。一路上我学到了一些有价值的东西,我觉得我不妨在这里分享而不是仅仅关闭问题:
事实是,当处理用户输入的跨越多个国家市场的地址时,然后您根据 Google 地理编码 API 检查这些地址,这太冒险了依靠来自用户的任何原始输入以任何方式可靠。根据您在世界上的位置,输入地址的方式有很多种
house no, street, zip code, place, country
或者
street house no,zip code place, country
或者
street, house no, place, zip code, country
或
.....
最佳做法是
- 保护不同的地址组件——甚至
house no + street
位作为与用户不同的字段 - 在服务器上按照您的喜好构建整个地址字符串 - 地理编码 API 足以处理诸如
post code before place
、post code after place
、missing commas
、too many commas
等 - 如果 API returns a
status = OK
不以任何方式依赖formatted_address
或partial_result
字段。相反,使用结果的address_components
部分以您选择的格式重建整个地址。 - 对您发送到 API 的地址与您刚刚构建的地址执行不区分字符串的比较。
- 只有在获得完美匹配后才继续接受地址。
请注意 address_components 中地址组件的顺序可能会有所不同,因此请专门查找类型 [0] 条目设置为 street_number, route, locality, postal_code
和 country
的组件。最后,空格会破坏最好的方案,所以在比较任何东西之前先做一个
trim(preg_replace('/\s+/',' ', $str));
以确保您已删除所有不需要的空格。