MKTileOverlay,180.0 / -180.0 处的瓷砖未一致绘制

MKTileOverlay, tiles at 180.0 / -180.0 not drawn consistenly

我使用 MKTileOverlay class 通过自己生成的图块图像覆盖地图。

除经度 180 度或 -180 度边框上的图块外,一切正常。在这条线上,有时只会绘制瓷砖......有人可以给我提示来解决这个问题吗?

这个截图可以看到效果

地图的这个特定区域应该被 "default" 个图块完全覆盖。瓷砖图像本身应该没问题,因为它们显示在其他瓷砖上。

我使用此 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 )
    }
}

.. 欢迎任何提示 ;-)

简而言之:Apple 确认这是 IOS MapKit 中的错误。至少 IOS 版本 11 和 12 受到影响。目前还没有已知的解决方法。

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