Anmerkung entlang der route in MapKit
Ich bin mit MapKit zur Anzeige von Richtungen zwischen den Standorten, und ich bin auf der Suche nach einem Weg, um eine Anmerkung hinzuzufügen, dass funktioniert ähnlich wie die route-annotation in der Apple Karten-app, wo die Anmerkungen zeigen, sind jede route Reisezeit (wie im Bild unten gezeigt). Ich bin bereits dabei die Anweisungen richtig, das problem bei der hand ist, so berechnen Sie ein paar von Koordinaten entlang der route. Das ist, wo zum löschen der Anmerkung.
Dachte ich darüber irgendwie mit der MKDirection
(enthält vollständige Anweisungen, Schritt für Schritt), aber ich bin nicht sicher, wie ich generieren würde ein paar von Koordinaten, die sind irgendwo in der Mitte der Strecke.
Habe ich nicht in der Lage gewesen, um jede Art von Unterstützung für dieses in den MapKit-Dokumentation. Irgendwelche Ideen?
Dies ist, wie Generiere ich die route und zeigt es an.
- (void)generateRoute {
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
request.source = [MKMapItem mapItemForCurrentLocation];
request.destination = self.destinationMapItem;
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:
^(MKDirectionsResponse *response, NSError *error) {
if (error) {
//Handle Error
} else {
[self showRoute:response];
}
}];
}
- (void)showRoute:(MKDirectionsResponse *)response {
[self.mapView removeOverlays:self.mapView.overlays];
for (MKRoute *route in response.routes)
{
[self.mapView addOverlay:route.polyline level:MKOverlayLevelAboveRoads];
}
[self fitRegionToRoute];
}
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id < MKOverlay >)overlay
{
MKPolylineRenderer *renderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
renderer.strokeColor = [UIColor blueColor];
renderer.alpha = 0.7;
renderer.lineWidth = 4.0;
return renderer;
}
- Wollen Sie zum zeichnen der route, die Sie wollen, um die drop-annotation in der Mitte der route
- Ich will zeichnen Sie die route auch (was ich bereits Tue).
- Ich verstehe nicht, warum tun Sie müssen zum hinzufügen einer Beschriftung zu einem overlay. Wissen Sie, dass die overlays sind auch Anmerkungen?
- Hier an der Unterseite. developer.apple.com/library/ios/documentation/UserExperience/...
- Gut, es gibt zwei separate overlays, wo man eine Anmerkung. Da ist zunächst die Blaue route-overlay. Dann gibt es auch die weißen und blauen Anmerkungen verweisen auf die Strecken. Wo auf der Karte würden Sie vorschlagen, Sie zu addieren?
- Diese Frage ist ähnlich zu diese one. Obwohl die Lösung, die Sie hier verwendet haben, ist vernünftig, es gibt Fälle, wo die Anmerkung erscheint sehr "off-center" (die Sie möglicherweise nicht besorgt sein).
- Danke für den link @Anna. Ich eigentlich gar nicht darum, dass viel über die annotation zu schlagen, genau in der Mitte, so dass die entwickelte Lösung mit Hilfe von iPrabu funktioniert großartig für mich.
- Sie Sparen my day 🙂 :*
- großartige Arbeit Mann. Sie können auch teilen Sie Ihre fitRegionToRoute Methode?
- Wie die Anzeige, dass "1h 14 min" - text auf Zeile... kann mir jemand bitte helfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fragesteller edit:
Es endlich geschafft, die Arbeit mit Hilfe von dieser Antwort. Ich habe dies nur Hinzugefügt, um den code unterhalb, wo es heißt Hier die Magie:
Original Antwort:
Ich weiß nicht, ob das funktionieren wird oder nicht. Nur meine Idee auf deine Frage.
Ich denke, Sie wären die Strecken wie folgt
(Überprüfen Sie meine inline-Kommentare)
Einfügen Von Anmerkungen
coordinate
Eigenschaft eines overlay nicht geben, ein Punkt auf in der Zeile (es ist nur der geometrische Mittelpunkt des Rechtecks, die Grenzen der überlagerung), es sei denn, das overlay ist eine einzige gerade Linie, es ist nicht die "Mitte der Strecke".Vielleicht nicht der effizienteste Weg, sollte aber noch wahrscheinlich schnell sein würden, zu berechnen den Mittelpunkt Ihrer start-und end-Punkte (d.h., der Durchschnitt Ihrer lats und longs). Dann Durchlaufen Sie Ihre polyline-Punkte überprüfen Sie den Abstand von jedem, der Mittelpunkt. Nehmen Sie den nächsten match.
Selbst wenn die Linie ist sehr gewölbt, die Mitte wird direkt zwischen den enden. Einige Punkt auf der wilden Kurve ist die am nächsten externe Mittelpunkt und ist wahrscheinlich ein guter Ort, um die annotation.
Sobald Sie ein
MKRoute
Ungefähre Zentrum-Punkt kann gefunden werden mit:Dieser gibt eine
CLLocationCoordinate2D
, die Sie verwenden können, um das Zentrum Ihrer Anmerkung.Schätzen, das ist eine alte Frage, aber ich war auf der Suche nach etwas wie dies für eine Weile und landete Berechnung Zentrum manuell ein. Stellt sich heraus, es ist sehr einfach, da iOS 8.
Wenn Sie wissen wollen, die Mitte für swift-Sie können den folgenden code verwenden :
MKCoordinateForMapPoint(route.polyline.points()[route.polyline.pointCount/2])
Beispiel für die Verwendung :
Ich schlage vor, Sie sehen diese , Integriert mit routing.