【问题标题】:MKMapSnapshotter in MKTileOverlay appears displacedMKTileOverlay 中的 MKMapSnapshotter 出现移位
【发布时间】:2014-06-14 02:04:09
【问题描述】:

我用下面的代码覆盖了MKTileOverlayloadTileAtPath:result: 方法。它只是将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);
    }];
}

鉴于这里的数学是正确的,理论上它应该显示一个完美的地图。相反,它会显示:

这就是它应该是什么样子(下面的地图是什么样子):

【问题讨论】:

  • 你有没有想过这个问题?我正在尝试类似的东西,但收到错误“Bad MKMapSnapshotOptions”。我认为这与图块大小有关。

标签: ios objective-c mapkit mkmapsnapshotter


【解决方案1】:

“Bad MKMapSnapshotOptions”消息可能是由于选项中的 size 不正确造成的。尺寸不能太大(看起来5000px还可以,但1000px太大了)。大小也不能有子像素大小,所以 123.4px 是无效的。请确保在生成大小时使用round()

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多