Добавление google.maps.latlng в массив внутри цикла - PullRequest
2 голосов
/ 10 октября 2011

Это мой код для рисования многоугольника на карте ... который не работает. Пожалуйста, скажите мне, что я делаю не так.

Если я добавлю очки вручную, как это:

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 Ответ

5 голосов
/ 10 октября 2011

Я не уверен, что вы имеете в виду под "добавлением точек вручную", но я думаю, что проблема в том, что вызов ajax является асинхронным.Итак, вы набираете «$ .ajax (...)», а затем просматриваете код, который создает Area до , в вашем массиве points есть что-то: асинхронный вызов вашей успешной функции hasnЭто еще не произошло.

Попробуйте переставить код, чтобы создать Area и сразу после цикла выполнить вызов setMap (map) в функции успеха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...