Удалить определенные маркеры с карты? - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть Google Map с кучей маркеров.

Я добавляю маркеры на карту один за другим, и мне тоже нужно при необходимости удалять отдельные маркеры один за другим, используя индивидуальные идентификаторы.

В настоящее время у меня есть какой-то ужасный, подробный код, включающий глобальный массив маркеров, идентификатор, добавленный в виде метаданных к каждому маркеру, и неуклюжий метод поиска позиции маркера в массиве, как показано ниже:

  var markersArray = [];
  function getPositionById(markerId, arr) { 
      for (var i = 0; i < arr.length; i++) { 
          if (arr[i].metadata.id === markerId) { 
                  return i;
          }
      }
      return null;
  }
  function removeMarker(markerId) { 
      var marker_position = getPositionById(markerId, markersArray);
      if (marker_position !== null) {
          markersArray[marker_position].setMap(null);
          markersArray.splice(marker_position,1);
      }
  }
  function setMarker(position, markerId) {
      removeMarker(markerId);
      var temp_marker = new google.maps.Marker({
          position: position
      });
      temp_marker.setMap(map);
      temp_marker.metadata = { id: markerId };
      markersArray.push(temp_marker);
  }

Может ли кто-нибудь предложить еще более изящный способ сделать это?

1 Ответ

1 голос
/ 23 ноября 2011

Учитывая, что для удаления маркера с карты вам нужно использовать setMap (null), это означает, что вам нужно иметь ссылку на этот маркер.

То, как вы представляли свой вопрос, не выглядиткак бы ужасно это ни казалось, но другой способ сделать это - использовать карту вместо массива (не уверен, что карта - лучший термин для использования здесь, так как мы уже работаем с картой Google maps), тем не менее, используя картуизбавит вас от функции getPositionById (), конечно, это предполагает, что все ваши маркерные идентификаторы уникальны.

Ваш код будет выглядеть примерно так:

var markers = {};

function removeMarker(markerId) { 
    if(markers[markerId]){
        markers[markerId].setMap(null);
        delete markers[markerId];
    }
}
function setMarker(position, markerId) {
    removeMarker(markerId);
    var temp_marker = new google.maps.Marker({
        position: position
    });
    temp_marker.setMap(map);
    temp_marker.metadata = { id: markerId };
    markers[markerId] = temp_marker;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...