从GMSMapView中删除GMSPolyline

7

我正在使用GoogleMap-IOS-1.8.1 SDK来显示地图。我需要在地图上绘制GMSPolyline。在特定事件之后,我需要删除除标记以外的所有GMSPolyline路径。我不确定最好的方法是什么。GoogleMaps iOS文档描述了两种方法可供使用。

 1. [mapView_ clear];
 2. Set the GMSPolyline map property to nil

这里的第一种方法同时移除了所有标记和覆盖层,这并不是我想要的。至于第二种方法,保存所有GMSPolyline对象的引用然后再将它们全部设置为nil似乎并不是最好的方法。
有没有更好的方法来完成这个任务,或者说这是唯一正确的方法吗?
我希望有像下面这样的解决方案。
for (GMSPolyline *polylineToremove  in mapView_.polyline)
{
    [mapView_ removeOverlay:overlayToRemove];
}
5个回答

4
您只需要将GMSPolyline地图属性设置为nil即可。
GMSPolyline *polyline;
polyline.map = nil;

我该如何把它拿回来? - Bangalore
2
如果我有很多折线,我该如何仅删除其中的一条? - Robert
@Robert 有点晚了,但是要删除单个想法的方法是创建一个字典并将单个折线分配给该字典,然后使用字典的键来引用您想要删除的折线。 - Micah Montoya

4
你需要做的就是按照你所说的 - 存储您添加的所有折线的引用(例如,使用数组),然后循环遍历它们并将其map属性设置为null。

1
实际上我想跳过引用部分。如果有其他方法,我不想存储引用。应该有一些MapView的属性,可以获取所有类型的覆盖层。 - Gaurav Pandey
不,没有。以前有过,但是你可以在https://developers.google.com/maps/documentation/ios/releases的发布说明中看到,Google在1.7版本中删除了它。现在推荐的方法是如果您想要稍后删除它,则维护自己添加的内容的参考。 - Saxon Druce

2

只需正确使用以下Google地图:

mapView.clear()

清除地图上添加的所有标记,包括标记、折线和地面叠加物。

1
以上代码会清除地图视图,因此所有标记和折线也将被删除。 当您想要删除所有标记和折线时,请清除地图。如果您只想清除折线,请使用以下代码:polyline.map = nil - Protocol
@RahulFate 是的,这行代码将清除地图上的所有折线。您想要找什么? - iVarun

0

这是一段代码,您可以使用它来从 GMSMapView 中删除任何 overlayView。

您还可以在 GMSMarkers、GMSPolyline 中进行操作。

for (GMSPolyline *polylineToRemove  in arrPolylineAdded){
      polylineToRemove.map = nil;
      polylineToRemove     = nil;
}

我刚刚检查了一下Google Map SDK版本1.9.2。


1
快速枚举变量在ARC下默认是不可修改的,这样做行不通。 - Jargen89
那GMSMarker呢?我查了一下GMSMarker,我猜GMSPolyline也是一样的。对此我感到很抱歉。 - Linh Nguyen
我想说的是,在这种情况下,polylineToRemove = nil; 是不可能的。 - Jargen89

-1
使用Swift 3; 首先使用此函数删除所有折线。
   import GoogleMaps
    
   var polylineArray = [GMSPolyline]()    

   override func viewDidLoad() {
     super.viewDidLoad()
    for root: GMSPolyline in self.polylineArray
      {
        if root.userData as! String == "root"
        {
           root.map = nil
           }
      }
   }

然后再次绘制折线

func showPath(polyStr :String)
{
    let path = GMSPath(fromEncodedPath: polyStr)
    DispatchQueue.main.async 
    {
        let polyline = GMSPolyline(path: path)
        //MARK: remove the old polyline from the GoogleMap
        for root: GMSPolyline in self.polylineArray {
            if root.userData as! String == "root" {
               root.map = nil
            }
        }
        polyline.strokeWidth = 2.0
        polyline.strokeColor = sDefaultViewColorPrimaryDark
        polyline.userData = "root"
        polyline.map = self.mapView
        let bounds = GMSCoordinateBounds(path: path!)
        self.mapView!.animate(with: GMSCameraUpdate.fit(bounds,withPadding: 15.0))
        self.polylineArray.append(polyline)
        //self.mapView!.moveCamera(update)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接