2017-09-18 3 views
-1

J'ai créé une application de vue unique en utilisant le storyboard. J'ai placé mkMapView sur un ViewController et l'ai incorporé dans le contrôleur de navigation.so que le programme montre les itinéraires entre deux broches qui sont des coordonnées de source et de destination dans MKMapView.Modifier les coordonnées de l'emplacement, modifier l'épingle et redessiner les itinéraires sur une carte

import UIKit 
import MapKit 

class ViewController: UIViewController, MKMapViewDelegate { 
    @IBOutlet weak var mapView: MKMapView! 
    var s = 0.0 
    var t = 0.0 
    var sourceLocation = CLLocationCoordinate2D(latitude: 40.759011, longitude: -73.984472) 
    var destinationLocation = CLLocationCoordinate2D(latitude: 40.748441, longitude: -73.985564) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     mapView.delegate = self 

     self.dummy() 
    } 


    func dummy() 
    { 
     // 1. 


     // 2. 


     // 3. 
     let sourcePlacemark = MKPlacemark(coordinate: sourceLocation, addressDictionary: nil) 
     let destinationPlacemark = MKPlacemark(coordinate: destinationLocation, addressDictionary: nil) 

     // 4. 
     let sourceMapItem = MKMapItem(placemark: sourcePlacemark) 
     let destinationMapItem = MKMapItem(placemark: destinationPlacemark) 

     // 5. 
     let sourceAnnotation = MKPointAnnotation() 
     sourceAnnotation.title = "Times Square" 

     if let location = sourcePlacemark.location { 
      sourceAnnotation.coordinate = location.coordinate 
     } 


     let destinationAnnotation = MKPointAnnotation() 
     destinationAnnotation.title = "Empire State Building" 

     if let location = destinationPlacemark.location { 
      destinationAnnotation.coordinate = location.coordinate 
     } 

     // 6. 
     self.mapView.showAnnotations([sourceAnnotation,destinationAnnotation], animated: true) 

     // 7. 
     let directionRequest = MKDirectionsRequest() 
     directionRequest.source = sourceMapItem 
     directionRequest.destination = destinationMapItem 
     directionRequest.transportType = .automobile 

     // Calculate the direction 
     let directions = MKDirections(request: directionRequest) 

     // 8. 
     directions.calculate { 
      (response, error) -> Void in 

      guard let response = response else { 
       if let error = error { 
        print("Error: \(error)") 
       } 

       return 
      } 

      let route = response.routes[0] 
      self.mapView.add((route.polyline), level: MKOverlayLevel.aboveRoads) 

      let rect = route.polyline.boundingMapRect 
      self.mapView.setRegion(MKCoordinateRegionForMapRect(rect), animated: true) 
     } 

    } 

j'ai placé un bouton de changeLatitude sur Mapview, et je vis changer la carte position de la broche en affectant la position des broches de source de courant à la position de destination et de broche de source latitude s = s + 0,02000 est incrémenté .et déposer la broche de la source à la nouvelle position.

@IBAction func changeLatitude(_ sender: Any) { 
    destinationLocation = CLLocationCoordinate2D(latitude: t, longitude: -73.984472) 

    s=s+0.02000 
    sourceLocation = CLLocationCoordinate2D(latitude: 40.759011-s, longitude: -73.984472) 

    t=40.759011-s; 
    self.refresh() 
    self.dummy() 

    //self.refresh(sender: AnyObject) 

}

J'ai enlevé la vieille broche de la vieille source et vieilles positions de destination, mais l'ancienne route reste là, je veux enlever l'ancienne route .Comment je peux supprimer l'ancienne ligne de route?

func refresh() { 
     mapView.setCenter(mapView.userLocation.coordinate, animated: true) 
     if self.mapView.overlays.count > 0 
     { 
      //let allAnnotations = self.mapView.annotations 
      //self.mapView.removeAnnotations(allAnnotations) 
      // self.mapView.removeOverlays(self.mapView.layoutGuides) 
      self.mapView.removeAnnotations(self.mapView.annotations) 


     } 

    } 

I et la suppression de vieux pin de KMmapView en utilisant la fonction ci-dessous déclaration

self.mapView.removeAnnotations(self.mapView.annotations) 

rafraîchir au sujet() Comment supprimer la ligne d'itinéraire?.

Vous pouvez télécharger l'exemple de projet de ce lien https://www.dropbox.com/s/77m0395nyho9die/IOS9DrawRouteMapKitTutorial1.zip?dl=0

+0

vous devez déplacer votre destination toujours de ce montant? @frincit –

Répondre

1
self.mapView.removeOverlays(self.mapView.overlays) 

Essayez ceci supprime overlay de votre carte.