2011-08-24 41 views
7

Tôi đang tạo một ứng dụng trong đó tôi phải chỉ hiển thị một phần của khu vực nơi trên vị trí của tôi sẽ được vẽ, Tương tự như hình bên dưới.Xem một phần của chế độ xem bản đồ dưới dạng hình ảnh trong iOS

MAp part

Nhấp vào hình ảnh này sẽ đưa thêm ứng dụng của tôi. Nhưng ở đây nó chỉ là một hình ảnh tĩnh được tạo ra tùy thuộc vào kinh độ và vĩ độ của tôi.

Mọi trợ giúp sẽ thực sự được đánh giá cao. Cảm ơn

Trả lời

35

Đây là mã hoạt động. Bất cứ ai vẫn đang tìm kiếm câu trả lời.

NSString *staticMapUrl = [NSString stringWithFormat:@"http://maps.google.com/maps/api/staticmap?markers=color:red|%f,%f&%@&sensor=true",yourLatitude, yourLongitude,@"zoom=10&size=270x70"];  
NSURL *mapUrl = [NSURL URLWithString:[staticMapUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:mapUrl]]; 

Cảm ơn

+0

cảm ơn công việc của mình cho tôi và tiết kiệm thời gian của tôi. –

+0

tôi có thể chỉnh sửa hình ảnh pin –

-2

Để được rõ ràng, không có cách nào để có được một hình ảnh cho một vị trí cụ thể thông qua bộ bản đồ.

Bạn phải sử dụng các MKMapView, vô hiệu hóa người dùng từ panning/phóng to, thêm chú thích và xử lý click vào chú thích để làm bất cứ điều gì bạn muốn làm ..

+1

Có cách mã được đề cập bên dưới. –

3

Bạn có thể thử Google Static Maps API

Dưới đây là mẫu mã

NSString *urlString = @"http://maps.googleapis.com/maps/api/staticmap?center=Berkeley,CA&zoom=14&size=200x200&sensor=false"; 
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]; 
UIImage *imageData = [UIImage imageWithData:data]; 
[yourImageView setImage:imageData]; 

Thông qua điều này, bạn có thể lấy hình ảnh tĩnh dựa trên tọa độ của mình. Nhưng tôi sợ phải nói rằng tùy chỉnh chú thích có thể không thực hiện được.

3

Bạn cũng có thể sử dụng MKMapSnapshotter, điều này cho phép bạn chụp một ảnh chụp màn hình của bản đồ;

MKMapSnapshotOptions * snapOptions= [[MKMapSnapshotOptions alloc] init]; 
     self.options=snapOptions; 
     CLLocation * Location = [[CLLocation alloc] initWithLatitude:self.lat longitude:self.long]; 
     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(Location.coordinate, 300, 300); 
     self.options.region = region; 
     self.options.size = self.view.frame.size; 
     self.options.scale = [[UIScreen mainScreen] scale]; 

     MKMapSnapshotter * mapSnapShot = [[MKMapSnapshotter alloc] initWithOptions:self.options]; 

     [mapSnapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) { 
      if (error) { 
       NSLog(@"[Error] %@", error); 
       return; 
      } 

      UIImage *image = snapshot.image;//map image 
      NSData *data = UIImagePNGRepresentation(image); 

     }]; 
+0

Thuộc tính 'tùy chọn' không được tìm thấy trên đối tượng thuộc loại –

+0

@ShahbazAkram bạn nên khai báo thuộc tính của MKMapSnapShotOptions được gọi là tùy chọn – DevC

0

Tôi muốn thêm vào câu trả lời @DevC, bằng cách cung cấp phương thức (có khối hoàn thành) để thêm chú thích ở giữa hình ảnh. Lúc đầu, tôi đã quan tâm đến việc xem liệu tôi có thể thêm chú thích trước khi ảnh chụp nhanh bắt đầu hay không, tuy nhiên MKMapSnapshotter không not support this. Vì vậy, giải pháp tôi đưa ra, là tạo một ghim, vẽ nó lên trên hình ảnh bản đồ và sau đó tạo một hình ảnh khác của bản đồ + ghim. Đây là phương pháp tùy chỉnh của tôi:

-(void)create_map_screenshot:(MKCoordinateRegion)region :(map_screenshot_completion)map_block { 

    // Set the map snapshot properties. 
    MKMapSnapshotOptions *snap_options = [[MKMapSnapshotOptions alloc] init]; 
    snap_options.region = region; 
    snap_options.size = // Set the frame size e.g.: custom_view.frame.size; 
    snap_options.scale = [[UIScreen mainScreen] scale]; 

    // Initialise the map snapshot camera. 
    MKMapSnapshotter *map_camera = [[MKMapSnapshotter alloc] initWithOptions:snap_options]; 

    // Take a picture of the map. 
    [map_camera startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) { 

     // Check if the map image was created. 

     if ((error == nil) && (snapshot.image != nil)) { 

      // Create the pin image view. 
      MKAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:nil]; 

      // Get the map image data. 
      UIImage *image = snapshot.image; 

      // Create a map + location pin image. 
      UIGraphicsBeginImageContextWithOptions(image.size, YES, image.scale); { 

       [image drawAtPoint:CGPointMake(0.0f, 0.0f)]; 
       CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height); 

       // Create the pin co-ordinate point. 
       CGPoint point = [snapshot pointForCoordinate:region.center]; 

       if (CGRectContainsPoint(rect, point)) { 

        // Draw the pin in the middle of the map. 
        point.x = (point.x + pin.centerOffset.x - (pin.bounds.size.width/2.0f)); 
        point.y = (point.y + pin.centerOffset.y - (pin.bounds.size.height/2.0f)); 
        [pin.image drawAtPoint:point]; 
       } 
      } 

      // Get the new map + pin image. 
      UIImage *map_plus_pin = UIGraphicsGetImageFromCurrentImageContext(); 

      // Return the new image data. 
      UIGraphicsEndImageContext(); 
      map_block(map_plus_pin); 
     } 

     else { 
      map_block(nil); 
     } 
    }]; 
} 

Phương pháp này cũng đòi hỏi một tiêu đề hoàn thành được khai báo như sau:

typedef void(^map_screenshot_completion)(UIImage *); 

Tôi hy vọng đây là một số sử dụng cho những người tìm thêm chú thích cho hình ảnh bản đồ .

Các vấn đề liên quan