Na nova API do Google Maps para Android, podemos adicionar um marcador , mas não há como (facilmente) remover um.
Minha solução é manter os marcadores em um mapa e redesenhar o mapa quando eu quiser remover um marcador, mas não é muito eficiente.
private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();
private void add(String name, LatLng ll) {
final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
mMarkers.put(name, marker);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.addMarker(marker);
}
});
}
private void remove(String name) {
mMarkers.remove(name);
runOnUiThread(new Runnable() {
@Override
public void run() {
mMap.clear();
for (MarkerOptions item : mMarkers.values()) {
mMap.addMarker(item);
}
}
});
}
Alguém tem uma idéia melhor?
android
google-maps
Jonas
fonte
fonte
Respostas:
A assinatura do método para
addMarker
é:Portanto, quando você adiciona um marcador a
GoogleMap
especificando as opções para o marcador, salve oMarker
objeto retornado (em vez doMarkerOptions
objeto usado para criá-lo). Este objeto permite alterar o estado do marcador posteriormente. Quando terminar o marcador, você pode ligarMarker.remove()
para removê-lo do mapa.Como um aparte, se você quiser apenas ocultá-lo temporariamente, poderá alternar a visibilidade do marcador chamando
Marker.setVisible(boolean)
.fonte
Adicione o marcador ao mapa como este
Então você poderá usar o método remove, ele removerá apenas esse marcador
fonte
para limpar todos os rabiscos no mapa, use
fonte
se o marcador existir, remova o último marcador. se o marcador não existir, crie o marcador atual
fonte
Se você usa a linguagem Kotlin, basta adicionar este código:
Crie variáveis globais de
GoogleMap
eMarker
tipos.Eu uso marcador variável para fazer o valor do marcador variável pode mudar diretamente
E eu uso essa função / método para adicionar o marcador no meu mapa:
Depois de criar a função, coloco esse código no
onMapReady()
para remover o marcador e criar um novo:É um bônus se você quiser exibir o local do endereço ao clicar no marcador, adicione este código para ocultar e mostrar o endereço do marcador, mas você precisa de um método para obter o local do endereço. Eu recebi o código deste post: Como obter o endereço completo da latitude e longitude?
fonte
use o seguinte código:
Depois de clicar em "um marcador" , você pode removê-lo.
fonte
Apenas uma NOTA, algo que eu perdi horas rastreando esta noite ...
Se você decidir manter um marcador por algum motivo, depois de removê-lo de um mapa ... getTag retornará NULL, mesmo que os demais valores get retornem com os valores que você definiu quando o marcador foi criado. .
O valor TAG é definido como NULL se você remover um marcador e tentar fazer referência a ele.
Parece um inseto para mim...
fonte
1. Se você deseja remover um marcador, você pode fazê-lo como
marker.remove();
alternativa, também pode ocultar o marcador em vez de removê-lo comoe torná-lo visível mais tarde, sempre que necessário.
2. No entanto, se você deseja remover todos os marcadores do mapa, use
map.clear();
Nota:
map.clear();
também removeráPolylines, Circles
etc.3. Se você não deseja remover
Polylines, Circles
etc., use um loop no comprimento do marcador (se você tiver vários marcadores) para removê-los. Confira o exemplo aqui OU defina-os como Visible false E não usemap.clear();
nesse caso.fonte
Faça uma variável global para acompanhar o marcador
// Remover marcador antigo
// Adicione um marcador atualizado e mova a câmera
fonte
Crie uma matriz com todos os marcadores no mapa de adição.
Mais tarde, use:
fonte
Para aqueles que seguem o exemplo deste projeto GoogleMaps - MapWithMarker , você pode remover o marcador fazendo isso
fonte