谷歌地图反向地理代码没有返回正确/准确的地址

Google Maps reverse geocode doesn't return correct/accurate address

本文关键字:地址 返回 代码 谷歌地图      更新时间:2023-09-26

所以我有这个特定的地址: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 API行为/文档代码示例,如下图所示。当用户选择一个地址时,一个或多个Marker对象将出现在地图上。如果只有一个标记适用,则该标记的位置(lat, lng)被写入隐藏字段,如果多个标记适用,则被单击的标记的位置(lat, lng)被写入同一隐藏字段。在PostBack上,对反向地理编码URL进行WebRequest以检索所有地址信息。再一次,都很标准。对于上述地址,XML中返回的lat和lng值分别为51.34824645.8879746999999725

第一个奇怪的事情是,当我使用地理编码URL将地址转换为纬度和经度时,我得到的结果与Google Maps用户控件中的标记不同。链接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, Netherlands。而不是实际的正确地址。我是否使用反向地理编码URL (maps.googleapis.com/maps/api/geocode/xml?latlng=51.3482464,5.8879746999999725maps.googleapis.com/maps/api/geocode/xml?latlng=51.3482464,5.8879747)或我使用谷歌地图API文档中的地图示例(developers.google.com/maps/documentation/javascript/examples/geocoding-reverse)

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

这是RANGE_INTERPOLATED

结果的正常行为

参见result的geometry.location.type,参见Developer's Guide了解其值的含义。简而言之,谷歌地图没有Rijtakker, Meijel中的建筑/房屋22,但它确实有一个地址范围(2-40),并且能够插入22通常在哪里。

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

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

您也可以从反向地理编码中获得RANGE_INTERPOLATED结果,使用精确的地址而不是地址范围,如果您的latlng更接近地址范围而不是实际建筑,则该精确地址可能地理编码为RANGE_INTERPOLATEDROOFTOP结果。

示例:51.347234,5.886687返回"Startebosweg 4,5768 Meijel",然后将其地理编码为ROOFTOP结果,并将其位置51.348299,5.886218地理编码为相同的ROOFTOP结果。这一段的两个latlgs之间的差距可能是由于basemap数据中的一个小故障。