好的,所以我已经搜索了一段时间来解决这个问题,但我没有找到具体的解决方法。 在您向我指出Google的服务条款之前,请先阅读问题的内容!
所以这就是这个想法: 我想使用Google的Geocoder将地址的纬度和经度保存到数组中。我设法正确计算了所有值,但我似乎无法将其保存到数组中。我已经使用匿名函数将地址传递给函数,但保存仍然无效。请帮忙!
关于Google的服务条款:我知道我可能无法在任何地方保存此代码,也不会将其显示在Google地图中。但我需要将其保存为kml文件以便稍后输入到Google地图中。我知道,创建Map会更方便,但出于其他原因,这是不可能的。
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;
}
答案 0 :(得分:1)
这是常见问题解答。地理编码是异步的。您需要将结果保存在回调函数中,该函数在从服务器返回时运行。
像(未经测试)
之类的东西更新为使用函数关闭
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);
}