MKTileOverlay, плитки на 180,0 / -180,0 не отображаются последовательно - PullRequest
0 голосов
/ 09 марта 2019

Я использовал класс MKTileOverlay, чтобы покрыть карту автоматически сгенерированными изображениями плиток.

Все работает хорошо, кроме плиток на границе с долготой 180 или -180 градусов.На этой линии плитки рисуются только иногда ... Кто-нибудь может дать мне подсказку, чтобы решить это?

Вы можете увидеть эффект на этом скриншоте

enter image description here

Эта конкретная область карты должна быть полностью покрыта плиткой «по умолчанию».Сами изображения плиток должны быть в порядке, так как они отображаются на других плитках.

Я использую эту функцию 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 )
    }
}

.. приветствуется любая подсказка; -)

1 Ответ

0 голосов
/ 28 марта 2019

Вкратце: Apple подтвердила, что это ошибка в IOS MapKit. По крайней мере, IOS версии 11 и 12 затронуты. Пока нет известных работ.

Длинная версия: я потратил на это билет DTS и связался с действительно хорошим инженером Apple. После некоторой совместной работы он мог легко воспроизвести проблему. Он попросил меня подать отчет об ошибке (49270907). Тем самым он смог поговорить с командой MapKit, и они подтвердили ошибку.

...