当前位置 : 主页 > 手机开发 > 无线 >

Qt / Qml:如何为离线使用包含地图图块?

来源:互联网 收集:自由互联 发布时间:2021-06-10
我需要将离线图块(slippy map)包含到主要在 Android和iOS上运行的Qt / Qml移动应用程序中. 我找到的唯一记录良好且工作正常的解决方案是Qt的商业Esri Arcgis Runtime.但是,创建磁贴包需要使用A
我需要将离线图块(slippy map)包含到主要在 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上提供了客户端提供的离线地图

您需要为地图图块创建目录结构.当我使用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]
}
网友评论