是否可以显示静态图像而不是默认的MapView,其中当前位置始终是图像的中心?
我想显示中心位于当前位置的图像,并根据坐标(距离和方向)在其上添加图钉。我想计算它之间的距离,也可能根据手机指向的方向旋转图像/引脚。
我认为使用MKMapView
可能最简单,并将其替换为静态图像,因为我可以使用所有内置功能,但是现在似乎无法将地图更改为静态图像?
我也可以直接在图像上绘画,但是如何工作呢?我应该这样做吗?我想这将是极坐标。
答案 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”的红色标记:
解码网址的标记部分:
标记=颜色:红%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