2016-01-08 17 views
6

Sto tentando di mostrare il percorso tra due posizioni ma non è preciso.Google map SDK - Percorso non accurato

if(center.latitude != 0 && center.longitude != 0) 
      { 
      NSString *urlString = [NSString stringWithFormat: 
            @"%@?origin=%f,%f&destination=%f,%f&sensor=true&key=%@", 
            @"https://maps.googleapis.com/maps/api/directions/json", 
            center.latitude, 
            center.longitude, 
            center1.latitude, 
            center1.longitude, 
            KGoogleMapServerKey]; 

      NSError *error; 
       NSDictionary *json =[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString] options:NSDataReadingUncached error:&error] options:NSJSONReadingMutableContainers error:&error]; 
      if(json[@"routes"] != nil && [json[@"routes"] count] > 0) 
      { 
       GMSPath *path =[GMSPath pathFromEncodedPath:json[@"routes"][0][@"overview_polyline"][@"points"]]; 
       GMSPolyline *singleLine = [GMSPolyline polylineWithPath:path]; 
       singleLine.strokeWidth = 7; 
       singleLine.strokeColor = [UIColor colorWithRed:56.0/255.0 green:163.0/255.0 blue:249.0/255.0 alpha:1.0]; 
       singleLine.map = mapViewGoogle; 
      } 

Questo è il percorso che sto ottenendo:

enter image description here

Come si può vedere, la linea blu (percorso) non va a destinazione.
Come risolvere il problema?

+0

Penso che Google non sa come raggiungere la destinazione, a causa della non esiste un percorso, o ci si trova in un'area privata, una cosa del genere. – wf9a5m75

risposta

5

Il percorso è troppo lungo. In ogni risposta dall'API di Google Directions il numero di punti è limitato. Nel tuo esempio hai ricevuto N punti, tracciato il percorso con loro e ingrandisci mapView in area, dove sono posizionati solo quattro punti.
Per visualizzare il percorso sempre accurato, è necessario dopo il ricalcolo di ogni mappa ricalcolare il percorso (compresi i punti medi per mantenere lo stesso percorso).
Ad esempio, il percorso completo sullo schermo ha 50 punti. Stai ingrandendo la mappa, quindi sono visualizzati solo 4 punti (lo screenshot). Ora prendi # 1 come inizio, # 5 come arrivo e # 2 # 3 # 4 come punti medi e invia una nuova richiesta per trovare il percorso per questi punti. Riceverai nuovi 50 punti e con loro potrai disegnare questa parte del percorso con maggiore precisione.

enter image description here

+0

Questo sembra giustificato. Grazie – Nitish

1

Il punto di questo è che non v'è alcun percorso per quella destinazione, come potete vedere qui: Gmap of your Example

Credo che la cosa migliore è utilizzare lo stesso approccio che Gmaps già utilizzano, voglio dire, usando tratteggiata/polilinea tratteggiata dall'ultimo punto si ottiene indicazioni per il punto attuale.

Potete trovare qui paio di esempi di fuori di implementare il tuo tipo di polilinea:

Creating a dashed using IOS SDK

+0

Beh, se questo è vero, allora perché le mappe di Google mostrano il percorso correttamente su [** web **] (https://www.google.co.in/maps/dir/Vju+AS,+Skreddermoen+35,+4513 + Mandal, + Norvegia/Storgata + 2, + 0155 + Oslo, Norvegia +/@ 59.9082978,10.7358573,13z/dati = 4m14 4m13 1M5 1M1 1s0x46378e55431b5435:!!!!!! 0x306f6da1490b5f7b 2m2 1d7.4111312 2d58.0184825!!! 1m5! 1m1! 1s0x46416e627216c757: 0xd7785d6e9ecf2c43! 2m2! 1d10.7483587! 2d59.9127025! 3e0? Hl = en)? – Nitish