2015-10-13 2 views
1

Я использую «Google API автозаполнения Адресов», чтобы получить данные о различных городах, используя JavaScript, как, что:API Google Адресов не возвращает геометрию

var service = new google.maps.places.Autocomplete(document.getElementById('search-btn')); 
service.addListener('place_changed', function() { 
    var place = service.getPlace(); 
    console.log(place.geometry.location); 
}); 

Проблема: объект не имеет (лат, LNG), но у него есть это сообщение

TypeError: 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context.

at Function.remoteFunction (:3:14)

at Object.InjectedScript.callFunctionOn (:750:66)

+0

Ваш 'поиск-btn' - это кнопка? –

+0

@MrNeo это текстовое поле: '' –

+1

Я временно нашел решение, после того как я получил свой json-объект в "месте" переменная Я запрашиваю (lat, lng) из google geocode api, используя адрес местоположения, такой как: '$ .getJSON (« https://maps.googleapis.com/maps/api/geocode/json?address= »+ место. formatted_address + "& key = myKey", функция (данные, статуя) { var geomtry_arr = [данные ['results'] [0] .geometry.location ['lat'], data ['results'] [0]. geometry.location ['lng']];}); ' –

ответ

2

У меня, похоже, такая же проблема. Вчера карта работала хорошо и вернула геометрию, сегодня она просто пустая, не имеет широты/долготы и той же ошибки.

Кажется, что они обновили API и что-то сломалось

EDIT:

Для меня это было поправимо, взяв маркер координаты вместо того, чтобы пытаться геокодировать его адрес, а затем принимать coodinates адреса.

У меня был такой код (работал 12.10.15):

function geocodePosition(pos) 
      { 
       geocoder = new google.maps.Geocoder(); 
       geocoder.geocode 
       ({ 
        latLng: pos 
       }, 
        function(results, status) 
        { 
         if (status == google.maps.GeocoderStatus.OK) 
         { 
          $("#address").val(results[0].formatted_address); 
          $("#id_location_0").val(results[0].geometry.location.J); 
          $("#id_location_1").val(results[0].geometry.location.M); 
         } 

        } 
       ); 
      } 

Это один перестал работать, но был в состоянии исправить это, беря координаты от маркера. Переменная Pos - marker.getPosition() в моем случае.

     if (status == google.maps.GeocoderStatus.OK) 
         { 
          $("#address").val(results[0].formatted_address); 
          $("#id_location_0").val(marker.position.lat()); 
          $("#id_location_1").val(marker.position.lng()); 
         } 

кажется, сообщается https://code.google.com/p/gmaps-api-issues/issues/detail?id=8734

Вы можете попробовать:

var service = new google.maps.places.Autocomplete(document.getElementById('search-btn')); 
service.addListener('place_changed', function() { 
    var place = service.getPlace(); 
    console.log(place.geometry.location.lat(), place.geometry.location.lng()); 
}); 
+0

Спасибо, это отлично работает для меня console.log (place.geometry.location.lat(), place.geometry.location.lng()); – Basit

1

Временное решение:

var lat = results[0]['geometry']['location'].lat(); 
var lng = results[0]['geometry']['location'].lng(); 
0

У меня была такая же проблема. Мои Lat и Lng отображались как функции, но также и ошибки. Чтобы получить фактические значения, вы должны фактически вызвать lat и long как функции и назначить это переменной в обратном вызове.

geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address' : addressString}, function(results, status){ 
    if(status == google.maps.GeocoderStatus.OK){ 

     ///~~~~~~~~~The part you care about ~~~~~~~~~~/// 
      var lat = results[0].geometry.location.lat(); 
      var lng = results[0].geometry.location.lng(); 

     console.log(lat); // --> 37.7603726 
     console.log(lng); // --> -122.47157 
    } 
    }); 
Смежные вопросы