如何从地图上删除所有折线

57

以下是翻译:

如何在两个标记之间绘制路径

我必须添加很多折线来连接两个标记,以形成一条路径。

其中一个标记是可拖动的,假设源是可拖动的。

因此,当用户开始拖动标记时,之前绘制的路径必须被擦除,并且必须绘制新源和目标之间的新路径。

我能够绘制新路径,但是如何擦除先前的路径呢?

这就是路径绘制的方式:

    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));
    }

我可以得到的一个解决方案是

map.clear();

清除所有折线、标记等,然后重新添加标记,再绘制路径。但是一旦我开始拖动,标记就被清除了,因此在地图上不可见 :( 谢谢。
3个回答

148

将折线添加到地图时,请跟踪该折线:

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

然后当你想要移除它时:

polyline.remove();
如果您有很多折线,请将它们添加到列表中,就像它们被放置在地图上一样:
List<Polyline> polylines = new ArrayList<Polyline>();

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

当您想要删除时:

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

polylines.clear();

关键是要保留对多段线对象的参考,并在每个对象上调用 .remove() 方法。


谢谢 :) 它有所帮助 - akash89

7

我知道这是一个很老的问题,但我注意到这是非常普遍的需求。我找到了另一种方法,想要分享一下。

基本思路如下:

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);

地图的“addPolyline”方法返回包含所有点的单个折线。当我需要删除这些点时,我调用polylineFinal的“remove”方法。

polylineFinal.remove();

2

更新

如果您想从地图中删除所有标记、折线、多边形、覆盖物等,请使用以下方法:

mMap.clear(); //it will remove all additional objects from map 

如果您只想删除所有或单个折线、多边形、标记等,请参见上面的@DiskDev Answer。在这种情况下,您必须跟踪您添加到地图中的每个附加对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接