经纬度从地点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; }
瞧!
干杯!