web-dev-qa-db-ja.com

マップからすべてのポリラインを削除する方法

以下

2つのマーカー間にパスを描く方法

パスを作成するには、2つのマーカーの間に多数のポリラインを追加する必要がありました。

マーカーの1つはドラッグ可能です。たとえば、ソースはドラッグ可能です。

そのため、ユーザーがマーカーのドラッグを開始すると、以前に描画したパスを消去し、新しいソースとデスティネーションの間の新しいパスを描画する必要があります。

新しいパスを描画できますが、前のパスを消去するにはどうすればよいですか?

これがパスの描画方法です。

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

私が得ることができる1つのソリューションは

map.clear();

すべてのポリライン、マーカーなどをクリアし、マーカーを再度追加してから、パスを描画します。

しかし、ドラッグを開始するとすぐにマーカーがクリアされるため、マップ上に表示されません:(

ありがとうございました

48
Archie.bpgc

マップに追加するポリラインを追跡します。

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

重要なのは、Polylineオブジェクトへの参照を保持し、各オブジェクトで.remove()を呼び出すことです。

123
DiscDev

これは非常に古い質問ですが、これは非常に一般的なニーズであることに気付きました。別の方法を見つけて、それを共有したいと思いました。

基本的な考え方は次のとおりです。

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