我们打算在我们的网站上使用 Google Maps Geocoding API。我们要使用 Google Places Autocomplete API并使用 Geocoder API 将地址转换为 (X,Y) 坐标.
然而,在法国,一些邮政地址的格式是小村庄或小村庄和城市(这些都是正确的地址),而不是经典的“数字、街道和城市”。
这种地址的地理编码响应是:
- partial_match =
空
- 位置类型 =
GEOMETRIC_CENTER
或RANGE_INTERPOLATED
- type =
route
但这是与没有街道号码的街道名称相同的响应。
有什么方法可以区分“小村庄”和“没有编号的街道”之间的 API 响应?
感谢您的任何见解。
[编辑]这是我的问题的一个例子:
- 哈姆雷特查询:http://maps.googleapis.com/maps/api/geocode/json?address=La+Croix+Fay-de-Bretagne+France&sensor=false
- 街道 无号码查询:http://maps.googleapis.com/maps/api/geocode/json?address=avenue+Charles+Couchoud+Nantes+France&sensor=false
两者都返回相同的location_type
:
“location_type”:“GEOMETRIC_CENTER”
最佳答案
简短回答 - 您的 Hamlet 示例实际上是在解析一条街道:Map Link
回答您的一般问题(假设您在街道以外的其他地方发生了这种情况),即如何判断 Geocoding API 如何确定部分匹配。如果你得到一条路线,它应该意味着你已经返回一条街道(有或没有号码)。哈姆雷特应该显示为 sublocality
或 neighborhood
如果不是它自己的地方(在加拿大,这是我所看到的):
*请注意,尽管这些在加拿大不是有效的邮寄地址,这使得我的示例与您指定的标准略有不同。
要知道路由是完全匹配还是猜测是状态代码的来源:
来自API Doc's :
"ROOFTOP" indicates that the returned result is a precise geocode for which we have location information accurate down to street address precision. "RANGE_INTERPOLATED" indicates that the returned result reflects an approximation (usually on a road) interpolated between two precise points (such as intersections). Interpolated results are generally returned when rooftop geocodes are unavailable for a street address. "GEOMETRIC_CENTER" indicates that the returned result is the geometric center of a result such as a polyline (for example, a street) or polygon (region). "APPROXIMATE" indicates that the returned result is approximate.
我希望您会更频繁地看到 neighborhood
和 sublocality
的 GEOMETRIC_CENTER
和更频繁的 RANGE_INTERPOLATED
道路 - 但这是一个猜测,我认为这更多地取决于他们在该位置拥有多少数据以及算法最终如何计算该点。
当您确实有一个 Hamlet 作为 route
返回时,我认为没有任何方法可以仅从 Geocoding API 返回的数据中判断出发生了什么。我能想到的唯一解决方案是根据已知问题列表在您的应用程序中的代码中处理这些情况 - 但我可以看到这是非常有问题和劳动密集型的。
这或许说明了小村庄的概念是一个邮政/行政概念,它根本不转化为 map 数据?我试图在这里找到 La Croix,但没有成功区分:http://www.laposte.com/find_a_post_code/find
还有一点要注意:如果 Geocoding API 已经解析了哈姆雷特和街道,您应该有多个结果可供选择,例如Yarmouth请注意,如果您有多个结果,最后的类型列表也会告诉您返回的结果类型:"types": [ "locality", "political"]
更新
我需要更多示例,因此决定寻找对您的问题也有帮助的示例。我找到了这个 French Hamlets 的列表.尝试了一些我得到了这些结果:
- 布莱西:sublocality
- 布雷蒂尼:sublocality
- Hautacam:要么完全找不到,要么是一个公园并显示为 locality
- 拉蒙吉:sublocality
- 火腿/神职人员:locality所以看起来可能有一些作为地方出现 - 可能是一个大小阈值 - 许多子地方都非常小。
我认为您可以放心地假设,如果某物被评估为一条路线,您的结果是一条街道而不是一个 hameaux <--(并且认为我在加拿大这里的 French Immersion 中表现不佳)。此外,如果您在结果中得到一条路线和一个次区域,则可以安全地确定哪个是哪个。
最后,如果您知道您拥有的地址部分是一个次区域而不是一条街道,并且希望在地址中指定它,我认为 Google 的 API 不允许这样做。还有其他services that do, like ESRI .我没有使用过它们,也不知道许可的详细工作原理,但它似乎像谷歌一样提供免费和订阅服务。
为了完整起见 - 我想我找到了 La Croix使用 "address": "La Croix, L'Èle-d'Yeu"
条目中的 ESRI 站点来自该列表 - 缺点是它无法识别 Fay-de-Bretagne 并给出一个答案。
关于api - 在没有编号的情况下区分小村庄和街道之间的 API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512319/