2013-04-10 70 views
2

我在自定义标注的mapview中定制了引脚。MapKit路由自定义引脚和标注

虽然在地图上绘制路径,但路线即将通过标注&引脚。图像附加。

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

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

我觉得你的问题是,你将你的脚后,添加routeView,所以routeview是第一子视图。如果您尝试首先添加routeView,例如在viewDidLoad方法中会发生什么?

0

感谢您的回复。我已经使用MKPolylines弄清楚了这一点。请参阅下面的代码

NSInteger numberOfSteps = routes.count; 

CLLocationCoordinate2D coordinates[numberOfSteps]; 
for (NSInteger index = 0; index < numberOfSteps; index++) { 
    CLLocation *location = [routes objectAtIndex:index]; 
    CLLocationCoordinate2D coordinate = location.coordinate; 

    coordinates[index] = coordinate; 
} 

MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps]; 
[self.mapView addOverlay:polyLine]; 
+0

这是行不通的? – 2013-04-12 05:55:14