用静态图像替换MKMapView

时间:2014-02-27 14:28:18

标签: ios ios7 mkmapview

是否可以显示静态图像而不是默认的MapView,其中当前位置始终是图像的中心?

我想显示中心位于当前位置的图像,并根据坐标(距离和方向)在其上添加图钉。我想计算它之间的距离,也可能根据手机指向的方向旋转图像/引脚。

我认为使用MKMapView可能最简单,并将其替换为静态图像,因为我可以使用所有内置功能,但是现在似乎无法将地图更改为静态图像?

我也可以直接在图像上绘画,但是如何工作呢?我应该这样做吗?我想这将是极坐标。

3 个答案:

答案 0 :(得分:8)

使用iOS7,您可以使用MKMapSnapshotter在后台线程中渲染地图区域的快照。然后,您可以拍摄该快照的图像。

MKMapSnapshotOptions* options = [MKMapSnapshotOptions new];
//Setup options here:
options.camera = ...
options.region = ...

MKMapSnapshotter* snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
[snapshotter startWithQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) completionHandler:^(MKMapSnapshot* snapshot, NSError* error) {

    // get the image associated with the snapshot

    UIImage *image = snapshot.image;

    dispatch_async(dispatch_get_main_queue(), ^ {
        //Make sure to access UIKit UI elements on the main thread!
        [self.imageView setImage: image];
    });
}

答案 1 :(得分:5)

如果需要,您可以使用Google的static map API。这非常简单。这是来自哥本哈根某处的静态图片,DK:

NSData *data = [NSData dataWithContentsOfURL:@"http://maps.googleapis.com/maps/api/staticmap?center=55.675861+12.584574&zoom=15&size=400x400&sensor=false"];
UIImage *img = [UIImage imageWithData:data];

然后,您可以根据需要添加标记 - 请查看here如何添加标记。这是一个测试URL,用于在中间添加带有文本“M”的红色标记:

http://maps.googleapis.com/maps/api/staticmap?center=55.675861+12.584574&zoom=15&size=400x400&sensor=false&markers=color:red%7Clabel:M%7C55.675861+12.584574

解码网址的标记部分:

  

标记=颜色:红%7Clabel:M%7C55.675861 + 12.584574

你明白了:

  

markers = color:red | label:M | 55.675861 12.584574

修改

Here是一种刮擦地图控件图像的方法。如果我们提取答案的重要部分,这基本上就是你能做到的:

UIGraphicsBeginImageContextWithOptions(map.bounds.size, map.opaque, 0.0);
[map.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

请注意,map需要UIView,这意味着您可以在各种控件上使用此技巧。

编辑2:

您还应该看看this article。写得非常好,涵盖了与此相关的许多主题,包括叠加层,引脚等。

答案 2 :(得分:0)

我在UIImageView上编写了一个方便的类别,可以根据MKMapView轻松创建地图预览 - 它应该与AFNetworking完全相同的异步方式形象下降。希望你会发现它很有用。 BGMapPreview