私は実際に、.mbtiles ファイルを読み取る (書き込みではない) コルドバ アプリケーションに取り組んでいます。それは、リーフレットでオフライン マップを表示するために、タイルでファイリングされたデータベースです。
ファイルに関するすべて (test.mbtiles と呼びます) が機能しています: ダウンロードとオープン。しかし、まだ大きな問題があります。表が読めません。これが私のコードの非機能的なサンプルです:
getTileUrl: function (tilePoint, callBack) {
var x = tilePoint.x;
var y = tilePoint.y;
var z = tilePoint.z;
var base64Prefix = 'data:image/png;base64,';
var db2 = new window.sqlitePlugin.openDatabase({name: 'test.mbtiles'});
db2.transaction(function(tx) {
tx.executeSql("SELECT tile_data FROM images INNER JOIN map ON images.tile_id = map.tile_id WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?", [z, x, y], function (tx, res) {
if(res.rows.length>0) {
console.log("success");
var src = base64Prefix + res.rows.item(0).tile_data;
callBack(src);
}
else {
console.log("response : no data");
}
}, function (tx, er) {
console.log('error with executeSql : ', er.message);
return;
});
});
}
そのため、オフライン マップを使用しようとするたびに (デバイスに存在する test.mbtiles のタイルを使用)、次のエラーが発生します。
error with executeSql : no such table: images (code 1): , while compiling: SELECT tile_data FROM images INNER JOIN map ON images.tile_id = map.tile_id WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?
したがって、取得しているファイルである test.mbtiles は、テーブルがないため良くないと思いimages
ます。しかし、それは間違っています。SQLite Database Browser
データベース スキームを確認するために使用したところ、images
テーブルがここにあり、適切なデータで満たされていることがわかりました。
他の誰かがこのエラーを抱えていて、それを修正する方法を知っていますか?
ところで、私は SQLite Plugin と Cordova の最新リリース バージョンを使用しており、主に Android でテストしています (Android が動作する場合は iOS に移植されます)。そして、可能な限り.jsファイルのみを使用し、Javaクラスなどに追加しないでください(ワークフロー全体を破壊します)。
ありがとう。