2012-12-21 12 views
8

Próbuję przekonwertować pozycję myszy na mapie google do obiektu LatLng. Widzę sporo postów na uzyskanie pozycji z z mapą google „kliknij” zdarzenie etc, tak:uzyskać szerokość geograficzną szerokości geograficznej z pozycji myszy

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

Ale to nie działa dla moich celów, ponieważ ja nie reaguje na zdarzenia mapie , Odpowiadam na wydarzenie "tapHold". Wewnątrz zdarzenia tapHold chciałbym uzyskać szerokość i długość geograficzną aktualnej pozycji myszy. Właściwie mogłem zobaczyć, że taka funkcja jest przydatna na wiele sposobów, poza zwykłym wydarzeniem tapHold.

Mogę wymyślić kilka hacków takich jak, aby utworzyć najeżdżanie kursorem w locie, a następnie pozwolić mu wystrzelić tylko raz i usunąć go po otrzymaniu obiektu LatLng od zdarzenia najazdu, ale wydaje mi się nieco hackowskie dla mnie ... Poszukuję bardziej eleganckiego rozwiązania. Dzięki!

Odpowiedz

13

Istnieje kilka funkcji do pracy z pikseli, aby z nich korzystać trzeba najpierw uzyskać dostęp do projekcji.

od obiektu mapy

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

z obiektu nakładki:

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

Można to zrobić za pomocą manekina nakładki także:

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

Tu jest odniesienie do dokumentacja: https://developers.google.com/maps/documentation/javascript/reference#Projection

+0

co jest xi y w twoim przykładzie, to jedyny błąd, który dostaję ... –

3

Jeśli nie potrzebujesz bardzo dokładną wartość można obliczyć samemu w oparciu o granice mapie (bias poniżej 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> 
Powiązane problemy