是否可以显示静态图像而不是默认的MapView,其中当前位置始终是图像的中心?
我想显示一个中心是当前位置的图像,并根据坐标(距离和方向)在其上添加接点。我也想计算两者之间的距离,并可能根据手机指向的方向旋转图像/引脚。
我认为使用MKMapView
并用静态图像替换它可能是最简单的,因为我可以使用所有内置功能,但现在似乎不可能将映射更改为静态图像?
我也可以直接在图像上绘制,但这是怎么回事,我应该这样做吗?我想它应该是有极坐标的东西。
使用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];
});
}
如果需要,您可以使用Google的静态地图API。这很简单。这是来自丹麦哥本哈根某个地方的静态图像:
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];
然后,您可以根据需要添加标记-看看如何添加标记。下面是一个测试URL,用于添加中间带有文本"M"的红色标记:
http://maps.googleapis.com/maps/api/staticmap?center=55.675861+12.584574&缩放=15&大小=400x400&传感器=错误&标记=颜色:红色%7标记:M%7C55.67861+12.584574
解码URL的标记部分:
标记=颜色:红色%7标签:M%7C55.67861+12.584574
您得到的是:
标记=颜色:红色|标签:M | 55.675861 12.584574
编辑:
这里有一种方法可以抓取地图控件的图像。如果我们提取答案的重要部分,这基本上就是你可以做到的:
UIGraphicsBeginImageContextWithOptions(map.bounds.size, map.opaque, 0.0);
[map.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
请注意,map
需要从UIView
派生,这意味着您可以在各种控件上使用此技巧。
编辑2:
你也应该看看这篇文章。写得很好的一本书涵盖了很多与此相关的主题,包括覆盖、引脚等
我在UIImageView
上写了一个方便的类别,它允许基于MKMapView
轻松创建地图预览-它应该与AFNetworking
完全相同,用于异步图像向下。希望你会发现它有用。BGMapPreview