2012-12-21 9 views
8

私は、Googleマップ上のマウスの位置をLatLngオブジェクトに変換しようとしています。私はこのように、などのイベント「をクリックし、」グーグルマップでの位置を取得する上でかなりの数の記事を参照してください。地図を取得マウス位置からの緯度経度

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

しかし、私はマップイベントに応答していないのですので、これは私の目的のために動作しません。 、私は 'tapHold'イベントに応答しています。 tapHoldイベントの中で、私は現在のマウス位置の緯度と経度を取得したいと思います。実際、このような関数がtapHoldイベント以外にも多くの点で有用であることがわかりました。

私はマウスオーバーイベントをオンザフライで作成した後、ロールオーバーイベントからLatLngオブジェクトを取得した後に一度だけ発火させて削除するようなハックを考えることはできますが、より洗練されたソリューションを探しています。ありがとう!

答えて

13

あなたが最初の突起にアクセスする必要がそれらを使用するために、ピクセルを扱うためのいくつかの機能があります。あなたにもダミーオーバーレイでこれを行うことができます

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

::オーバーレイオブジェクトからマップオブジェクト

map.getProjection().fromPointToLatLng(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

+0

xが何であるとyのあなたの例では、私が得る唯一のエラーthats ... –

3

あなたは非常に正確な値を必要としない場合は、あなた自身がマップ(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> 
関連する問題