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
vous devez déplacer votre destination toujours de ce montant? @frincit –