Локальные плитки, хранящиеся в базе данных SQLite, не отображаются на loadTile (по пути: результат :) с MKTileOverlayRenderer - PullRequest
0 голосов
/ 10 июля 2020

Я использую SQLite3 для запроса мозаичных блобов, которые я загрузил из openmaptiles. Я могу получить BLOB-объект из моей БД и преобразовать его в Data, однако, когда я передаю данные в result из loadTile(at path:result:), я не вижу рендеринга плитки. Мне интересно, может быть, мне нужно преобразовать его в какой-то тип данных изображения для его рендеринга. .mbtiles использует данные blob из .pbf. Почему плитки не могут отображаться на экране, если у меня тип Data и я вызываю loadTile при каждой визуализации? Я использую MKTileOverlayRenderer

Вот как я конвертирую blob в Data:

guard let blob = sqlite3_column_blob(queryStatement, 0) else { return nil }    
let blobLength = sqlite3_column_bytes(queryStatement, 0)

return Data(bytes: blob, count: Int(blobLength))

Вот как я передаю его result из loadTile:

override func loadTile(at path: MKTileOverlayPath, result: @escaping (Data?, Error?) -> Void) {
    
    if let tilesURL = Bundle.main.url(forResource: "NYC", withExtension: "mbtiles"),
        let db = try? SQLiteDatabase.open(path: tilesURL.absoluteString),
        let tileData = db.map(Int32(path.z), x: Int32(path.x), y: Int32(path.y)) {
        result(tileData, nil)
    }
    
}

Раньше мне удавалось визуализировать тайлы наложения, которые были .png сохранены на устройстве, используя url(forTilePath path:). Это заставляет меня задаться вопросом, что-то не так с моим Data и передачей этих данных в loadTile(at path:result:). Я не думаю, что данные повреждены, потому что мне удалось отобразить эти плитки в Интернете, и если я запишу эти данные на диск, я смогу открыть файл .pbf в QGIS

Установка точки останова в result(tileData, nil) попадает на каждый вызов. Почему плитки не отображаются на экране, если я вызываю loadTile и передаю его result a Data?

Изменить: я понял, что loadTile(at path:result:) нужен тип изображения Data и .pbf не один. Есть ли способ конвертировать pbf в данные png или jpg на клиенте, или мне нужно конвертировать файлы в изображения вне клиента?

...