我使用 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 )
}
}
..欢迎任何提示;-)