预览地图的图像

时间:2011-10-27 19:24:56

标签: objective-c ios cocoa-touch mapkit

如何在iPhone Map应用程序中制作预览图标?

Screenshot http://img835.imageshack.us/img835/1619/img0016x.png

这是否有功能?

2 个答案:

答案 0 :(得分:4)

在iOS 7中使用MKMap Snapshotter。来自NSHipster

MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
options.region = self.mapView.region;
options.size = self.mapView.frame.size;
options.scale = [[UIScreen mainScreen] scale];

NSURL *fileURL = [NSURL fileURLWithPath:@"path/to/snapshot.png"];

MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
[snapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
    if (error) {
        NSLog(@"[Error] %@", error);
        return;
    }

    UIImage *image = snapshot.image;
    NSData *data = UIImagePNGRepresentation(image);
    [data writeToURL:fileURL atomically:YES];
}];

在iOS7之前执行以下操作之一:

  • 添加实时地图并停用互动。
  • 使用Google Static Maps API(如下所述)。
  • 创建MKMapView并将其渲染为图像。我试过这个(参见上一个编辑),但无法加载瓷砖。我试过调用needsLayout和其他方法但是没有用。
Apple与Google的交易比免费的API更可靠,但从好的方面来看,它非常简单。文档位于http://code.google.com/apis/maps/documentation/staticmaps/

这是实际使用的最小参数量: http://maps.googleapis.com/maps/api/staticmap?center=40.416878,-3.703530&zoom=15&size=290x179&sensor=false

参数摘要:

  • center:这可以是一个地址,或纬度,经度对,最多6位小数(超过6会被忽略)。
  • format:png8(默认),png24,git,jpg,jpg-baseline。
  • language:使用任何语言。如果请求不可用,将使用默认值。
  • maptype:以下其中一项:路线图,卫星,混合动力,地形。
  • scale:1,2,4。使用2可以在视网膜显示屏上返回两倍的像素。 4仅限于高级客户。   对于1和2,非付费解决方案限制为640x640。
  • sensor:真或假。强制性。它表示是否使用设备找到用户。
  • size:大小(以像素为单位)。
  • zoom:0(整个星球)到21。

还可以添加多个多边形,自定义标记以及为地图设置样式。

  NSData* data = [NSData dataWithContentsOfURL:@"http://maps.googleap..."];
  UIImage *img = [UIImage imageWithData:data];

答案 1 :(得分:2)

您可以使用Google Maps Static API生成图片,而不是加载整个UIMapView