从鼠标位置获取地图纬度和经度

12

我想将鼠标在Google地图上的位置转换为LatLng对象。我看到许多帖子提供了从Google地图“click”事件中获取位置的方法,例如:

google.maps.event.addListener(map, 'click', function(event) {
  mouseLocation = event.latLng;
});

但是,这对我的目的没有用,因为我不是在响应地图事件,而是在响应“tapHold”事件。在tapHold事件中,我想获取当前鼠标位置的纬度和经度。实际上,我认为像这样的函数在超出tapHold事件以外的许多方面都很有用。

我可以想到一些hack的方法,比如即时创建一个mouseover事件,然后只让它触发一次,在从rollover事件获取LatLng对象后将其删除,但这似乎有些hackish...寻找更优雅的解决方案。谢谢!

3个回答

21

16

有几个用于处理像素的函数,要使用它们,您需要先访问投影。

从地图对象中开始。

map.getProjection().fromPointToLatLng(new google.maps.Point(x, y))

从重叠对象:

overlay.getProjection().fromContainerPixelToLatLng(new google.maps.Point(x, y));

你也可以使用虚拟遮罩层来实现此功能:

var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);

这里提供了文档的参考链接:https://developers.google.com/maps/documentation/javascript/reference#Projection


x和y是屏幕上的鼠标位置。 - Saumya gupta

4

如果您不需要非常精确的值,可以根据地图范围自行计算(偏差在1%以下):

    <!DOCTYPE html>
<html>
    <head>
        <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
        <script>
            var map;

            function initialize() {
                var mapOptions = {
                    zoom: 12,
                    center: new google.maps.LatLng(33.397, -81.644),
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                map = new google.maps.Map(document.getElementById('map_canvas'),
                    mapOptions
                );
                google.maps.event.addListener(map, 'click', function(event) {
                    document.getElementById('latMap').value = event.latLng.lat();
                    document.getElementById('lngMap').value = event.latLng.lng();
                });
            }
            function mapDivClicked (event) {
                var target = document.getElementById('map_canvas'),
                    posx = event.pageX - target.offsetLeft,
                    posy = event.pageY - target.offsetTop,
                    bounds = map.getBounds(),
                    neLatlng = bounds.getNorthEast(),
                    swLatlng = bounds.getSouthWest(),
                    startLat = neLatlng.lat(),
                    endLng = neLatlng.lng(),
                    endLat = swLatlng.lat(),
                    startLng = swLatlng.lng();

                document.getElementById('posX').value = posx;
                document.getElementById('posY').value = posy;
                document.getElementById('lat').value = startLat + ((posy/350) * (endLat - startLat));
                document.getElementById('lng').value = startLng + ((posx/500) * (endLng - startLng));
            }
            google.maps.event.addDomListener(window, 'load', initialize);
        </script>
    </head>
    <body>
        <div id="map_canvas" onclick="mapDivClicked(event);" style="height: 350px; width: 500px;"></div>
        x: <input id="posX" />
        y: <input id="posY" />
        lat: <input id="lat" />
        lng: <input id="lng" />
        <div />
        lat from map: <input id="latMap" />
        lng from map: <input id="lngMap" />
    </body>
</html>

我想要快速获取粗略的经纬度信息,您提供的小代码片段正好帮我做到了这一点。谢谢! - Vinayak Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接