Javascript 将地理编码器结果保存到阵列关闭问题

Javascript 将地理编码器结果保存到阵列关闭问题,javascript,google-maps-api-3,closures,Javascript,Google Maps Api 3,Closures,好的,我已经搜索了一段时间来寻找这个问题的解决方案,但是我没有找到任何关于这个问题的具体方法。 在你告诉我谷歌的服务条款之前,请先读到问题的结尾 这就是我的想法: 我想使用谷歌的地理编码器将地址的纬度和经度保存到一个数组中。我设法正确计算了所有的值,但似乎无法将其保存到数组中。我已经使用匿名函数将地址传递给该函数,但保存仍不起作用。请帮忙 关于谷歌的服务条款:我知道我可能不会把这段代码保存在任何地方,也不会在谷歌地图上显示。但我需要将其保存为kml文件,以便稍后输入谷歌地图。我知道,只创建地图会

好的,我已经搜索了一段时间来寻找这个问题的解决方案,但是我没有找到任何关于这个问题的具体方法。 在你告诉我谷歌的服务条款之前,请先读到问题的结尾

这就是我的想法: 我想使用谷歌的地理编码器将地址的纬度和经度保存到一个数组中。我设法正确计算了所有的值,但似乎无法将其保存到数组中。我已经使用匿名函数将地址传递给该函数,但保存仍不起作用。请帮忙

关于谷歌的服务条款:我知道我可能不会把这段代码保存在任何地方,也不会在谷歌地图上显示。但我需要将其保存为kml文件,以便稍后输入谷歌地图。我知道,只创建地图会方便得多,但由于其他原因,这是不可能的

adressdaten[]是一个包含地址数据的二维数组 代码如下:

for (i=1; i<adressdaten.length-1; i++)  {
//Save array-data in String to pass to the Geocoder
var adresse = adressdaten[i][3] + " " + adressdaten[i][4];
var coordinates;
var geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': adresse}, (function (coordinates, adresse) {
        return function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
               var latLong = results[0].geometry.location;
               coordinates = latLong.lat() + "," + latLong.lng();


        } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
        }
    })(coordinates, adresse));
    adressdaten[i][6] = coordinates;
}

for(i=1;i这是一个常见问题解答。地理编码是异步的。您需要将结果保存在从服务器返回结果时运行的回调函数中

类似(未测试)

更新为使用函数闭包

function geocodeAddress(address, i) {
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
       var latLong = results[0].geometry.location;
       coordinates = latLong.lat() + "," + latLong.lng();
       adressdaten[i][6] = coordinates;
    } else {
       alert('Geocode of '+address+' was not successful for the following reason: ' + status);
    }
  });
}

var geocoder = new google.maps.Geocoder();
for (i=1; i<adressdaten.length-1; i++)  {
  //Save array-data in String to pass to the Geocoder
  var adresse = adressdaten[i][3] + " " + adressdaten[i][4];
  var coordinates;
  geocodeAddress(addresse, i); 
功能地理编码地址(地址,i){
geocoder.geocode({'address':address},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
var latLong=results[0]。geometry.location;
坐标=latLong.lat()+”,“+latLong.lng();
地址日期[i][6]=坐标;
}否则{
警报(“+地址+”的地理代码未成功,原因如下:“+状态);
}
});
}
var geocoder=new google.maps.geocoder();

对于(i=1;i这是一个常见问题。地理编码是异步的。您需要将结果保存在从服务器返回结果时运行的回调函数中

类似(未测试)

更新为使用函数闭包

function geocodeAddress(address, i) {
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
       var latLong = results[0].geometry.location;
       coordinates = latLong.lat() + "," + latLong.lng();
       adressdaten[i][6] = coordinates;
    } else {
       alert('Geocode of '+address+' was not successful for the following reason: ' + status);
    }
  });
}

var geocoder = new google.maps.Geocoder();
for (i=1; i<adressdaten.length-1; i++)  {
  //Save array-data in String to pass to the Geocoder
  var adresse = adressdaten[i][3] + " " + adressdaten[i][4];
  var coordinates;
  geocodeAddress(addresse, i); 
功能地理编码地址(地址,i){
geocoder.geocode({'address':address},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
var latLong=results[0]。geometry.location;
坐标=latLong.lat()+”,“+latLong.lng();
地址日期[i][6]=坐标;
}否则{
警报(“+地址+”的地理代码未成功,原因如下:“+状态);
}
});
}
var geocoder=new google.maps.geocoder();

对于(i=1;我已经尝试过了,但它不起作用。您的代码,即使与匿名函数一起使用,也只保存在adressdaten[adressdaten.length][6]中计算的最后一个坐标,所以在一个甚至不应该被触及的字段中。我理解它之所以这样做是因为闭包,而这正是我需要解决的问题。你没有这么说。如果这是问题,那么使用函数闭包将返回的地址与数组中的索引相关联,回答更新。好的,谢谢。很抱歉没有提出问题很明显,我终于意识到我犯的错误。我试图实现geocodeAddress()作为一个单独的函数,不包括在下面的代码范围内。现在一切都很好!我已经尝试过了,但它不起作用。您的代码,即使与匿名函数一起使用,也只保存在adressdaten[adressdaten.length][6]中计算的最后一个坐标,所以在一个甚至不应该被触及的字段中。我理解它之所以这样做是因为闭包,而这正是我需要解决的问题。你没有这么说。如果这是问题,那么使用函数闭包将返回的地址与数组中的索引相关联,回答更新。好的,谢谢。很抱歉没有提出问题很明显,我终于意识到了我犯的错误。我尝试将geocodeAddress()作为一个单独的函数来实现,但没有将其包含在下面的代码范围内。现在一切正常!