1

Я использую API геокодирования для преобразования и адресатов в значения координат широты и долготы. Я получаю результаты, но lat и длинные пустые. В других сообщениях SO упоминаются запросы геокодера асинхронны, и Google просто не возвращает данные достаточно быстро. Я не понимаю, как это исправить для моего кода, если это проблема.Геокодирование Google Maps APi не возвращает lat и long

var coords = []; 
var address = '1600 Pennsylvania Ave NW, Washington, DC 20500'; 
var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({'address': address}, function(results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      coords[0] = results[0].geometry.location.lat(); 
      coords[1] = results[0].geometry.location.lng(); 
     } 
     else { 
      coords = 'Could not retrieve coordinates for: ' + address; 
     } 
    }); 
return coords; 

Даже если я пользуюсь известным адресом, я до сих пор не получаю лат или долго.

Результаты объекта:

enter image description here

Является ли это действительно проблема или есть что-то не так с кодом я использую? Как я могу это исправить?

+0

Вы не можете вернуть что-либо из асинхронной функции обратного вызова, вам нужно использовать данные там, где/там, где они существуют – geocodezip

+1

Тогда в чем смысл этой документации: https://developers.google.com/maps/documentation/ javascript/geocoding В нем упоминается все, что возвращается, включая геометрию: {location: LatLng} ... это то, что мне нужно. – JsusSalv

+0

Почему downvote? Это законный вопрос. Если вы не понимаете проблему или документацию, задайте вопрос. Это общедоступный API, и у других были проблемы с ним, которые не были исправлены должным образом. – JsusSalv

ответ

1

Законченное используя это, чтобы решить вопрос:

var request = new XMLHttpRequest(); 
request.open('GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=' + address, false); 
request.send(null); 

Хотя, я должен был установить ложь, чтобы сохранить запрос синхронно. Кажется, это/будет устаревшим, но для моих целей это должно быть хорошо. Теперь я могу разобраться с json, сделав следующее:

var request = new XMLHttpRequest(); 
request.open('GET', 'https://maps.googleapis.com/maps/api/geocode/json?address=' + address, false); 
request.send(null); 

Это все, что я думаю. Просто желайте, чтобы в документации Geocoder были отмечены асинхронные проблемы и предоставлены лучшие решения.

+0

Это не очень хорошая идея, вы должны вызвать (новую) функцию в конце анонимной функции там, где координаты получают значения. – miguev

+0

Если у вас есть образец кода для обмена, пожалуйста, сделайте это, чтобы доказать свою точку зрения. Вышеизложенное отлично работает, поскольку это не кодовая база, открытая для всех, кроме этого внутреннего проекта. Мы зафиксировали ограничения и обходные пути.Так что да, это была хорошая идея, чтобы мы могли двигаться вперед. – JsusSalv

+0

Это делает несколько вещей с результатами геокодирования: https://google-developers.appspot.com/maps/documentation/utils/geocoder/ – miguev

Смежные вопросы