2013-04-10 69 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