54

下列的

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

我不得不在两个标记之间添加很多折线,以形成一条路径。

其中一个标记是可拖动的,可以说源是可拖动的。

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

我可以画出新的路径,但我怎样才能删除以前的路径?

这是绘制路径的方式:

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

清除所有折线、标记等,然后再次添加标记,然后绘制路径。

但是一旦我开始拖动,标记就会被清除,因此在地图上不可见:(

谢谢你

4

3 回答 3

139

在将折线添加到地图时跟踪它:

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() 。

于 2013-02-13T19:35:04.837 回答
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);

Map 的“addPolyline”方法返回一条包含所有点的折线。当我需要移除这些点时,我会调用 polylineFinal 的“移除”方法。

polylineFinal.remove();
于 2014-11-17T16:09:39.147 回答
2

更新

如果您想从地图中删除所有标记、折线、多边形、叠加层等,请使用

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

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

于 2020-05-16T01:45:26.887 回答