繁体   English   中英

MKTileOverlay 中的 MKMapSnapshotter 出现位移

[英]MKMapSnapshotter in MKTileOverlay appears displaced

我正在使用以下代码覆盖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”消息可能是由于选项的size不正确。 尺寸不能太大(看起来5000px还可以,但是1000px太大了)。 尺寸也不能有子像素尺寸,所以 123.4px 是无效的。 确保在生成尺寸时使用round()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM