Qt/Qml : how to include map tiles for offline usage?

标签 qt mobile location maps qml

我需要将离线图 block (滑动 map )包含到主要在 Android 和 iOS 上运行的 Qt/Qml 移动应用程序中。

我发现的唯一有据可查且有效的解决方案是商业 Esri Arcgis Runtime for Qt。但是,创建切片包需要使用 Arcgis 堆栈,无论是桌面还是服务器(如果我错了,请纠正我)。

https://developers.arcgis.com/qt/

我正在寻找一种开源且易于使用的替代方案。

QtLocation 刚刚在 Qt 5.5 中进行了改进,但似乎没有针对离线切片包的开箱即用的解决方案:

http://doc-snapshots.qt.io/qt5-5.5/qtlocation-index.html

最佳答案

我知道这个答案已经晚了,但我在 Linux 上使用客户端提供的离线 map 时遇到了同样的挑战

您需要为 map 图 block 创建目录结构。当我使用 openstreetmaps 时,我复制了他们使用的目录结构,即 root/zoom_level/area_level_1/area_level_2/tile.png

例如:

~/osmTiles/12/3820/2078.png

我使用 Marble ( https://marble.kde.org/install.php ?) 将 map 图 block 下载到正确的目录树(缓存)中,然后将其复制到目标硬件并用客户端的 .png 文件替换 osm 图 block

然后,我使用 node.js 中的 npm 安装 http-server 并将根磁贴目录作为 http 服务器托管在 http//localhost:port (这个答案解释得很好: https://stackoverflow.com/a/12905427/5452614 )

例如:

http-server ~/osmTiles -p 8080

在 http://127.0.0.1:8080 上为 osmTiles 提供服务

最后我修改了标准的QML插件

Plugin {
  id: osmPlugin
  name: "osm"
  PluginParameter { name: "osm.useragent";         value: "My Company Name" }
  PluginParameter { name: "osm.mapping.host";      value: "http://127.0.0.1:8080/" }
  PluginParameter { name: "osm.mapping.copyright"; value: "MyCompany" }
}

我告诉 QML 在哪里寻找我的离线图 block 。我必须指定 map 应该是自定义 map ,这比较困难。通过反复试验我发现supportedMapTypes[7]是自定义 map 。我不知道为什么,但结果就是这样

Map{
  plugin: osmPlugin
  activeMapType: supportedMapTypes[7]
}

关于Qt/Qml : how to include map tiles for offline usage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120160/

相关文章:

c++ - QprogressBar 在一秒内从 0 跳到 100,如何使其平滑

qt - QFont.toString() 的格式是否在 Qt 版本中有记录和/或稳定?

mobile - 移动应用内A | B测试

qt - 在诺基亚 Qt SDK 上测试启动器图标

qt - 在 QML 中控制带纹理的 3D 对象不透明度

html - 使用 css 的自适应布局

flash - 什么是 Flash 的最新和最好的替代品?

android - 谷歌位置 API : request location updates with pending intent?

ruby-on-rails - Rails - 在哪里放置数据文件?

sql-server-2008 - 使用纬度和经度返回SQL Server 2008中两个位置之间的距离