首页 文章

如何从 Map 中删除所有折线

提问于
浏览
40

以下

How to draw a path between two markers

我必须在两个标记之间添加许多折线,以形成路径 .

其中一个标记是可拖动的,让我们说源是可拖动的 .

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

我能够绘制新路径,但是如何删除上一条路径呢?

这是绘制路径的方式:

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

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

但是一旦我开始拖动,标记就会被清除,因此在 Map 上看不到:(

谢谢

3 回答

  • 107

    将Polyline添加到 Map 时跟踪Polyline:

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

    然后当你想删除它:

    polyline.remove();
    

    如果你有很多折线,只需将它们添加到列表中,因为它们放在 Map 上:

    List<Polyline> polylines = new ArrayList<Polyline>();
    
    for(....)
    {
        polylines.add(this.mMap.addPolyline(new PolylineOptions()....));
    }
    

    当你想删除时:

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

    关键是保持对Polyline对象的引用并在每个对象上调用.remove() .

  • 8

    我知道这是一个非常古老的问题,但我注意到这是非常普遍的需要 . 我找到了另一种方式,我想分享它 .

    这是基本的想法:

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

    我用过这个工作:)

    private GoogleMap mMapView;
    
        SupportMapFragment myMapFragment = (SupportMapFragment)getSupportFragmentManager()
        .findFragmentById(R.id.mMapView3);
        mMapView = myMapFragment.getMap();
    
        PolylineOptions rectLine = new PolylineOptions()
                        .add(new LatLng(13.000000, 100.000000))
                        .add(new LatLng(13.010000, 100.000000));
    
                mMapView.addPolyline(rectLine);
    

相关问题