如何在Swift 3中删除GMSPolyline

时间:2017-06-06 14:47:49

标签: google-maps swift3 polyline

我在GoogleMap中制作GMSPolyline。当我想通过编码polyline.map = nil删除GMSPolyline时,但它不适合我。我在下面复制了一些编码。

(之前添加了标记,我只需删除折线)

感谢您的帮助!!!

我的编码:

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    //MARK: create the GMSPolyline
    let polyline = GMSPolyline()
    //MARK: remove the old polyline from the GoogleMap 
    polyline.map = nil

    let origin = "\(mapView.myLocation!.coordinate.latitude),\(mapView.myLocation!.coordinate.longitude)"
    let destination = "\(marker.position.latitude),\(marker.position.longitude)"

    let url = "https://maps.googleapis.com/maps/api/directions/json?origin=\(origin)&destination=\(destination)&mode=driving"

    Alamofire.request(url).responseJSON { response in

        let json = JSON(data: response.data!)
        let routes = json["routes"].arrayValue

        //MARK: print route using Polyline
        for route in routes
        {
            let routeOverviewPolyline = route["overview_polyline"].dictionary
            let points = routeOverviewPolyline?["points"]?.stringValue
            let path = GMSPath(fromEncodedPath: points!)
            polyline = GMSPolyline(path: path)
            polyline.strokeWidth = 4
            polyline.strokeColor = UIColor.yellow
            polyline.isTappable = true
            polyline.map = self.mapView
        }
    }
    return false
}

4 个答案:

答案 0 :(得分:0)

在地图上添加新折线之前,您应该清除地图。

GMSMapView的clear()函数

/**

Clears all markup that has been added to the map, including markers, polylines and ground overlays.
This will not clear the visible location dot or reset the current mapType.

*/

试试这个

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    //MARK: create the GMSPolyline
    let polyline = GMSPolyline()
    //MARK: remove the old polyline from the GoogleMap 
    mapView.clear()
    //TODO:- Redraw all marker here.
    let origin = "\(mapView.myLocation!.coordinate.latitude),\(mapView.myLocation!.coordinate.longitude)"
    let destination = "\(marker.position.latitude),\(marker.position.longitude)"

    let url = "https://maps.googleapis.com/maps/api/directions/json?origin=\(origin)&destination=\(destination)&mode=driving"

    Alamofire.request(url).responseJSON { response in

        let json = JSON(data: response.data!)
        let routes = json["routes"].arrayValue

        //MARK: print route using Polyline
        for route in routes
        {
            let routeOverviewPolyline = route["overview_polyline"].dictionary
            let points = routeOverviewPolyline?["points"]?.stringValue
            let path = GMSPath(fromEncodedPath: points!)
            polyline = GMSPolyline(path: path)
            polyline.strokeWidth = 4
            polyline.strokeColor = UIColor.yellow
            polyline.isTappable = true
            polyline.map = self.mapView
        }
    }
    return false
}

答案 1 :(得分:0)

在函数外部将折线声明为类属性。

var routePolyline: GMSPolyline? = nil

然后在添加新的折线之前清除旧的折线,使用-

self.routePolyline?.map = nil

这将按预期工作!

答案 2 :(得分:0)

   for poll in mapkit.overlays {

            mapkit.removeOverlay(poll)
        }

答案 3 :(得分:0)

 var polyline: GMSPolyline?

 func drawPathOnMap()  {
        if polyline != nil {
          //remove existing the gmspoly line from your map
             polyline!.map = nil
        }

        let points = //Your Point
        let path = GMSPath(fromEncodedPath: points)
        polyline = GMSPolyline(path: path)
        polyline?.strokeWidth = 5.0
        polyline?.strokeColor = UIColor.init(rgb: 0x7688ED)
        polyline!.map = mapView
 }