2013-09-24 12 views
13

Ich verwende MKDirectionsRequest, um eine MKRoute zwischen zwei Punkten zu finden. Die Antwort wird auf dem MKMapView angezeigt werden mit diesem Code:MKRoute auf MKMapView in iOS7 anzeigen

MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; 
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) 
    { 
     if (error) 
     { 
      NSLog(@"Error : %@", error); 
     } 
     else 
     { 
      [_mapView removeOverlays:_mapView.overlays]; 
      for (MKRoute *route in response.routes) 
      { 
       [_mapView insertOverlay:route.polyline atIndex:0 level:MKOverlayLevelAboveRoads]; 
      } 
     } 
    }]; 

Meine Frage ist, ob es eine richtige Art und Weise die MKRoute zu aktualisieren, wenn der Benutzer sich bewegt. Atm Ich verwende

- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation 

Bewegung zu erkennen und in dieser Methode mir das Entfernen der MKRoute Overlay und Berechnen und Hinzufügen der neuen mit dem neuen Standort des Nutzers. Ich frage mich, ob es eine Möglichkeit gibt, die Route nur einmal zu berechnen und die Überlagerung programmgesteuert zu aktualisieren?

Bearbeiten: Ich fand diese https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKRouteStep_class/Reference/Reference.html#//apple_ref/occ/cl/MKRouteStep in Apples Dev Docs. Ich denke, ich so etwas wie

for (MKRoute *route in response.routes) 
{ 
    for (MKRouteStep *step in route.steps) 
    { 
     [_mapView insertOverlay:step.polyline atIndex:0 level:MKOverlayLevelAboveRoads]; 
    } 
} 

zu tun haben, aber wie kann ich, welche Schritte sind hinter der tatsächliche Standort des Nutzers erkennen?

Bearbeiten: Eine andere Option könnte die Verwendung eines Timers sein, der das Ereignis auslöst (Entfernen des alten Overlays und Hinzufügen des neuen). Was denken Sie?

+1

Ich empfehle den Timer nicht, denn dann könnten Sie die Route unnötig aktualisieren, auch wenn der Benutzer nicht bewegt hat. Die einfachste Option besteht darin, dies in didUpdateUserLocation zu tun, aber nur, wenn der Benutzer X Meter seit der letzten Route verschoben hat. Nicht verwandt, aber wenn Sie das einfache "iOS" -Tag zu der Frage hinzufügen, erhält es möglicherweise mehr Aufmerksamkeit (sowie eine Syntax-Hervorhebung des Codes richtig). – Anna

+0

Ich habe so etwas schon einmal gemacht, bin mir aber nicht sicher, warum Sie nur dann eine Routemap erstellen möchten, wenn der Benutzer sich bewegt. Sie können die Route mit MKPolyLine auf der Karte zum ersten Mal selbst zwischen dem Start- und dem Endpunkt erstellen.Wenn sich der Benutzer später bewegt, können Sie den aktualisierten Standort des Benutzers auf der Karte mit dem Standardsymbol für den aktuellen Standort anzeigen (die blaue Farbe Kleiner Kreis). Bitte klarstellen, damit ich etwas vorschlagen kann, –

+0

Der Benutzerstandort wird korrekt angezeigt. z.B. Für eine Route von A-> B-> C befindet sich der Benutzerstandort bei A und die Route wird korrekt angezeigt. Wenn der Benutzer jedoch nach B verschoben wird, wird die Route weiterhin von A-> C nicht von B-> C angezeigt. – matthias

Antwort

0

Der unten stehende Link enthält den Beispielcode, um Anweisungen zu einem MKMapView anzuzeigen, wir müssen nur Breiten- und Längengradwerte darin angeben.

https://github.com/kadirpekel/MapWithRoutes

+0

Funktioniert wie ein Charm Ich habe nach diesem gesucht –

+3

Dies beantwortet die Frage nicht. Der Link verweist auf ein 2 Jahre altes Projekt, das eine Google API verwendet, um Wegbeschreibungen zu erhalten. Die Frage ist, wie man die Ergebnisse von MKDirections in iOS 7 effizient wiederverwenden kann. Das OP weiß bereits, wie man überhaupt eine Wegbeschreibung bekommt. – Anna

+0

@Anna Es ist eine andere Option, die verwendet werden könnte, bis wir eine Lösung für dieses Problem bekommen .. :) – Ashutosh

-2

Ich habe eine schöne Lösung, diese Art von Arbeit zu tun.

Einfach Bestimmungsort wie unten mit Lat (wie -34.059811) und lang (wie 150.769238).

CLLocation *destinationLocation=[[CLLocation alloc] initWithLatitude:-34.059811 longitude:150.769238]; 

und übergeben diese lat lang in unter URL-String, können Sie direkt in Zeichenfolge dieses lat langen Pass,

NSString* strLink = [NSString stringWithFormat:@"http://maps.google.com/maps?saddr=Current+Location&daddr=%f,%f",destinationLocation.latitude,destinationLocation.longitude]; 

Jetzt eine URL machen,

NSURL *url = [NSURL URLWithString: [strLink stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 

öffnen url in Browser oder UIWebView und aktualisieren Sie diese Seite mit Timer und sehen Sie die Magie, Route wird automatisch aktualisiert nach dem aktuellen Standort und Zielort, Sie don ' t müssen den aktuellen Standort jedes Mal aktualisieren.

Danke.