Листовка обратного геокода - PullRequest
1 голос
/ 08 марта 2019

Я хочу использовать функцию Leaflet maps +, где я могу передать Lat / Lng и получить текстовое сообщение с адресом.

Я пытаюсь использовать esri plugin, но я делаю что-то не так. В настоящий момент я не могу получить адрес внутри функции, но я не знаю, как правильно передать его в переменную.

Вот мой код:

var map = L.map('map').setView([40.725, -73.985], 7);

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

var geocodeService = L.esri.Geocoding.geocodeService();

map.on('click', function(e) {
  geocodeService.reverse().latlng(e.latlng).run(function(error, result) {
    L.marker(result.latlng).addTo(map).bindPopup(result.address.Match_addr).openPopup();
  });
});

var message;

message = geocodeService.reverse().latlng([40.725, -73.985]).run(function(error, result) {
  //alert(result.address.Match_addr); //this alert works here ok and can retur addrress
  return result.address.Match_addr;
});

//this alert won't work, why I can get the address here outside the function
alert(message); 

и вот полный пример: https://jsfiddle.net/5aq6z1vL/

Как использовать геокодер в качестве функции, подобной:

var address = convertToAddress([40.725, -73.985]);

function convertToAddress(]lat,lon])
{
  // here return address after geocoding
}

1 Ответ

0 голосов
/ 08 марта 2019

Это происходит потому, что message будет заполнен HTTP-ответом от функции run.

Поскольку функции run требуется некоторое время для выполнения, alert(message) будет выполнено до завершения функции запуска.

Вот что из того, что может решить вашу проблему: JSFiddle

EDIT:

Хорошо, значит, вы ищете Promises. Ваш код должен ждать, пока плагин получит адрес. К сожалению, я не знаю, как это сделать с vanilla JS, поэтому я импортировал jQuery (чтобы использовать методы $.when и then и объект $.Deferred).

Вот новая Скрипка

Если вам нужно это в vanilla JS, я могу посмотреть на Promises в vanilla JS.

...