1

私は実際に、.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クラスなどに追加しないでください(ワークフロー全体を破壊します)。

ありがとう。

4

1 に答える 1