【问题标题】:Event lat/lng mismatch AJAX success data lat/lng事件 lat/lng 不匹配 AJAX 成功数据 lat/lng
【发布时间】:2017-01-28 16:26:46
【问题描述】:

我想在 Google 地图标记完成拖动时检索正确的 lat/lng

但是对于同一个精确点,它给出了两个不同(非常近似的)坐标。

相同drop的示例结果:

evt.latLng: 39.82213542984826, -7.484207724853491

data.results[0].geometry.location: 39.822158, -7.484110899999998

用于获得这些结果的代码:

google.maps.event.addListener(marker, 'dragend', function (evt) {
    $.getJSON({
        url: "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + evt.latLng.lat() + "," + evt.latLng.lng() + '&key=ABC',
        data: {},
        success: function (data, status) {
            if (data.status == "OK") {
                $('#div').html(evt.latLng.lat() + ", " + evt.latLng.lng() + '<br />' + data.results[0].geometry.location.lat + ', ' + data.results[0].geometry.location.lng)
            }
        }
    });
});

所以我的问题是,为什么会有差异,哪一个提供最准确的坐标?

【问题讨论】:

    标签: javascript jquery ajax google-maps


    【解决方案1】:

    dragend 事件上的 latLng 对象是您放置图钉的位置,它表示您要找到最近的映射地址的位置。

    latlng — 纬度和经度值,指定您希望获得最近的、人类可读地址的位置。

    响应中的数据包含为这些坐标找到的最近地址(或者如果未找到则不太具体的地址,例如城镇/城市)。在您的情况下,响应的第一个索引处的地址(这将是最准确的结果)并不完全是您的引脚坐标所在的位置。

    如果您查看完整的 JSON 响应,它会变得更加清晰。

    注意:反向地理编码是一个估计值。地理编码器将尝试在某个容差范围内找到最近的可寻址位置。如果未找到匹配项,则地理编码器将返回零个结果。

    来源: Reverse Geocoding for a Latitude/Longitude

    您可以在此处阅读有关该主题的更多信息,其中包括一个示例。

    【讨论】:

    • 所以geometry.location 给出了标记被丢弃的确切坐标,而evt.latLng 给出了最接近的、人类可读的地址?在您的回答中,我无法理解 geometry.location 中 lat/lng 的目的。另外我想补充一点,data.results[0].formatted_address 是一个完全可读的地址。
    • 反过来。 evt.latLng 是你放下别针的地方。 data.results[0].geometry.location 是最近找到的实际地址的坐标。
    【解决方案2】:

    地理编码功能返回更接近需求坐标的道路位置(或道路中心或其他可访问的地方)..在某些原因中,结果与请求..有时..不一样。 . 你很容易测试这种情况 .. 在不可访问的区域上单击(拖动).. 并查看结果 .. 在某些情况下,当拖动到河流或不可访问的区域时,您可以看到数米或更多的差异。

    【讨论】: