2011-10-31 2 views
0

Y a-t-il un moyen d'obtenir la distance de conduite pour un geo-cordinate particulier? Je suis conscient que je dois utiliser http://maps.googleapis.com/maps/api/directions/output?parameters et obtenir une sortie JSON pour obtenir les résultats.Calcul de la distance de conduite à une coordonnée particulière

Existe-t-il un tutoriel expliquant comment procéder? ou tout exemple de code où je commence?

+1

Je ne connais pas de tutoriels pour cela, donc je recommanderais Google – khr055

+0

Il ya une réponse ci-dessous, vous pourriez probablement apprendre de lui! – sharon

Répondre

4

Vous pouvez essayer ce qui suit. Ce code récupère toutes les directions (même les alternatives) renvoyées par Google Directions Services. Vous pouvez obtenir la distance à l'étape 2 (réponse l'analyse syntaxique)

Etape 1: Entrez De et à des endroits

NSMutableString *googleURL = [[NSMutableString alloc] initWithString:[NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=%@&destination=%@&sensor=true&alternatives=true", searchFrom.text, searchTo.text]]; 
NSURL *url = [NSURL URLWithString:googleURL]; 
[googleURL release]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];   
[NSURLConnection connectionWithRequest:request delegate:self]; 
request = nil; 
responseData = [[NSMutableData alloc] init]; 

Étape 2: Lorsque vous obtenez la réponse de la requête faite, analyser le résultat

- (id)parseResponseWithDictionary:(NSDictionary *)dictResponse { 
    if ([[dictResponse objectForKey:@"status"] isEqualToString:kGoogleDirectionsStatusOK]) { 
     NSArray *listRoutes = (NSArray *)[dictResponse objectForKey:@"routes"]; 
     NSMutableString *result = nil; 
     NSMutableArray *listPolylines = nil; 
     for (NSDictionary *dictRouteValues in listRoutes) { 
      NSDictionary *dictPolyline = [dictRouteValues objectForKey:@"overview_polyline"]; 
      if (!result) { 
       result = [[NSMutableString alloc] init]; 
      } 
      [result appendString:[dictPolyline objectForKey:@"points"]]; 
      if (!listPolylines) { 
       listPolylines = [[NSMutableArray alloc] init]; 
      } 
      [listPolylines addObject:result]; 
      [result release]; 
      result = nil; 
     } 
     return [listPolylines autorelease]; 
    } 
    else { 
     NSString *error = @"No result found. Please check start and end location again!"; 
     return error; 
    } 
    return nil; 
} 

Étape 3: Décoder chaque polyligne dans la liste des polylignes. Cela donnera les coordonnées du chemin.

-(NSMutableArray *)decodePolyLine:(NSMutableString *)encoded { 
    [encoded replaceOccurrencesOfString:@"\\\\" withString:@"\\" 
           options:NSLiteralSearch 
            range:NSMakeRange(0, [encoded length])]; 
    NSInteger len = [encoded length]; 
    NSInteger index = 0; 
    NSMutableArray *listCoordinates = [[[NSMutableArray alloc] init] autorelease]; 
    NSInteger lat=0; 
    NSInteger lng=0; 
    while (index < len) { 
     NSInteger b; 
     NSInteger shift = 0; 
     NSInteger result = 0; 
     do { 
      b = [encoded characterAtIndex:index++] - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     } while (b >= 0x20); 
     NSInteger dlat = ((result & 1) ? ~(result >> 1) : (result >> 1)); 
     lat += dlat; 
     shift = 0; 
     result = 0; 
     do { 
      b = [encoded characterAtIndex:index++] - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     } while (b >= 0x20); 
     NSInteger dlng = ((result & 1) ? ~(result >> 1) : (result >> 1)); 
     lng += dlng; 
     NSNumber *latitude = [[NSNumber alloc] initWithFloat:lat * 1e-5]; 
     NSNumber *longitude = [[NSNumber alloc] initWithFloat:lng * 1e-5]; 
     //CLLocation *loc = [[CLLocation alloc] initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]]; 
     [listCoordinates addObject:[NSString stringWithFormat:@"%f,%f", [latitude floatValue], [longitude floatValue]]]; 
     //[loc release]; 
     [latitude release]; 
     [longitude release]; 
    } 

    return listCoordinates; 
} 
Questions connexes