我找到的唯一有文档记录且可行的解决方案是商业Esri Arcgis Runtime for Qt。然而,创建瓦片包需要使用Arcgis堆栈,无论是桌面还是服务器(如果我错了,请纠正我)。 我希望您能够提供一个易于使用且开源的替代方案。 QtLocation在Qt 5.5中得到改进,但似乎没有针对离线瓦片包的开箱即用解决方案:
我知道这个答案有点晚,但是我在Linux上也遇到了客户提供的离线地图的挑战。
您需要为地图瓦片创建目录结构。因为我使用的是开放街道地图,所以我复制了它们使用的目录结构,即root/zoom_level/area_level_1/area_level_2/tile.png
例如:
~/osmTiles/12/3820/2078.png
我使用大理石 (https://marble.kde.org/install.php?) 将地图瓦片下载到正确的目录树 (缓存) 中,然后将其复制到目标硬件并使用客户端的 .png 文件替换 osm 瓦片。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]
}
@Marco Piccolino,根据我们在这个线程中的交谈,以下是我目前发现的详细解决方案,仅使用QtLocation、离线瓦片缓存和简单的http服务器:
您需要将png瓦片放入文件夹树中,如下所示:".../tiles/1.0.0/sat/{z}/{x}/{y}.png",参见此链接
您必须在该文件夹上运行一个http服务器(您可能想要使用此命令:sudo python -m SimpleHTTPServer 80)
您将不得不编辑您的hosts文件,将以下域名映射到您的服务器IP地址(很可能是127.0.0.1):otile1.mqcdn.com。这个技巧相当肮脏,但由于这个url在QtLocation OSM插件内部硬编码,我们在当前可用的QML API下没有太多选择。
最后,最简单的部分,在QML代码中,您应该有像这样的内容:
Plugin { id: mapProvider name: "osm" }
Map {
anchors.fill: parent
plugin: mapProvider
gesture.enabled: true
activeMapType: supportedMapTypes[1]
}
现在可以通过ArcGIS Runtime库从10.2.6版本开始使用离线地图瓦片:
https://developers.arcgis.com/qt/qml/api-reference/class_tiled_map_service_layer.html