Quando temos uma aplicação em Google Maps (ou OpenLayers, ou outra) e fazemos uma chamada a um serviço dando como parâmetros uma bounding box, geralmente utilizamos o resultado para adicionar marcadores ao mapa (com ou sem informação associada) em que as coordenadas dos marcadores a adicionar fazem parte da resposta do serviço.
Se fizermos chamadas sucessivas a esse serviço, por exemplo na sequência de um evento "moveend" registado, teremos que garantir que não vamos adicionar ao mapa marcadores já existentes.
Assim, de forma a que não existam marcadores duplicados é necessário percorrer a resposta do serviço (ou uma cópia desta) e testar se já existe algum marcador sobre o mapa com as mesmas coordenadas. Isso pode ser feito recorrendo a uma função a qual recebe como parâmetro as coordenadas a testar:
function isOnTheMap(latlng) {
for (var i=0; i < markers.length ; ++i) {
if ( markers[i].getLatLng().equals(latlng)) {
return true;
}
}
return false;
}
Outra questão consiste em garantir que os marcadores que já estavam sobre o mapa e que não façam parte da bounding box, sejam removidos do mapa. Ou seja, garantir que não existem marcadores adicionados ao mapa fora da vieweport. Mais uma vez podemos recorrer a uma função:
function removeMarkers() {
var tmpMarkers = markers;
for (var i = 0; i < tmpMarkers.length; ++i) {
var marker = tmpMarkers[i];
if (bounds.containsLatLng(marker.getLatLng())) {
continue;
}
map.removeOverlay(marker);
markers.splice(i,1);
}
}
Neste caso poderá também ser necessário garantir a remoção de eventuais eventos registados.
Para que ambos exemplos resultem é ainda necessário que aquando da criação de cada marcador seja este adicionado a um array que vá guardando os nossos marcadores:
markers.push(marker);
Sem comentários:
Enviar um comentário