从Google Map android V2中的PolyLine地图中删除一行?

时间:2014-08-08 12:55:04

标签: android google-maps google-polyline

我在谷歌搜索并找到 answer ,我可以删除地图的所有多边形。 但我想从poly线中仅删除一条特定的线。例如,我想在给定代码中从第2个删除第3个LatLng。我想改变polyLine特定线的颜色或使其透明。我还想将clickListener添加到 PolyLine

   PolylineOptions rectOptions = new PolylineOptions()
            .add(new LatLng(37.35, -122.0))
            .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
            .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
            .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
            .add(new LatLng(37.35, -122.0)).width(5).color(Color.RED);; // Closes the polyline.

Polyline polyline = myMap.addPolyline(rectOptions);

主要目标是在点击或点按时remove/make it transparent PolyLine的特定行。

PolylineOptions line= new PolylineOptions().add(HAMBURG,// these are latlong
                                                            KIEL,
                                                            KIEL2,
                                                            KIEL3
                                                        new LatLng(40.748963847316034,
                                                                   -73.96807193756104)
                                                            )
                                                   .width(5).color(Color.RED);



                    Polyline polyline=  googleMap.addPolyline(line);

我想删除KIEL1和KIEL2之间的界线

1 个答案:

答案 0 :(得分:1)

您必须手动从折线中删除点。

编辑:

一步一步:

创建折线列表:

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

将PolylineOptions添加到地图中:

Polyline polyline1 = myMap.addPolyline(rectOptions1);
Polyline polyline2 = myMap.addPolyline(rectOptions2);
Polyline polyline3 = myMap.addPolyline(rectOptions3);

然后将添加的折线保存到数组

mPolylines.add(polyline1);
mPolylines.add(polyline2);
mPolylines.add(polyline3);

现在您可以随时修剪折线:

// Get polyline1
List<LatLng> points = mPolylines.get(0).getPoints();
// Set the bounds of points to remove (inclusive)
int startPoint = 1, endPoint = 2; // will remove kiel1 and kiel2
// Remove the points
for (int i=startPoint; i<=endPoint; i++) {
    points.remove(i);
}
// Added this line as getPoints returns a copy
mPolylines.get(0).setPoints(points);

现在理论上这应该可行。我发现这些点在setPoints之后实际上没有变化。

我甚至尝试过:

Polyline polyline = mPolylines.get(0);
// Get copy of the points
List<LatLng> points = polyline.getPoints();
mPolylines.get(0).remove();
mPolylines.remove(0);
for (int i=3000; i<7000; i++) {
    points.remove(i);
}
// Create a PolylineOptions object with the new points
PolylineOptions polylineOptions = new  PolylineOptions().addAll(points);
mPolylines.add(0, mMap.addPolyline(polylineOptions));

令我惊讶的是,添加了一个新的Polyline(我可以通过改变的笔划宽度和颜色来判断),但它仍然使用了旧点,即使points.size()返回了正确的(修剪过的)计数。

我不确定为什么会这样,也许我的代码中有些错误。您可以亲自尝试这些方法,看看您是否更幸运。