Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单张反向地理编码_Javascript_Leaflet_Geocoding_Reverse Geocoding_Esri Leaflet - Fatal编程技术网

Javascript 单张反向地理编码

Javascript 单张反向地理编码,javascript,leaflet,geocoding,reverse-geocoding,esri-leaflet,Javascript,Leaflet,Geocoding,Reverse Geocoding,Esri Leaflet,我想要的是使用传单地图+功能,在这里我可以通过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: '&

我想要的是使用传单地图+功能,在这里我可以通过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); 

这是因为
消息
将被
运行
函数的HTTP响应填充

因为执行
run
函数需要一些时间,所以
警报(消息)
将在run函数完成之前执行

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

编辑:

好的,那么你要找的是
承诺
。 您的代码需要等待插件获取地址。 不幸的是,我不知道如何使用vanilla JS实现这一点,所以我导入了jQuery(使用方法
$。当
时,然后
和对象
$。延迟

这是新的


如果您在vanilla JS中需要它,我可以查看vanilla JS中的承诺。

之所以会出现这种情况,是因为
消息将被
run
函数的HTTP响应填满

因为执行
run
函数需要一些时间,所以
警报(消息)
将在run函数完成之前执行

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

编辑:

好的,那么你要找的是
承诺
。 您的代码需要等待插件获取地址。 不幸的是,我不知道如何使用vanilla JS实现这一点,所以我导入了jQuery(使用方法
$。当
时,然后
和对象
$。延迟

这是新的


如果您在vanilla JS中需要此功能,我可以查看vanilla JS中的承诺。

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

var geocodeService=L.esri.geocodeing.geocodeService()


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

var geocodeService=L.esri.geocodeing.geocodeService()


谢谢你,这部分有帮助。但是如何使用这个geocodins作为一个函数,比如:var address=convertToAddress([40.725,-73.985]);函数convertToAddress(]lat,lon]){//here return address after geocoding}注释破坏了代码,因此请查看修改后的问题Hello,不幸的是没有。我仍然无法获取变量中的解码地址。请您看一下这个提琴:Lin 16每次您想要解码地址并使用变量时,您必须执行以下操作:var result=convertToAddress([lat,lon]);$。当(result).done(function(r){result=r;//在此处编写使用地址的其余代码})与您联系时,这部分会有所帮助。但是如何使用这个geocodins作为一个函数,比如:var address=convertToAddress([40.725,-73.985]);函数convertToAddress(]lat,lon]){//here return address after geocoding}注释破坏了代码,因此请查看修改后的问题Hello,不幸的是没有。我仍然无法获取变量中的解码地址。请您看一下这个提琴:Lin 16每次您想要解码地址并使用变量时,您必须执行以下操作:var result=convertToAddress([lat,lon]);$。when(result).done(function(r){result=r;//在此处编写使用地址的其余代码})简单提示:只需将代码格式添加到这行代码var geocodeService=L.esri.geocode.geocodeService();;感谢简单提示:只需将代码格式添加到这行代码var geocodeService=L.esri.geocodeing.geocodeService();;谢谢
var address = convertToAddress([40.725, -73.985]);

function convertToAddress(]lat,lon])
{
  // here return address after geocoding
}
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();
});