Привет, я использую google map javascript api v3
вот мой код для рисования полилиний.
for(var i=0; i < addressArr.length; i++){
geocoder.geocode( { 'address': addressArr[i]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
point = results[0].geometry.location;
place.push(results[0].address_components[1].long_name);
flightPlanCoordinates.push(point);
if(flightPlanCoordinates.length == addressArr.length){
flightPath = new google.maps.Polyline({path: flightPlanCoordinates,strokeColor: "#FF0000",strokeOpacity: 0.50,strokeWeight: 2 });
flightPath.setMap(map);
}
addressArr - это массив адресов
Проблема в моем полетеPlanCoordinates, они не в том порядке, в котором я передаю адресArr из цикла for.
предположим, что я прохожу адресArr = [1,2,3,4], мой рейсPlanCoordinates становится [2,3,1,4]. Может ли кто-нибудь предположить, что происходит.
Это просто потому, что внутри цикла вы делаете асинхронный вызов (geocoder.geocode), который требует различного количества времени для выполнения. Поэтому предположим, что требуется 1 секунда для второго элемента геокода в массиве и 3 секунды для геокодирования первого элемента. Тогда, очевидно, вторая функция обратного вызова элемента будет вызываться до первого и, таким образом, будет вставлять ее в полетеPlanCoordinates в первой позиции.
Просто вызовите метод sort() для массива внутри второго оператора if в коде для решения проблемы.
ОБНОВИТЬ:
var i = 0;
function geocode(){
geocoder.geocode({
'address': addressArr[i]
},
function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
point = results[0].geometry.location;
place.push(results[0].address_components[1].long_name);
flightPlanCoordinates.push(point);
i++;
if(addressArr[i] != null)
geocode();
if (flightPlanCoordinates.length == addressArr.length) {
flightPath = new google.maps.Polyline({
path: flightPlanCoordinates,
strokeColor: "#FF0000",
strokeOpacity: 0.50,
strokeWeight: 2
});
flightPath.setMap(map);
}
}
}
}
geocode();
Не слишком уверен, почему он возвращает такие значения, но вы можете просто отсортировать массив и решить эту проблему. flightPlanCoordinates.sort();