Удаление отдельного маркера с Google Map - API v3 - PullRequest
0 голосов
/ 19 июня 2011

Я хочу удалить отдельный маркер с карты Google. Я использую API версии 3. Я знаю, как можно удалить все маркеры, сохранив значение markerArray и установив нулевую карту для всех.

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

Ниже приведен код, который я использую для перетаскивания маркера:

function geoCodeAddresses(data) {

    var markerInfo = {addressKey: '', marker:''};

    for (var i = 0; i < data.length; i++) {
        myLocation = data[i];

        geocoder.geocode({"address":myLocation}, function (results, status) {

            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                var marker = new google.maps.Marker({map:map, position:results[0].geometry.location});
                // checkpoint A
                alert(myLocation);
                /*
                markerInfo.addressKey = myLocation;
                markerInfo.marker = marker;*/

                //mArray.push(markerInfo);
            }
        });

    }
}

Я буду искать addresskey и убирать маркер с mArray. Но я получаю последнее значение каждый раз в методе обратного вызова геокодирования. И каждый объект толкали каждый раз. var myLocation всегда дает мне адрес последнего индекса моего массива. Если я предупреждаю об этом в контрольной точке А.

Мой подход правильный?

1 Ответ

0 голосов
/ 19 июня 2011

Ваша проблема в этой строке:

mArray.push(markerInfo);

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

Попробуйте вместо этого:

mArray.push({addressKey:myLocation,marker:marker});

Если это не сработает, то это:

mArray.push({addressKey:data[i],marker:marker});
...