Не удается удалить MVCArray / Polylines с помощью Google Maps API V3 - PullRequest
0 голосов
/ 30 января 2012

У меня есть MVCArray для хранения моего пути ломаной линии, но мне нужно очистить MVCArray, когда пользователь меняет свой выбор. Соответствующий код ниже.

routePoints = new google.maps.MVCArray();
xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                markersArray = eval("(" + xmlhttp.responseText + ")");
                removeLines();
                for (var i = 0; i < markersArray.length; i++) {
                    var address = new google.maps.LatLng(markersArray[i][0], markersArray[i][1]);
                    routePoints.insertAt(routePoints.length, address);
                }
                routePath = new google.maps.Polyline({
                    path: routePoints,
                    strokeOpacity: 1.0,
                    strokeWeight: 2,
                    map: map,
                });
            }
        }

Функция removeLines () находится ниже. Я пробовал много разных версий этой функции (while loop, routePoints.pop (), устанавливая routePoints.length в 0), но ничего не очистило MVCArray. Кстати, полилинии отображаются правильно, но как только пользователь меняет свой выбор, мне нужно удалить предыдущие полилинии с карты. Заранее спасибо.

function removeLines() {
        if (routePoints) {
            for (var i=0; i < routePoints.length; i++) {
                routePoints.removeAt(i);
            }
        }
    }

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

для удаления всех элементов mvcarray:

routePoints.clear();
2 голосов
/ 30 января 2012

Таким образом, routePoints - это просто массив объектов LatLng, а не отдельные полилинии.Я думаю, что вам, вероятно, нужен отдельный массив для полилиний, который вы можете затем зациклить, чтобы удалить их все.
Если вы хотите удалить видимые полилинии, вы можете просто вызвать функцию setMap (), передав ей null.

routePoints = new google.maps.MVCArray();
var polylines = []; // new array for the polylines, needs to be a global variable

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        markersArray = eval("(" + xmlhttp.responseText + ")");
        removeLines();
        for (var i = 0; i < markersArray.length; i++) {
            var address = new google.maps.LatLng(markersArray[i][0], markersArray[i][1]);
            routePoints.insertAt(routePoints.length, address);
        }
        routePath = new google.maps.Polyline({
            path: routePoints,
            strokeOpacity: 1.0,
            strokeWeight: 2,
            map: map,
        });

        // add the polyline to the array
        polylines.push(routePath);
    }
}

function removeLines() {
    for (var i=0; i < polylines.length; i++) {
        polylines[i].setMap(null);
    }

    // you probably then want to empty out your array as well
    polylines = [];

    // not sure you'll require this at this point, but if you want to also clear out your array of coordinates...
    routePoints.clear();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...