В 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 выполните одно из следующих действий:
- Добавить живую карту и отключить взаимодействие.
- Используйте API статических карт Google (см. Ниже).
- Создайте 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 ограничено для премиум-клиентов.
Неоплачиваемое разрешение составляет 640х640 для 1 и 2.
sensor
: истина или ложь. Обязательный. Указывает, находится ли пользователь с помощью устройства.
size
: размер в пикселях.
zoom
: от 0 (целая планета) до 21.
Существует еще несколько добавлений полигонов, пользовательских маркеров и стиля карты.
NSData* data = [NSData dataWithContentsOfURL:@"http://maps.googleap..."];
UIImage *img = [UIImage imageWithData:data];