我有一个地址数组(标签),我想将所有地址的位置保存到另一个多维(测试)我尝试过这段代码,但它没有工作
var test = [];
for (var i = tab.length - 1; i >= 0; i--) {
var r=[];
geocoder.geocode({address: tab[i].toString()},function (result,status){
if (status == google.maps.GeocoderStatus.OK) {
r.push(result[0].geometry.location.k);
r.push(result[0].geometry.location.D);
}else{
r.push(0);
r.push(0);
};
})
test.push(r);
}

答案 0 :(得分:0)
您必须在地理编码回调中创建/推送临时数组r
:
var tab =['berlin','paris','rome'],
test =[],
geocoder=new google.maps.Geocoder();
for (var i = tab.length - 1; i >= 0; i--) {
geocoder.geocode({address: tab[i].toString()},function (result,status){
var r=[];
if (status == google.maps.GeocoderStatus.OK) {
r.push(result[0].geometry.location.lat());
r.push(result[0].geometry.location.lng());
}else{
r.push(0);
r.push(0);
};
test.push(r);
//print resulting array
if(test.length===tab.length){
document.body.textContent='[\n ['+test.join('],\n [').toString()+']\n]';
}
})
}
body{white-space:pre;font-family:monospace;}
<script src="https://maps.googleapis.com/maps/api/js?v=3"></script>
另请注意:要访问LatLng的lat
和lng
,请使用类似名称的内置方法。 API版本中的属性k
和D
将不稳定。
但阵列方法存在问题: 无法保证结果以所需顺序到达,您将无法获得地址与返回位置之间的关系。
另一种方法,它使用一个对象(使用地址作为键):
var tab ={'berlin':null,'paris':null,'rome':null},
geocoder=new google.maps.Geocoder();
for (var k in tab) {
geocoder.geocode(
{
address: k.toString()
},
(function(address){
return function(result,status){
if (status == google.maps.GeocoderStatus.OK) {
tab[address]={
lat:result[0].geometry.location.lat(),
lng:result[0].geometry.location.lng()
}
}
document.body.textContent=JSON.stringify(tab);
}
}(k)));
}
body{white-space:pre;font-family:monospace;}
<script src="https://maps.googleapis.com/maps/api/js?v=3"></script>