我需要在主要运行于Android和iOS的Qt/Qml移动应用程序中包含离线图块(草皮贴图)。
我发现的唯一有据可查且有效的解决方案是Qt的商业Esri Arcgis Runtime。但是,创建图块包需要使用Arcgis堆栈(台式机或服务器)(如果我记错了,请纠正我)。
https://developers.arcgis.com/qt/
我正在寻找一个开源且易于使用的替代方案。
QtLocation在Qt 5.5中刚刚进行了改进,但是对于那里的离线磁贴软件包似乎没有开箱即用的解决方案:
http://doc-snapshots.qt.io/qt5-5.5/qtlocation-index.html
最佳答案
我知道这个答案来晚了,但是我在Linux上由客户端提供的离线 map 也遇到了同样的挑战
您需要为 map 图块创建目录结构。当我使用openstreetmaps时,我复制了它们使用的目录结构,即root/zoom_level/area_level_1/area_level_2/tile.png
例如:
〜/osmTiles/12/3820/2078.png
我使用大理石(https://marble.kde.org/install.php?)将 map 图块下载到正确的目录树(已缓存)中,然后将其复制到目标硬件,并用客户端的.png文件替换了osm图块。
然后,我使用了来自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在哪里寻找我的离线图块。我必须指定该 map 应该是一个自定义 map ,这很难。通过反复试验,我发现supportedMapTypes [7]是自定义 map 。我不知道为什么,但这就是结果
Map{
plugin: osmPlugin
activeMapType: supportedMapTypes[7]
}