【问题标题】:Leaflet reverse geocode传单反向地理编码
【发布时间】:2019-03-08 09:05:35
【问题描述】:

我想要的是使用传单地图+功能,我可以传递纬度/经度并接收带有地址的短信。

我正在尝试使用 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
}

【问题讨论】:

    标签: javascript leaflet geocoding reverse-geocoding esri-leaflet


    【解决方案1】:

    您可以通过以下方式更改功能:

    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();
    });
    

    【讨论】:

    • 简单提示:只需将代码格式添加到这行代码 var geocodeService = L.esri.Geocoding.geocodeService();;谢谢
    【解决方案2】:

    发生这种情况是因为 message 将被来自 run 函数的 HTTP 响应填充。

    因为run 函数需要一些时间来执行,所以alert(message) 将在run 函数完成之前执行。

    以下是可以解决您的问题的方法:JSFiddle

    编辑:

    好的,你要找的是Promises。 您的代码需要等待插件获取地址。 不幸的是,我不知道如何用 vanilla JS 做到这一点,所以我导入了 jQuery(使用方法 $.whenthen 以及对象 $.Deferred)。

    这是新的Fiddle

    如果你在 vanilla JS 中需要这个,我可以查看 vanilla JS 中的 Promises。

    【讨论】:

    • 谢谢,这部分有帮助。但是如何使用这个地理编码作为一个函数: var address = convertToAddress([40.725, -73.985]); function convertToAddress(]lat,lon]) { // 这里是地理编码后的返回地址 }
    • cmets 正在破解密码,请查看修改后的问题
    • 你好,很遗憾没有。我仍然无法在变量中获得解码地址。请你看看这个小提琴:jsfiddle.net/c71ndrhv/1Lin 16
    • 每次你想解码地址并使用你的变量时,你必须这样做: var result= convertToAddress([lat,lon]); $.when(result).done(function(r){ result=r; //此处使用地址的其余代码 })
    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多