1

嗨,我正在使用谷歌地图 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 是一个地址数组

问题出在我的 flightPlanCoordinates 中,它们不是我从 for 循环中传递 addressArr 的顺序。
假设我正在传递 addressArr=[1,2,3,4],我的 flightPlanCoordinates 变为 [2,3,1,4]。任何人都可以建议正在发生的事情。

4

2 回答 2

1

这仅仅是因为在循环内部您进行了异步调用(geocoder.geocode),这需要不同的时间来完成。因此建议对数组中的第二个元素进行地理编码需要 1 秒,对第一个元素进行地理编码需要 3 秒。然后显然第二个元素的回调函数将在第一个元素之前调用,因此会将其推入第一个位置的 flightPlanCoordinates 中。

只需在代码中第二个 if 语句内的数组上调用 sort() 方法即可解决问题。

更新:

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();
于 2011-08-11T15:19:35.130 回答
0

不太清楚为什么它会返回这样的值,但是您可以对数组进行排序,这将解决您的问题。flightPlanCoordinates.sort();

于 2011-08-11T13:33:45.650 回答