经纬度从地点A到地点B的路线图

我正在做地图和位置的工作。 我想从一个地方到另一个地方有路线图。 我提供的位置(目的地和来源)的经度和纬度。 所以请帮我拿这张地图。

我读了谷歌地图API,但我没有find完美的答案。

使用谷歌地图API下面的URL来查找两个地点之间的路线图路线

http://maps.google.com/?saddr=STARTINGADDRESS&daddr=DESTINATIONADDRESS 

首先,您必须从Google获取路线。 喜欢这个:

 NSError *error = nil; NSString *directionsInJSON = [NSString stringWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/directions/json?origin=%f,%f&destination=%f,%f&sensor=true",start.coordinate.latitude , start.coordinate.longitude , destination.coordinate.latitude, destination.coordinate.longitude]]encoding:NSUTF8StringEncoding error:&error]; 

之后,parsing你在上面得到的JSON:

 if (error == nil) { NSError *JSONError = nil; SBJsonParser *JSONParser = [[SBJsonParser alloc] init]; id directions = [JSONParser objectWithString:directionsInJSON error:&JSONError]; if (JSONError == nil) { directions = (NSDictionary*)directions; NSString *status = [directions objectForKey:@"status"]; if ([status isEqualToString:@"OK"]) { NSArray *routes = [directions objectForKey:@"routes"]; NSDictionary *route = [routes objectAtIndex:0]; NSDictionary *polylineOverview = [route objectForKey:@"overview_polyline"]; NSString *polylinePoints = [polylineOverview objectForKey:@"points"]; NSArray *decodedPolyline = [self decodePolyLine:polylinePoints]; [self loadRouteWithPoints:decodedPolyline]; } else { UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"No routes found" message:@"Sorry , we couldn't find any routes between you two." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil] autorelease]; [alert show]; } } } else { NSLog(@"error: %@",error.description); } 

现在你需要这些方法:

 -(void) loadRouteWithPoints:(NSArray *) routes { CLLocationCoordinate2D coords[[routes count]]; for(int i = 0; i < routes.count; i++) { CLLocation* loc = (CLLocation*)[routes objectAtIndex:i];//[NSKeyedUnarchiver unarchiveObjectWithData:[routes objectAtIndex:i]]; CLLocationCoordinate2D c; c.latitude = loc.coordinate.latitude; c.longitude = loc.coordinate.longitude; coords[i] = c; } MKPolyline *line = [[MKPolyline polylineWithCoordinates:(CLLocationCoordinate2D*)coords count:[routes count]] retain]; [self.mapsView addOverlay:line]; } 

和:

 - (NSMutableArray *)decodePolyLine: (NSString *)encoded { NSInteger len = [encoded length]; NSInteger index = 0; NSMutableArray *array = [[[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] autorelease]; NSNumber *longitude = [[[NSNumber alloc] initWithFloat:lng * 1e-5] autorelease]; CLLocation *loc = [[[CLLocation alloc] initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]] autorelease]; [array addObject:loc]; } return array; } 

瞧!

干杯!