2013-03-09 17 views
10

Używam metody autouzupełniania, aby uzyskać miejsce sugestie i po kliknięciu miejsca, które chcę wybrać, chcę wyodrębnić Lat i Lng, który jest umieszczony pod place.geometry.location, jak poniżej.Google Maps uzyskać wartość LatLng

Firebug Screenshot

Według moich obserwacji, klawisze ib i jb ciągle się zmienia z każdej sesji. Czy istnieje sposób, aby w przewidywalny sposób wyodrębnić wartości Lat i Lng?

$(document).ready(function() { 

    var mapOptions = { 
     center : new google.maps.LatLng(-33.8688, 151.2195), 
     zoom : 13, 
     mapTypeId : google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map'), mapOptions); 

    $('#searchTextField').bind('keydown keypress', function() { 
     setTimeout(function() { 
      var inputQuery = $('#searchTextField').val(); 

      if (inputQuery.length >= 2) { 
       //console.log(inputQuery); 

       /* 
       var service = new google.maps.places.AutocompleteService(); 

       service.getPlacePredictions({ 
        input : inputQuery 
       }, callback); 
       */ 

       var input = document.getElementById('searchTextField'); 
       var options = { 
        types : ['geocode'] 
       }; 

       var autocomplete = new google.maps.places.Autocomplete(input, options); 

       // Acting on Selecting a place 
       google.maps.event.addListener(autocomplete, 'place_changed', function() { 
        //infowindow.close(); 
        var place = autocomplete.getPlace(); 

        console.log(place); 
        console.log(place.formatted_address); 
        console.log(place.name); 
        console.log(place.geometry.location); 
        console.log(place.geometry.location[0]); 

        // Show the map to the current location selected 
        if (place.geometry.viewport) { 
         map.fitBounds(place.geometry.viewport); 
        } else { 
         map.setCenter(place.geometry.location); 
         map.setZoom(17); 
         // Why 17? Because it looks good. 
        } 

        var marker = new google.maps.Marker({ 
         position : place.geometry.location, 
         map : map, 
         draggable : true, 
        }); 

        $.each(place.geometry.location, function(key, value) { 
         console.log(key + ": " + value); 
        }); 
       }); 
      } 

     }, 0); 

    }); 
}); 

Odpowiedz

35

place.geometry.location jest LatLng, więc można zadzwonić do jego .lat() i .lng() metod.

var location = place.geometry.location; 
var lat = location.lat(); 
var lng = location.lng(); 

Zobaczysz, że te metody są obecne podczas inspekcji tego obiektu.

Nigdy nie używaj nieudokumentowanych właściwości, takich jak ib i jb, które odkryłeś. Google kompiluje interfejs API Map Google za pomocą narzędzia Closure Compiler lub podobnego narzędzia, które generuje losowe nazwy dla prywatnych właściwości i zmiennych.

+1

bardzo dziękuję: D –

+1

Pozdrawiam, cieszę się, że było pomocne. –

+0

chętnie znaleźć rozwiązanie mojego problemu też .. – WorM

Powiązane problemy