Kuroiteiken
Kuroiteiken

Reputation: 308

Remove Polylines at swift

I'm drawing navigation road at Swift. I'm using current location to another location and made a draw. Afterward, I select another location and redraw it. But even if I write mapView.remove(rotapoly) in my code, it doesnt remove it. How can I solve this?

func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    cizim = 1;
    let capital = view.annotation as! Station
    guard let locValue: CLLocationCoordinate2D = locationManager.location?.coordinate else { return }
    let neresi = CLLocationCoordinate2D(latitude: capital.latitude, longitude: capital.longitude)
    let nerdeyim = CLLocationCoordinate2D(latitude: locValue.latitude, longitude: locValue.longitude)
    let request = MKDirectionsRequest()
    request.source = MKMapItem(placemark: MKPlacemark(coordinate: nerdeyim, addressDictionary: nil))
    request.destination = MKMapItem(placemark: MKPlacemark(coordinate: neresi, addressDictionary: nil))
    request.requestsAlternateRoutes = true
    request.transportType = .walking
    let directions = MKDirections(request: request)
    directions.calculate { [unowned self] response, error in
        guard let unwrappedResponse = response else { return }
        if (unwrappedResponse.routes.count > 0) {
       self.showRoute(response!)
        }
    }
}

func showRoute(_ response: MKDirectionsResponse) {
    mapView.remove(rotapoly)
    for route in response.routes {
        rotapoly = route.polyline
       mapView.add(rotapoly, level: MKOverlayLevel.aboveRoads)
        for step in route.steps {
            print(step.instructions)
        }
    }
}

Upvotes: 1

Views: 2282

Answers (2)

Huzaifa ameen
Huzaifa ameen

Reputation: 143

Below is the approach to remove travelled polyline from google map iOS Swift:

var oldPolyLines = [GMSPolyline]() /* Global Array Variable of your Class */

Put below code where you are parsing routes and getting new polyline from direction API.

if self.oldPolyLines.count > 0 {
    for polyline in self.oldPolyLines {
        polyline.map = nil
    }
}
self.oldPolyLines.append(yourNewPolyline)
yourNewPolyLine.map = self.mapView

Upvotes: 1

Devil Decoder
Devil Decoder

Reputation: 1086

use map view method

self.mapview.removeOverlays(self.mapview.overlays)

this will remove all overlays you have added so you have to do whole process again its like reloading map view

Upvotes: 5

Related Questions