2013-04-04 225 views
1

我正在开发一个应用程序,我需要使用lat/long在两点之间绘制路线。Mapkit绘制路径问题

我已经使用谷歌API获取折线并解码后绘制它。

问题:

  1. 路线是不是在路上(附IMAGE_1)的中间

  2. 虽然放大/缩小路线不彻底划清(附IMAGE_2)

enter image description here

enter image description here

enter image description here

下面是代码:

if(!routeView) 
     routeView = [[UIImageView alloc] initWithFrame:CGRectMake(0, self.mapView.frame.origin.y, mapView.frame.size.width, self.mapView.frame.size.height)]; 
    routeView.userInteractionEnabled = NO; 
    [mapView addSubview:routeView]; 

    [self.lat1 resignFirstResponder]; 
    [self.long1 resignFirstResponder]; 
    [self.lat2 resignFirstResponder]; 
    [self.long2 resignFirstResponder]; 

    NSString* saddr = [NSString stringWithFormat:@"%@,%@",self.lat1.text,self.long1.text]; 

    NSString* daddr = [NSString stringWithFormat:@"%@,%@",self.lat2.text,self.long2.text]; 

    NSString* apiUrlStr = [NSString stringWithFormat:@"http://maps.apple.com/maps/api/directions/json?origin=%@&destination=%@&sensor=false", saddr, daddr]; 

    NSURL* apiUrl = [NSURL URLWithString:apiUrlStr]; 

    NSError *error; 
    NSString *apiResponse = [NSString stringWithContentsOfURL:apiUrl encoding:NSUTF8StringEncoding error:&error]; 


    NSData *responseData = [apiResponse dataUsingEncoding:NSUTF8StringEncoding]; 


    NSError* error1; 
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData 
                 options:NSJSONReadingMutableLeaves 
                  error:&error1]; 
    NSLog(@"Error: %@\n%@",[error1 localizedDescription],[error1 localizedFailureReason]); 


    if([[json objectForKey:@"status"] isEqualToString:@"OK"]) 
    { 
     NSArray *routes1 = [json objectForKey:@"routes"]; 
     NSDictionary *route = [routes1 lastObject]; 

     if (route) 
     { 
      NSString *overviewPolyline = [[route objectForKey: @"overview_polyline"] objectForKey:@"points"]; 

      routes = [self decodePolyLine:overviewPolyline]; 

      //NSLog(@"%@",[routes objectAtIndex:0]); 

      [self updateRouteView]; 
      [self centerMap]; 
     } 
    } 


-(void) updateRouteView 
{ 
CGContextRef context =  CGBitmapContextCreate(nil, 
               routeView.frame.size.width, 
               routeView.frame.size.height, 
               8, 
               4 * routeView.frame.size.width, 
               CGColorSpaceCreateDeviceRGB(), 
               kCGImageAlphaPremultipliedLast); 

CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0); 
CGContextSetLineWidth(context, 3.0); 

for(int i = 0; i < routes.count; i++) { 
    CLLocation* location = [routes objectAtIndex:i]; 
    CGPoint point = [mapView convertCoordinate:location.coordinate toPointToView:routeView]; 

    if(i == 0) { 
     CGContextMoveToPoint(context, point.x, routeView.frame.size.height - point.y); 
    } else { 
     CGContextAddLineToPoint(context, point.x, routeView.frame.size.height - point.y); 
    } 
} 

CGContextStrokePath(context); 

CGImageRef image = CGBitmapContextCreateImage(context); 
UIImage* img = [UIImage imageWithCGImage:image]; 

routeView.image = img; 
CGContextRelease(context); 

} 
+0

使用maps.apple.com合法使用地图工具包,因为它重定向到谷歌地图? – 2013-06-09 07:25:59

回答

0

一个可能的原因是你的路线是错位的是,你的路线是未来ROM谷歌(http://maps.apple.com/maps重定向到http://maps.google.com/maps)和你上绘制它苹果的地图。他们的数据稍有不同。

我无法解决部分绘制的路线,但我建议您添加MKPolyline而不是静态图像叠加层。他们发明了这种线条绘画工具是有原因的。

+0

谢谢克雷格。使用MKPolyline解决了过度图像问题,但路线错位仍然存在。 – DAddict 2013-04-12 05:27:25