Je sais que les cartes Google sont connues pour être les meilleures, mais je ne veux pas avoir à télécharger un tas de bibliothèques supplémentaires et tout ça. Je préférerais faire quelque chose de simple et rapide pour obtenir un itinéraire rapide du point A au point B et en finir. Y a-t-il un moyen de faire cela avec des fonctions/bibliothèques intégrées? Quelqu'un peut-il me diriger dans la bonne direction?
MODIFIER
Je ne cherche pas à obtenir des instructions pas à pas ou quoi que ce soit dans mon cas, je veux simplement tracer une ligne du début à la fin. peut-être donner des options sur les itinéraires à prendre. Y a-t-il un moyen de le faire ou non?
Dans iOS 7, vous pouvez obtenir et afficher des instructions à l'aide de MKDirectionsRequest
.
Voici un exemple de code permettant d’afficher les indications entre l’emplacement actuel et un autre élément de la carte:
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
[request setSource:[MKMapItem mapItemForCurrentLocation]];
[request setDestination:myMapItem];
[request setTransportType:MKDirectionsTransportTypeAny]; // This can be limited to automobile and walking directions.
[request setRequestsAlternateRoutes:YES]; // Gives you several route options.
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
if (!error) {
for (MKRoute *route in [response routes]) {
[myMapView addOverlay:[route polyline] level:MKOverlayLevelAboveRoads]; // Draws the route above roads, but below labels.
// You can also get turn-by-turn steps, distance, advisory notices, ETA, etc by accessing various route properties.
}
}
}];
Si vous êtes nouveau sur iOS 7, vous devez implémenter la méthode mapView:rendererForOverlay:
pour que toute superposition apparaisse. Quelque chose comme:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
[renderer setStrokeColor:[UIColor blueColor]];
[renderer setLineWidth:5.0];
return renderer;
}
return nil;
}
Version rapide
let request = MKDirectionsRequest();
request.source = MKMapItem.mapItemForCurrentLocation();
let locationPlacemark = MKPlacemark(coordinate: CLLocationCoordinate2DMake(13.724362, 100.515342), addressDictionary: nil);
request.destination = MKMapItem(placemark: locationPlacemark);
request.transportType = MKDirectionsTransportType.Any;
request.requestsAlternateRoutes = true;
let directions = MKDirections(request: request);
directions.calculateDirectionsWithCompletionHandler ({
(response: MKDirectionsResponse?, error: NSError?) in
print(response?.description)
print(error?.description)
guard let response = response else {
//handle the error here
return;
}
self.myRoute = response.routes[0]
self.mkMapView.addOverlay(self.myRoute!.polyline)
});
et son délégué
func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
let myLineRenderer = MKPolylineRenderer(polyline: (self.myRoute?.polyline)!)
myLineRenderer.strokeColor = UIColor.redColor()
myLineRenderer.lineWidth = 3
return myLineRenderer
}
Une autre possibilité consiste à envoyer l'adresse à l'application Apple Maps. Je viens de voir cela se faire dans un cadre professionnel et c'était la méthode choisie.