我需要在主要运行于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]
}

10-05 22:48
查看更多