web-dev-qa-db-ja.com

マウスの位置から地図の緯度経度を取得する

グーグルマップ上のマウスの位置をLatLngオブジェクトに変換しようとしています。私はこのようにグーグルマップの「クリック」イベントなどで位置を取得することについてかなりの数の投稿を見ます:

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

しかし、私はマップイベントに応答しておらず、「tapHold」イベントに応答しているため、これは私の目的には機能しません。 tapHoldイベント内で、現在のマウス位置の緯度と経度を取得したいと思います。実際、このような関数は、tapHoldイベントだけでなく多くの点で役立つことがわかりました。

その場でマウスオーバーイベントを作成し、ロールオーバーイベントからLatLngオブジェクトを取得した後、一度だけ起動して削除するなどのハックを考えることができますが、私にはちょっとハックのようです...もっと探していますエレガントなソリューション。ありがとう!

10
botbot
google.maps.event.addListener(map, 'mousemove', function (event) {
              displayCoordinates(event.latLng);               
          });

function displayCoordinates(pnt) {

          var lat = pnt.lat();
          lat = lat.toFixed(4);
          var lng = pnt.lng();
          lng = lng.toFixed(4);
          console.log("Latitude: " + lat + "  Longitude: " + lng);
      }

出典: http://seydahatipoglu.wordpress.com/2012/10/21/how-to-display-cursor-coordinates-in-google-map-javascript/

16
bicycle

ピクセルを操作するためのいくつかの機能があります。それらを使用するには、最初に投影にアクセスする必要があります。

マップオブジェクトから

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

14
Nils

非常に正確な値が必要ない場合は、マップの境界(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>
3
benbai123