MKMapSnapshotter в MKTileOverlay выглядит смещенным
Я переопределяю loadTileAtPath:result:
метод MKTileOverlay
со следующим кодом. Это просто преобразует MKTileOverlayPath
в MKMapRect, а затем использует MKMapSnapshotter
сделать снимок области карты, на которую смотрят. Оттуда я бы сделал дальнейшую работу, используя изображение карты. Но сейчас я просто возвращаю снимки в качестве результирующих данных, чтобы понять, насколько хорошо они представляют карту.
- (void)loadTileAtPath:(MKTileOverlayPath)path
result:(void (^)(NSData *data, NSError *error))result
{
double divisions = pow(2, (float)path.z);
MKMapSize tileSize = MKMapSizeMake(MKMapSizeWorld.width / divisions, MKMapSizeWorld.height / divisions);
MKMapPoint tilePoint = MKMapPointMake(path.x * tileSize.width, path.y * tileSize.height);
MKMapRect tileRect = MKMapRectMake(tilePoint.x, tilePoint.y, tileSize.width, tileSize.height);
MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
options.mapRect = tileRect;
options.size = CGSizeMake(tileSize.width, tileSize.height);
options.showsBuildings = NO;
options.showsPointsOfInterest = NO;
options.mapType = MKMapTypeStandard;
MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
[snapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
result(UIImagePNGRepresentation(snapshot.image), nil);
}];
}
Учитывая, что математика здесь верна, теоретически она должна отображать идеальную карту. Вместо этого он отображает это:
И вот как это должно выглядеть (как выглядит карта ниже):
0 ответов
Сообщение "Bad MKMapSnapshotOptions" скорее всего из-за неправильного
size
в опциях. Размер не может быть слишком большим (кажется, 5000 пикселей - это нормально, но 1000 пикселей слишком велико). Размер также не может иметь субпиксельных размеров, поэтому значение 123,4 пикселя недопустимо. Убедитесь, что вы используете
round()
когда вы производите размер.