我需要在数组中存储一些谷歌地图坐标,我通过地理编码器获取坐标,所以我传递城市名称或地址,它返回坐标。
我发现地理编码器必须是异步功能,因为我没有按照我要求的相同顺序给出答案。所以坐标以我需要的不同顺序存储。
例如,如果我要求巴塞罗那 - >巴黎 - >巴塞罗那答案总是巴塞罗那的坐标 - >巴塞罗那 - >巴黎或巴黎 - >巴塞罗那 - >巴塞罗那。或者如果我问巴黎 - >罗马 - >奥斯陆它以另一种顺序回答。
var address = ['Barcelona', 'Viena','Oslo'];
for (var i = 0; i < address.length; i++ ) {
geocoder.geocode({
'address': address[i]
}, function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
lineCoordinates.push(results[0].geometry.location);
cities.push(results[0].address_components[0].long_name);
console.log("he terminado para:" + results[0].address_components[0].long_name);
}
});
}
如何以正确的顺序存储回复?
谢谢
答案 0 :(得分:1)
您可以为您的目的使用回调。将您的地理编码请求发送到以下函数:
doGeocode: function (address, postal_code, callback) {
console.log("TEST: " + address.toString());
var geocoder = new google.maps.Geocoder();
geocoder.geocode({
'address': address,
'componentRestrictions': {
'postalCode': postal_code,
'country': 'de'
}
}, function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
console.log(results);
callback(results);
} else {
//Error handling
alert('Geocode was not successful for the following reason: ' + status);
}
});
现在你可以在每个回调中工作,如:
doGeocode (adress, postal_code, function (response1){
//Barcelona
doGeocode (adress, postal_code, function (response2){
//Viena
doGeocode (adress, postal_code, function (response3){
//Oslo
//here you have all your requested information from all 3 requests
)};
)};
)};
答案 1 :(得分:1)
每个地址,lineCoordinates和city都有数组。我要废弃它,只有一个包含所有内容的数组,因此您可以使用其坐标和名称来绑定您要求的城市。
var cities = [
{
name: 'Barcelona',
longName: '',
coordinates: ''
},
{
name: 'Viena',
longName: '',
coordinates: ''
},
{
name: 'Oslo',
longName: '',
coordinates: ''
}
];
for (var i = 0; i < cities.length; i++ ) {
geocoder.geocode({
'address': cities[i].name
}, function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
cities[i].coordinates = results[0].geometry.location;
cities[i].longName = results[0].address_components[0].long_name;
}
});
}