Я использовал класс 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 )
}
}
.. приветствуется любая подсказка; -)