如何将 .mbtiles 文件中的tile_data设置为传单的图块?

2023-12-23

我正在使用meteorjs 和cordova 开发一个混合移动应用程序。应用程序需要有离线地图支持。我使用 Maperitive 导出了一个可以离线查看的 .mbtiles 文件,并将该文件复制到我的应用程序中,以便我可以在使用 Leaflet 加载图块时访问它。为此,我使用了cordova文件系统插件(将.mbtiles复制到正确的位置)和cordova s​​qlite插件(用于访问.mbtiles数据)并且该部分有效,当传单请求瓦片时,我可以成功加载tile_data z,x和y 。

不起作用的部分是将图块“放置”在地图上。我正在使用自定义图块层来访问 .mbtiles sqlite 数据库并获取所需的图块:

//TilesLayer.MBTiles.js

L.TileLayer.MBTiles = L.TileLayer.extend({
mbTilesDB: null,

initialize: function(url, options, db) {
    this.mbTilesDB = db;
    L.Util.setOptions(this, options);
},
getTileUrl: function (tilePoint, zoom, tile) {
    var z = this._getZoomForUrl();
    var x = tilePoint.x;
    var y = Math.pow(2, z) - tilePoint.y - 1;
    var base64Prefix = "data:image/png;base64,";

    this.mbTilesDB.readTransaction(function(tdx) {
      tdx.executeSql("SELECT tile_data FROM tiles WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?;", [z, x, y], function(tx, res) {

      tile.src = base64Prefix +  res.rows.item(0).tile_data;

       console.log("tile-src" + JSON.stringify(tile.src));
      }, function(tx, error) {
        console.log('SELECT error: ' + error.message);
      });
    }, function(error) {
      console.log('transaction error: ' + error.message);
    }, function() {
      console.log('transaction ok');

    }); 
},
_loadTile: function (tile, tilePoint, zoom) {
    tile._layer = this;
    tile.onload = this._tileOnLoad;
    tile.onerror = this._tileOnError;
    this.getTileUrl(tilePoint, zoom, tile);
} });  

地图上不显示图块。 Leaflet 要求提供正确的图块,这些图块已从数据库成功返回,但未显示。

-也许这一行有问题:

tile.src = base64Prefix +  res.rows.item(0).tile_data;

我是否没有正确使用tile_data?我必须将其转换为其他东西吗? .mbtiles 文件中的图块存储为 BLOB,但为 .png 图像。

- 当我把瓷砖传回来时,我是否错过了一个电话? 就像是:

tilelayer.fire('tileloadstart', {
                tile: tile
                });

并在tile.src设置后调用它?

