将google.maps.latlng添加到循环内的数组中

时间:2011-10-09 23:33:41

标签: javascript google-maps google-maps-api-3

这是我在地图上绘制多边形的代码......这不起作用。请告诉我我做错了什么。

如果我像这样手动添加点数:

points.push(new google.maps.LatLng(51.35020072, -2.978521717));
points.push(new google.maps.LatLng(51.35047285, -2.971755353));
points.push(new google.maps.LatLng(51.34943740, -2.969097019));

而不是使用循环它工作正常。有任何想法吗?

    function drawpolygon(areaid) {

    var points = []; 

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "polygons.asmx/GetPolygonsByArea",
        data: '{ id: "' + areaid + '" }',
        dataType: "json",
        success: function (msg) {
            var c = eval(msg.d);
            for (var i in c) {

                var lat = parseFloat(c[i][1]);
                var lng = parseFloat(c[i][2]);

                points.push(new google.maps.LatLng(lat, lng));

            }
        }
    });

    var Area;

    Area = new google.maps.Polygon({
        paths: points,
        strokeColor: "#204F68",
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: "#A1CBE2",
        fillOpacity: 0.35
    });

    Area.setMap(map);

    google.maps.event.addListener(Area, 'click', showArrays);
    infowindow = new google.maps.InfoWindow();
}

1 个答案:

答案 0 :(得分:5)

我不确定“手动添加点”是什么意思,但我认为问题是ajax调用是异步的。所以,你正在调用“$ .ajax(...)”,然后直接进入创建区域的代码你的点数组中有任何内容:异步调用你的成功函数还没有发生。

尝试重新排列代码,以便在循环之后创建Area并在成功函数中执行setMap(map)调用。