我需要将离线图 block (滑动 map )包含到主要在 Android 和 iOS 上运行的 Qt/Qml 移动应用程序中。
我发现的唯一有据可查且有效的解决方案是商业 Esri Arcgis Runtime for Qt。但是,创建切片包需要使用 Arcgis 堆栈,无论是桌面还是服务器(如果我错了,请纠正我)。
https://developers.arcgis.com/qt/
我正在寻找一种开源且易于使用的替代方案。
QtLocation 刚刚在 Qt 5.5 中进行了改进,但似乎没有针对离线切片包的开箱即用的解决方案:
最佳答案
我知道这个答案已经晚了,但我在 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/