任何帮助将非常感激。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 .mbtiles 文件中的tile_data设置为传单的图块? 的相关文章

  • 未向导出的模块提供此上下文

    我对问题的提出感到不满意 受到鼓励提出改进建议 另外 请记住 由于无知 无知导致烦恼 我对问题的诊断可能有缺陷 对于那个很抱歉 In 这个答案 https stackoverflow com a 40893583 1525840建议使用th
  • JavaScript 文件中的快速低冲突非加密哈希

    我正在寻找一种用 JavaScript 实现的低冲突的快速哈希 它不需要是加密哈希 我基本上使用它作为查看给定文件是否已上传 或部分上传 到用户帐户的方式 以节省他们在大型 视频 文件上上传的时间 我正在使用新的 HTML5 文件 API
  • 在javascript中执行curl请求?

    是否可以用 jQuery 或 javascript 发送curl 请求 像这样的事情 curl H Authorization Bearer 6Q https api wit ai message v 20140826 q 因此 在 PHP
  • 如何使用多重身份验证 - firebase?

    我有一个注册屏幕 其中包含 用户名 电子邮件 电话号码 密码 在本例中 我使用电话号码身份验证来验证号码 因此在用户验证他的号码后 我将他的数据保存到 firebase DB 中 所以在那之后 我将下摆导航到登录屏幕 应该包含电子邮件 密码
  • 尝试使用 jquery 提交表单

    我在提交表单时遇到问题 我已经填好了 表格的开头如下
  • javascript - setTimeout() 与 setInterval()

    之间的主要和次要区别是什么setTimeout and setInterval 我在网上搜索了一下 但它让我很困惑 它们之间有什么区别 主要区别是 setInterval fires again and again in intervals
  • 无法从角度路由器获取路径或 url

    我无法从 ActivatedRoute 或 Router 导入中获取 URL 或路径 它为路径 输出空白 为 URL 输出 我记得使用的是工作版本 唯一捕获正确路由的是Router events 我也无法订阅ActivatedRoute 中
  • 列出文件夹中的所有文件,包括子文件夹中的文件

    我正在尝试创建一个 Google Apps 脚本 该脚本将允许用户获取文件夹内的所有文件 包括连接到主文件夹的子文件夹内的文件 请注意 在我的代码中 我是提供folderid的人 这将是主文件夹 我已设法从文件夹中获取所有文件 但我还希望提
  • html/javascript 链接到本地​​文件

    我正在尝试使用 JavaScript 显示本地文件的链接 但它不起作用 我不确定我做错了什么 html是
  • Reactjs 中的嵌套注释

    我有以下 json comments id 1 comment text asdasdadasdsadsadadsa author adsfasdasdsad post id 1 ancestry null archived false c
  • ReactJS 在打字时延迟 onChange

    我需要更改状态以维护用户正在输入的字符串 但是我想延迟操作直到用户停止打字 但我不太清楚如何做到这两点 因此 当用户停止打字时 我希望触发一个操作 但不是在此之前 有什么建议么 使用 React Hooks 和 Function 组件 要保
  • 打字稿 keyof 返回字符串数组

    假设我有一堂课 class Test propA propB propC 我想创建一个返回字符串数组的方法 并将其键入为仅 Test 类中存在的键 我该如何使用keyof特征 class Test propA propB propC get
  • 类型“AngularFirestoreCollection”上不存在属性“onSnapshot”

    我正在尝试将侦听器与云 Firebase 分离 但仍然收到此错误 类型 AngularFirestoreCollection 上不存在属性 onSnapshot 你知道我应该进口什么吗 我直接从 Firebase 文档中复制此代码 let
  • 如何使用 d3.js 沿 GeoJSON 路径对对象进行动画处理?

    我正在使用 D3 js 从 GeoJSON 文件生成并渲染路径 效果很好 但现在我想沿着该路径为对象设置动画 我知道如何使用 D3 和标准 SVG 来做到这一点 创建过渡并设置其持续时间 对于过渡的每一帧 使用 Complete 查找沿路径
  • 修复了 Google 地图混搭中的图例

    我有一个带有 Google 地图混搭的页面 其中的图钉按日期 周一 周二等 进行颜色编码 包含地图的 IFrame 是动态调整大小的 因此当浏览器窗口调整大小时 它也会调整大小 我想在地图窗口的一角放置一个图例 告诉用户每种颜色的含义 Go
  • 与 raphael 一起制作路径动画

    我仍在试图弄清楚拉斐尔 并被一些基本的动画所困扰 看看这里 http jsfiddle net d7d3Z http jsfiddle net d7d3Z 这很简单 两条动画到位的路径 但我想要的是它看起来像一条线一样 绘制 而不是一起开始
  • 无法读取未定义的属性“isLoggedIn”

    此代码用于添加产品 然后添加到购物车和订单 并在后端使用 mongodb 创建 pdf 实际上 session isLoggedIn 是在 auth js 中定义的 检查该代码 但仍在 app js 中它给出了此错误 应用程序 JS代码 c
  • 如何识别 YouTube 播放器的音量变化

    我正在使用 angualr youtube embed 指令将 YouTube 播放器嵌入到我的 Angular Web 应用程序中 因为我必须识别播放和暂停以及音量变化事件 为了监听播放和暂停事件 我使用下面给出的代码 scope on
  • 迭代 Javascript 对象[重复]

    这个问题在这里已经有答案了 我有一个 Javascript 对象 var a tag1 Stocks acctType1 individual compare1 contains match name1 scrapedaccounttype
  • 使用 fullpage.js 触发 Velocity.js/Blast.js

    以下是此处发布的解决方案 Velocity js Blast js 从 0 开始不透明度 https stackoverflow com questions 28614890 velocity js blast js starting op

随机推荐