Я использую 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 на клиенте, или мне нужно конвертировать файлы в изображения вне клиента?