2012-07-09 59 views
-1

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

我看过谷歌地图API,但没有找到完美的答案。下面的谷歌地图API的URL

+1

在这里所以好的答案来解决好问题。这个问题在许多方面都不成问题:未能显示自己的代码(无论如何破坏),需求的模糊性以及您希望其他人为您编写代码的提示。 – 2012-07-09 10:16:47

+0

这不是那样的,但我尝试了很多,但我没有找到从源到目的地的完美路线图。 – nids 2012-07-09 10:47:56

+0

我想通过纬度和经度矩阵作为即时跟踪用户位置的地图,我将继续使用这些细节来获取纬度和经度我想绘制从用户起始位置到用户当前位置的地图 – nids 2012-07-11 09:26:10

回答

1

用来查找两个位置

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

我已经试过了。 – nids 2012-07-09 10:49:24

+0

那么,这是什么问题? – 2012-07-09 10:50:15

+0

我想通过纬度和经度矩阵作为即时跟踪用户位置继续我将获得经纬度使用这些细节我想绘制从用户的开始位置到用户的当前位置的地图 – nids 2012-07-11 07:13:14

0

首先,你必须采取从谷歌的方向之间的路线图路线。就像这样:

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

之后,解析您在上面得到了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; 
} 

瞧!

干杯!

+0

我想要有地图通过纬度和经度矩阵作为即时跟踪用户的位置,我将继续使用这些细节来获取纬度和经度我想绘制从用户起始位置到用户当前位置的地图 – nids 2012-07-11 09:26:22

+0

当您跟踪用户位置时,您可以更新您已添加的注释(路线)或将其删除并从该新位置创建一个新注释。我不明白,你想用位置矩阵做什么? – George 2012-07-11 09:30:19

+0

谷歌地图将显示从源纬度和经度到目的地经纬度的适当路径,但我想让路径跟随用户,用户路径可能不是合适的路径。 – nids 2012-07-11 09:58:31