谷歌地图反向地理编码不返回正确/准确的地址

Posted

技术标签:

【中文标题】谷歌地图反向地理编码不返回正确/准确的地址【英文标题】:Google Maps reverse geocode doesn't return correct/accurate address 【发布时间】:2016-12-17 21:10:48 【问题描述】:

所以我有这个具体地址:Rijtakker 22, Meijel, Netherlands 这只是一个谷歌地图已知的普通地址,如www.google.nl/maps/place/Rijtakker+22,+5768+Meijel/@51.3482599,5.8857767,17z/data=!3m1!4b1!4m5!3m4!1s0x47c7379f181928e7:0x2a2900b2927e2ebc!8m2!3d51.3482566!4d5.8879654?hl=nl所示。

在我的一个 (ASP.NET) 应用程序中,我制作了一个 Web 用户控件,用户可以在 Google Maps-esque 字段中输入地址,它提供建议、自动完成等功能。所有标准都非常标准,并且基于默认的 Google Maps API 行为/文档代码示例,显示为 in this image。当用户选择一个地址时,一个或多个标记对象会出现在地图上。如果只有一个标记适用,则该标记的位置 (lat, lng) 写入隐藏字段,如果多个标记适用,则单击标记的位置 (lat, lng) 写入同一隐藏字段。在 PostBack 时,向反向地理编码 URL 发出 WebRequest 以检索所有地址信息。再一次,一切都很标准。对于上述地址,XML 中返回的 lat 和 lng 值分别为 51.34824645.8879746999999725

第一个奇怪的事情是,当我使用地理编码 URL 将地址转换为纬度和经度时,我得到的结果与我的谷歌地图用户控件中的标记不同。链接maps.googleapis.com/maps/api/geocode/xml?address=Rijtakker%2022,%20Meijel,%20Netherlands返回

<location>
    <lat>51.3482464</lat>
    <lng>5.8879747</lng>
</location>

无论哪种方式,当反向地理编码时,经度和纬度值都返回地址范围,或者在 Google API 术语中返回路线,而不是特定的street_address Rijtakker 2-40, 5768 Meijel, 荷兰。而不是实际正确的地址。无论我使用反向地理编码 URL(maps.googleapis.com/maps/api/geocode/xml?latlng=51.3482464,5.8879746999999725maps.googleapis.com/maps/api/geocode/xml?latlng=51.3482464,5.8879747)还是使用 Google Maps API 文档中的地图示例(developers.google.com/maps/documentation/javascript/examples/geocoding-reverse

我做错了什么? (反向)地理编码过程是否存在一些限制,不是每个地址都可以准确转换?

【问题讨论】:

得到了另一个奇怪的地址:Zilleveld 7, Neeritter, Netherlands。该地址在 Google 地图中是已知的,但转到 maps.googleapis.com/maps/api/geocode/… 会返回路线而不是街道地址。难道API中的很多地址还是未知数? 这可能是partial_matches partial_match 的情况表明地理编码器没有返回原始请求的完全匹配,尽管它能够匹配请求的地址的一部分。您可能希望检查拼写错误和/或不完整地址的原始请求。这个thread也可能和你的困境类似。 拼写正确;在相关的用户控制中,还使用了“建议”(Google API)。 【参考方案1】:

这是RANGE_INTERPOLATED结果的正常行为

查看结果的geometry.location.type,查看Developer's Guide 以了解其值的含义。简而言之,Google Maps 没有 Rijtakker, Meijel 的建筑物/房屋 22,但它确实有一个地址范围(2-40 >) 并且能够在通常是 22 的位置进行插值。

地理编码Rijtakker 2, Meijel 和Rijtakker 40, Meijel,街道起点和终点的结果。

相比之下,51.348165,5.887406 返回 ROOFTOP 结果。

您还可以通过反向地理编码获得 RANGE_INTERPOLATED 结果,其中包含精确地址而不是地址范围,并且如果您的 latlng 更接近于地址范围比实际建筑物。

示例:51.347234,5.886687 返回“Startebosweg 4, 5768 Meijel”,然后将其 geocodes as a ROOFTOP result 及其位置 51.348299,5.886218 地理编码为相同的 ROOFTOP 结果。本段中 2 个纬度之间的差距可能是由于底图数据存在故障。

【讨论】:

以上是关于谷歌地图反向地理编码不返回正确/准确的地址的主要内容,如果未能解决你的问题,请参考以下文章

谷歌反向地理编码 - 如何捕捉到最近的完整邮政编码

反向地理编码不返回邮政编码

反向地理编码不显示地址

谷歌地图地理编码器返回相同的结果

如何从谷歌地图地理编码返回地址类型?

如何通过反向地理编码获得可靠的美国各州响应?