我找到的唯一记录良好且工作正常的解决方案是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上提供了客户端提供的离线地图您需要为地图图块创建目录结构.当我使用openstreetmaps时,我复制了他们使用的目录结构,即root / zoom_level / area_level_1 / area_level_2 / tile.png
例如:
〜/ osmTiles /三千八百二十零分之十二/ 2078.png
我使用大理石(https://marble.kde.org/install.php?)将地图图块下载到正确的目录树(缓存)中,然后我将其复制到目标硬件并用客户端的.png文件替换osm图块
然后我使用node.js中的npm来安装http-server,并在http // localhost:port上作为http服务器托管根tile目录(这个答案解释得非常好: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在哪里寻找我的离线瓷砖.我必须指定地图应该是自定义地图,这更难.通过反复试验,我发现supportedMapTypes [7]是自定义地图.我不知道为什么,但这就是它的成功方式
Map{ plugin: osmPlugin activeMapType: supportedMapTypes[7] }