1

我使用 MKTileOverlay 类通过自己生成的平铺图像覆盖地图。

一切都很好,除了在经度 180 或 -180 度的边界上的瓷砖。在这条线上,只有有时才会绘制瓷砖......有人可以给我一个提示来解决这个问题吗?

你可以看到这个截图的效果

在此处输入图像描述

地图的这个特定区域应该被这个“默认”图块完全覆盖。平铺图像本身应该没问题,因为它们显示在其他平铺上。

我使用这个 loadTile(at: ... ) 函数来提供生成的平铺图像。打印语句显示该函数被调用用于所有图块并且结果函数得到一个有效的图像。只是没有绘制瓷砖..我使用标准的MKTileOverlayRenderer ..

override func loadTile(at path: MKTileOverlayPath, result: @escaping (_ data: Data?, _ error: Error?) -> Void) {

    let x: Int = path.x
    let y: Int = path.y
    let zoomLevel : Int = path.z

    // calculate the x for the tile at longitude 180 degree
    let xMax = (1 << zoomLevel) - 1


    if (x == 0) || (x == xMax) {
        print("\(zoomLevel)/\(x)/\(y) requested")
    }

    // local variable to hold the image of the tile
    var localUIImage: UIImage = tileImageForDefaultImage


    // lots of stuff to generate the tile image


    // check if we have a valid image
    if let resultImage = localUIImage.pngData() {

        if (x == 0) || (x == xMax) {
            print("resultImage: \(resultImage.debugDescription)")
        }

        result(resultImage, nil )

    } else {

        let noResultImage = tileImageForDefaultImage.pngData()
        if (x == 0) || (x == xMax) {
            print("noResultImage: \(noResultImage.debugDescription)")
        }

        result(noResultImage, nil )
    }
}

..欢迎任何提示;-)

4

1 回答 1

0

简而言之:Apple 确认这是 IOS MapKit 中的一个错误。至少 IOS 版本 11 和 12 会受到影响。到目前为止还没有已知的工作。

加长版:我为此花了一张 DTS 票,并与一位非常优秀的 Apple 工程师取得了联系。经过一些合作,他可以​​轻松地重现该问题。他让我提交一份错误报告(49270907)。通过这个,他能够与 MapKit 团队交谈,他们确认了这个错误。

于 2019-03-28T20:02:21.603 回答