问题是每次我尝试绘制不同的路线时都不会清除地图,因此我会在另一条路线上绘制一条路线。
我已经花了太多时间试图解决它。在测试了其他用户的建议之后,似乎没有什么工作可行。 这基本上是我尝试过的:
我正在调用googleMap.clear()
方法
我还维护对地图上添加的每条折线的引用,以便在绘制新路线时稍后调用polyline.remove()
方法。
我有一个从数据库中检索数据的Web服务,它返回ArrayList<Stop>
,stop对象表示一个包含在地图上绘制路径所需信息的公交车站。
该应用程序不直接使用谷歌网络服务,每个停止对象都有一个名为“折线”的字段,应用程序解码此折线字符串并检索ArrayList<LatLng>
让我向您展示我编写的代码片段。
public void drawRoute(ArrayList<Stop> stops){
googleMap.clear();
removePolylines();
for(int x = 0; x< stops.size(); x++){
Stop stop = stops.get(x);
if(x != stops.size() -1){
ArrayList<LatLng> routePoints = DataParser.decodePolyline(stop.getPolyline());
Polyline polyline = googleMap.addPolyline(polylineOptions.addAll(routePoints));
polylines.add(polyline);
}
addMarker(stop);
}
}
...
private void removePolylines(){
for(Polyline polyline: polylines){
polyline.remove();
}
}
我还附上了一些截图,以便更好地解释问题所在。
第一次画一条路线没问题......
但是当我按下后退按钮并选择其他路线ID时......
正如您可以通过红色圆圈看到的前一条路线仍然在地图上,奇怪的是标记不再出现,但路线确实如此。
如何摆脱这个问题? 是否有更好的解决方案来实现相同的目标?
答案 0 :(得分:0)
查看另一个类似的答案,看起来您只需要在polylines.remove(polyline);
语句后添加polyline.remove();
。作为参考,这是另一个类似的问题:Remove the last plotted line from Google Map Android
答案 1 :(得分:0)
好的家伙问题解决了,经过多次努力,我意识到解决方案是多么容易。
问题出现在这一行:
Polyline polyline = googleMap.addPolyline(polylineOptions.addAll(routePoints));
问题是polylineOptions
对象是在类的顶部声明的,并在构造函数中初始化。因此,每次执行drawRoute(ArrayList<Stop> stops)
方法时,都会向其添加新的ArrayList<LatLng> routePoints
。
这就是为什么te路线出现在另一个之上的原因。我还发现,至少在这个具体案例中,没有必要调用googleMap.clear()
和removePolylines()
方法。
重构的代码如下所示:
public void drawRoute(ArrayList<Stop> stops){
PolylineOptions polylineOptions = new PolylineOptions();
for(int x = 0; x< stops.size(); x++){
Stop stop = stops.get(x);
if(x != stops.size() -1){
ArrayList<LatLng> routePoints = DataParser.decodePolyline(stop.getPolyline());
googleMap.addPolyline(polylineOptions.addAll(routePoints));
}
addMarker(stop);
}
}
你看到了区别吗?
PolylineOptions
对象在方法中在本地声明和初始化。
我希望这对其他人有用。