簡體   English   中英

傳單反向地理編碼

[英]Leaflet reverse geocode

我想要的是使用傳單地圖 + 功能,我可以通過 Lat/Lng 並接收帶有地址的短信。

我正在嘗試使用 esri 插件,但是我做錯了。 目前我想獲取函數內部的地址,但我不知道如何將其正確傳遞給變量。

這是我的代碼:

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
}

發生這種情況是因為message將填充來自run函數的 HTTP 響應。

因為run函數需要一些時間來執行alert(message)將在 run 函數完成之前執行。

這是可以解決您的問題的小提琴: JSFiddle

編輯:

好的,所以你要找的是Promises 您的代碼需要等待插件獲取地址。 可惜的是,我不知道如何與JS香草做到這一點,所以我已經導入的jQuery(使用方法$.whenthen和對象$.Deferred )。

這是新的小提琴

如果您在 vanilla JS 中需要這個,我可以查看 vanilla JS 中的 Promises。

只是您可以通過以下方式更改功能:

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

geocodeService.reverse().latlng([36.2933693, 7.9388789]).run(function (error, result) {
  if (error) {
    return;
  }

  L.marker(result.latlng).addTo(map).bindPopup(result.address.Match_addr).openPopup();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM