web-dev-qa-db-fra.com

Comment supprimer toutes les polylignes d'une carte

Suivant

Comment dessiner un chemin entre deux marqueurs

J'ai dû ajouter beaucoup de polylignes entre deux marqueurs, pour faire un chemin.

L'un des marqueurs est déplaçable, disons que la source est déplaçable.

Ainsi, lorsque l'utilisateur commence à faire glisser le marqueur, le chemin précédemment tracé doit être effacé et un nouveau chemin entre la nouvelle source et la nouvelle destination doit être tracé.

Je peux dessiner le nouveau chemin, mais comment puis-je effacer le chemin précédent?

Voici comment le chemin est tracé:

    for (int z = 0; z < list.size() - 1; z++) {
        LatLng src = list.get(z);
        LatLng dest = list.get(z + 1);
        Polyline line = map.addPolyline(new PolylineOptions()
                .add(new LatLng(src.latitude, src.longitude),
                        new LatLng(dest.latitude, dest.longitude))
                .width(2).color(Color.RED).geodesic(true));
    }

Une solution que je peux obtenir est

map.clear ();

Pour effacer toutes les polylignes, marqueurs, etc. et ajouter à nouveau les marqueurs, puis tracé le chemin.

Mais dès que je commence à faire glisser, le marqueur est effacé, donc pas visible sur la carte :(

Je vous remercie

48
Archie.bpgc

Gardez une trace de la polyligne lorsque vous l'ajoutez à la carte:

Polyline polyline = this.mMap.addPolyline(new PolylineOptions().....);

Ensuite, lorsque vous souhaitez le supprimer:

polyline.remove();

Si vous avez beaucoup de polylignes, ajoutez-les simplement à une liste au fur et à mesure qu'elles sont placées sur la carte:

List<Polyline> polylines = new ArrayList<Polyline>();

for(....)
{
    polylines.add(this.mMap.addPolyline(new PolylineOptions()....));
}

Et quand vous voulez supprimer:

for(Polyline line : polylines)
{
    line.remove();
}

polylines.clear();

La clé est de garder une référence aux objets Polyligne et d'appeler .remove () sur chacun d'eux.

123
DiscDev

Je sais que c'est une très vieille question, mais j'ai remarqué qu'il s'agit d'un besoin très courant. J'ai trouvé un autre moyen et je voulais le partager.

Voici l'idée de base:

Polyline polylineFinal;
PolylineOptions polylineOptions;

loop {

    polylineOptions.add( new LatLng( latitude, longitude ) );

}

polylineOptions.width(2);
polylineOptions.color(Color.RED);
polylineOptions.geodesic(true);

polylineFinal = map.addPolyline (polylineOptions);

La méthode "addPolyline" de Map renvoie une seule polyligne qui contient tous les points. Quand j'ai besoin de supprimer les points, j'appelle la méthode "remove" de polylineFinal.

polylineFinal.remove();
8
kizanlik