2013-09-24 14 views
13

Sto usando MKDirectionsRequest per trovare un MKRoute tra due punti. La risposta verrà visualizzata sul MKMapView utilizzando questo codice:Visualizzazione di MKRoute su MKMapView in iOS7

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]; 
      } 
     } 
    }]; 

La mia domanda è, se c'è un modo corretto per aggiornare il MKRoute se l'utente è in movimento. Atm Sto usando

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

di riconoscere il movimento e in questo metodo che sto eliminando la sovrapposizione MKRoute e calcolando e aggiungendo il nuovo con la nuova posizione dell'utente. Mi chiedo se esiste un modo per calcolare il percorso una sola volta e aggiornare l'overlay a livello di codice?

Modifica: Ho trovato questo https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKRouteStep_class/Reference/Reference.html#//apple_ref/occ/cl/MKRouteStep in App Dev Devs. Mi sa che devo fare qualcosa di simile

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

ma come posso riconoscere quali passi sono dietro la posizione dell'utente attuale?

Modifica: Un'altra opzione potrebbe essere quella di utilizzare un timer che attiva l'evento (rimuovendo la vecchia sovrapposizione e aggiungendo quella nuova). Cosa ne pensi?

+1

Non consiglio il timer perché in questo caso è possibile aggiornare inutilmente il percorso anche se l'utente non si è spostato. L'opzione più semplice è farlo in didUpdateUserLocation ma solo se l'utente ha spostato X metri dall'ultima traccia. Non correlato, ma se si aggiunge il semplice tag "iOS" alla domanda, potrebbe ottenere più attenzione (come pure la sintassi, evidenziando correttamente il codice). – Anna

+0

Ho già fatto qualcosa del genere, ma non sono sicuro del motivo per cui si desidera creare una mappa del percorso solo quando l'utente è in movimento. Puoi tracciare il percorso con MKPolyLine sulla mappa per la prima volta tra l'inizio e il punto finale.Successivamente, se l'utente si sposta, è possibile mostrare la posizione aggiornata dell'utente sulla mappa con il simbolo di posizione corrente predefinito (il cerchio blu di colore piccolo). Si prega di chiarire in modo che possa suggerire qualcosa, –

+0

La posizione dell'utente viene visualizzata correttamente. per esempio. per un percorso da A-> B-> C la posizione dell'utente è A e il percorso viene visualizzato correttamente ma quando l'utente si sposta su B il percorso viene comunque visualizzato da A-> C non da B-> C. – matthias

risposta

0

Sotto il link contiene il codice di esempio per mostrare le direzioni su un MKMapView, abbiamo solo bisogno di passare i valori di latitudine e longitudine in esso.

https://github.com/kadirpekel/MapWithRoutes

+0

Funziona come un incantesimo che stavo cercando per questo –

+3

Questo non risponde alla domanda. Il link rimanda a un progetto di 2 anni utilizzando un Google API per ottenere indicazioni stradali. La domanda riguarda come riutilizzare in modo efficiente i risultati da MKDirections in iOS 7. L'OP sa già come ottenere indicazioni stradali in primo luogo. – Anna

+0

@Anna È un'altra opzione che potrebbe essere utilizzata fino a quando non avremo risolto questo problema .. :) – Ashutosh

-2

Ho una bella soluzione per fare questo tipo di lavoro.

Semplicemente, ottenere la posizione di destinazione come di seguito con lat (come -34.059811) e lungo (come 150.769238).

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

e passare questo Lat Long nella stringa URL di seguito, è possibile passare direttamente questo Lat Long nella stringa,

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

Ora fate un URL,

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

Apri questo URL in browser o UIWebView e aggiornare quella pagina con il timer e vedere la magia, il percorso si aggiornerà automaticamente in base alla posizione corrente e alla posizione di destinazione, non si t necessità di aggiornare la posizione corrente ogni volta.

Grazie.

Problemi correlati