我实际上正在研究一个读取(不写入).mbtiles文件的cordova应用程序。这是一个用tile填充的数据库,以显示带有传单的离线地图。
关于文件的所有内容(称之为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类等中都不添加(会破坏整个工作流程)。
感谢。