2012-12-21 18 views
8

Sto provando a convertire la posizione del mouse su una mappa di google in un oggetto LatLng. Vedo un bel paio di messaggi su come ottenere la posizione dalla con la mappa di google "click" evento ecc, in questo modo:mappa latitudine longitudine dalla posizione del mouse

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

Ma, questo non funziona per i miei scopi perché io non sto rispondendo ad un evento mappa , Sto rispondendo a un evento "tapHold". All'interno dell'evento tapHold mi piacerebbe ottenere la latitudine e la longitudine della posizione corrente del mouse. In realtà, ho visto una funzione come questa essere utile in molti modi, al di là di un semplice evento TapHold.

Posso pensare ad alcuni hack come, per creare un evento mouseover al volo, quindi solo lasciarlo sparare una volta e cancellarlo dopo aver ottenuto l'oggetto LatLng dall'evento di rollover, ma sembra un po 'logico per me ... Alla ricerca di una soluzione più elegante. Grazie!

risposta

13

ci sono diverse funzioni per lavorare con i pixel, per usarli è necessario accedere alla proiezione prima.

Dall'oggetto mappa

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

da un oggetto di sovrapposizione:

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

Si può fare questo con una sovrapposizione di manichino così:

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

Ecco un riferimento alla la documentazione: https://developers.google.com/maps/documentation/javascript/reference#Projection

+0

ciò che è x e y nel tuo esempio, questo è l'unico errore che ottengo ... –

3

Se non avete bisogno di un valore molto preciso, si può calcolare da soli in base ai limiti della mappa (bias di età inferiore a 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> 
Problemi correlati