拖动后标记响应的坐标不正确

时间:2018-11-04 08:28:12

标签: google-maps google-maps-api-3

https://demo.chan15.info/map/

这是我的演示页面,拖动标记后它将响应坐标,但是我发现如果将鼠标拖动到某个地方,坐标经常会出错,尤其是在河边,但是如果使用真实的Google地图网站并单击任意放在河上,您将获得正确的坐标,如果您通过Google地图网站的坐标绘制地图,那将是正确的,如何解决?

1 个答案:

答案 0 :(得分:1)

我相信您代码中的问题在以下内容中

google.maps.event.addListener(marker, 'dragend', function() {
    geocoder.geocode({
        latLng: marker.getPosition()
    }, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            if (results[0]) {
                var responseAddress = results[0].formatted_address;
                var locations = results[0].geometry.location;

                lat.value = locations.lat();
                lng.value = locations.lng();
            }
        }
    });
});

完成拖动标记后,您将执行反向地理编码并从反向地理编码的结果中获取坐标。请注意,反向地理编码通常不会返回标记的位置,它将返回最近的已知地址位置。

为说明这一点,请看一下Geocoder工具及其如何解析靠近河流的坐标25.082015,121.501121

https://google-developers.appspot.com/maps/documentation/utils/geocoder/#q%3D25.082015%252C121.501121

enter image description here

您会看到坐标25.082015,121.501121被解析为坐标为25.081415,121.499519的最近地址(道路上的标记A)。因此,当您绘制第二张地图时,它使用解析地址的坐标而不是标记的坐标。

为了解决这个问题并让标记的坐标更改代码为

google.maps.event.addListener(marker, 'dragend', function() {
    lat.value = marker.getPosition().lat();
    lng.value = marker.getPosition().lng();
});

您根本不需要反向地理编码。我希望这有帮助!