2011-02-07 22 views
0

私はGoogleマップ上に線を描きたいと思いますが、線は直線または曲線でも構いませんが、地理的な場所にある可能性がある2点を結ぶ線を描きたい。Googleマップに線を描く方法

ありがとうございました。

GuruPrasad R Gujjar。

答えて

0

このLink1Link2を参照してください。それはあなたにとって有益かもしれません。

1

ここではコード例を示します。これを試してください。 EDIT:また、 "RegexKitLite"ヘッダーファイルとクラスファイルをダウンロードする必要があります。


// This method will calculate the routes and return an array with point 
-(NSArray*) calculateRoutesFrom:(CLLocationCoordinate2D) f to: (CLLocationCoordinate2D) t { 
    NSString* saddr = [NSString stringWithFormat:@"%f,%f", f.latitude, f.longitude]; 
    NSString* daddr = [NSString stringWithFormat:@"%f,%f", t.latitude, t.longitude]; 

    NSString* apiUrlStr = [NSString stringWithFormat:@"http://maps.google.com/maps?output=dragdir&saddr=%@&daddr=%@", saddr, daddr]; 
    NSURL* apiUrl = [NSURL URLWithString:apiUrlStr]; 
    NSLog(@"api url: %@", apiUrl); 
    NSString *apiResponse = [NSString stringWithContentsOfURL:apiUrl]; 
    NSString* encodedPoints = [apiResponse stringByMatching:@"points:\\\"([^\\\"]*)\\\"" capture:1L]; 

    return [self decodePolyLine:[encodedPoints mutableCopy]]; 
} 
-(NSMutableArray *)decodePolyLine: (NSMutableString *)encoded { 
    [encoded replaceOccurrencesOfString:@"\\\\" withString:@"\\" 
           options:NSLiteralSearch 
            range:NSMakeRange(0, [encoded length])]; 
    NSInteger len = [encoded length]; 
    NSInteger index = 0; 
    NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; 
    NSInteger lat=0; 
    NSInteger lng=0; 
    while (index = 0x20); 
     NSInteger dlat = ((result & 1) ? ~(result >> 1) : (result >> 1)); 
     lat += dlat; 
     shift = 0; 
     result = 0; 
     do { 
      b = [encoded characterAtIndex:index++] - 63; 
      result |= (b & 0x1f) = 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]; 
     printf("[%f,", [latitude doubleValue]); 
     printf("%f]", [longitude doubleValue]); 
     CLLocation *loc = [[[CLLocation alloc] initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]] autorelease]; 
     [array addObject:loc]; 
    } 

    return array; 
} 

// This method will draw the route with array of points. 
-(void) updateRouteView 
{ 
    CGContextRef context = CGBitmapContextCreate(nil, 
                routeView.frame.size.width, 
                routeView.frame.size.height, 
                8, 
                4 * routeView.frame.size.width, 
                CGColorSpaceCreateDeviceRGB(), 
                kCGImageAlphaPremultipliedLast); 

    CGContextSetStrokeColorWithColor(context, lineColor.CGColor); 
    CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0); 
    CGContextSetLineWidth(context, 3.0); 

    for(int i = 0; i &ls; routes.count; i++) { 
     CLLocation* location = [routes objectAtIndex:i]; 
     CGPoint point = [map 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; 
    //[self.view addSubview:routeView]; 
    CGContextRelease(context); 

    //29-07-10 
    CGContextRef context2 =  CGBitmapContextCreate(nil, 
                routeView2.frame.size.width, 
                routeView2.frame.size.height, 
                8, 
                4 * routeView2.frame.size.width, 
                CGColorSpaceCreateDeviceRGB(), 
                kCGImageAlphaPremultipliedLast); 

    CGContextSetStrokeColorWithColor(context2, lineColor2.CGColor); 
    CGContextSetRGBFillColor(context2, 0.0, 0.0, 1.0, 1.0); 
    CGContextSetLineWidth(context2, 3.0); 

    for(int i = 0; i &ls; routes2.count; i++) { 
     CLLocation* location2 = [routes2 objectAtIndex:i]; 
     CGPoint point2 = [map convertCoordinate:location2.coordinate toPointToView:routeView2]; 

     if(i == 0) { 
      CGContextMoveToPoint(context2, point2.x, routeView2.frame.size.height - point2.y); 
     } else { 
      CGContextAddLineToPoint(context2, point2.x, routeView2.frame.size.height - point2.y); 
     } 
    } 

    CGContextStrokePath(context2); 

    CGImageRef image2 = CGBitmapContextCreateImage(context2); 
    UIImage* img2 = [UIImage imageWithCGImage:image2]; 

    routeView2.image = img2; 
    //[self.view addSubview:routeView]; 
    CGContextRelease(context2); 

}

私はそれがあなたの仕事を完了するのに役立つと思います。

関連する問題