Почему Google Maps API отказывается создавать мой массив Polyline? - PullRequest
1 голос
/ 27 мая 2011

Я думаю, что проблема как-то связана с тем, как я строю массив путей для моей Polyline, но должен быть способ сделать это следующим образом.Цель состоит в том, чтобы создать массив местоположений Geocode из полей ввода массива с именем "address []".Я заставил Polyline работать следующим образом:

// ARRAY
var linePath = [
new google.maps.LatLng(37.772323, -122.214897),
new google.maps.LatLng(21.291982, -157.821856),
new google.maps.LatLng(-18.142599, 178.431),
new google.maps.LatLng(-27.46758, 153.027892)
];

// console.log(linePath);
[P { Ia=37.772323, Ja=-122.21489700000001}, P { Ia=21.291982, Ja=-157.82185600000003}, P { Ia=-18.142599, Ja=178.43100000000004}, P { Ia=-27.46758, Ja=153.02789200000007}]

Но когда я пытаюсь создать массив из оператора $ .each, массив получается по-другому и не работает.Вот код, который я написал:

// ARRAY
$("input[name='submit']").click(function() {
    var geocoder = new google.maps.Geocoder();
    locations = new Array();
    $("input[name='address[]']").each(function() {
        geocoder.geocode({"address" : this.value }, function(results) {
            var addrLl = results[0].geometry.location;
            locations.push(addrLl);
            var marker = new google.maps.Marker({
                map: map,
                position: addrLl
            });
        });
    });

    var connect = new google.maps.Polyline({
        path: locations,
        strokeColor: "#FF0000",
        strokeOpacity: 1.
    });
    connect.setMap(map);
    return false;
});

// console.log(locations);
[]
   [+] 0    P { Ia=41.8843266, Ja=-78.79295300000001}
   [+] 1    P { Ia=35.9614504, Ja=-79.04755590000002}

Есть идеи, что мне делать?

1 Ответ

0 голосов
/ 14 августа 2011

Геокодирование является асинхронным - ваши результаты могут не вернуться к моменту создания полилинии, поэтому они не будут включены в полилинию.Когда геокодер вернется (возможно, с точностью до секунды), точка будет добавлена ​​в местоположения, так что вы увидите ее при консольном журнале массива, но Полилиния об этом не узнает.

К счастью,API Карт имеет изящное решение этой проблемы, которое заключается в использовании MVCArray.Замените:

locations = new Array();

на

locations = new MVCArray();

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

...