在 QML 中使用离线交互式地图
Posted
技术标签:
【中文标题】在 QML 中使用离线交互式地图【英文标题】:Use an offline interactive map in QML 【发布时间】:2021-03-25 19:19:57 【问题描述】:我想以osm
文件的形式注入我从OpenStreetMap 获得的一大块地图。
根据我在文档中阅读的内容,Open Street Map Plugin 似乎没有任何参数将源文件作为映射。它仅适用于服务器。问题是我在运行我的应用程序时没有 Internet 连接。我需要在内部使用地图。
Mapbox 和 HERE 插件同上。
还有其他方法吗?
这是创建地图的样板:
Plugin
id: somePlugin
// code here to choose the plugin as necessary
Map
id: map
plugin: somePlugin
center
latitude: -27
longitude: 153
zoomLevel: map.minimumZoomLevel
gesture.enabled: true
【问题讨论】:
【参考方案1】:2017 年 4 月更新:QtLocation 现在支持离线 OSM 磁贴。 见http://doc.qt.io/qt-5/location-plugin-osm.html
正如您所注意到的,QtLocation 目前不给您offline option。此外,对于底图,它目前仅支持image tiles(不是您所说的 XML 矢量 OSM 数据)。
你有几个选择:
在 QML 中:您可以使用 ArcGIS Runtime SDK for Qt。 从版本 10.26 开始,它支持添加带有离线切片的自定义地图图层。您需要先获取 OSM 数据的 PNG/JPG 图块。这是一个支持 OSM slippymap 瓦片的example layer。
在 C++ 中:您会发现一些显示矢量数据的选项,这些数据可能需要或不需要从 OSM 格式转换,还有更多工作要做:
http://wiki.openstreetmap.org/wiki/Libosmscout https://www.mapbox.com/blog/qmapboxgl/ QGis 是用 Qt 制作的,与许多其他开源地理项目一样,因此它们可能会有所帮助另外,不要忘记在 Qt Bugtracker 中为上述问题投票!
【讨论】:
尽管 ArcGIS 是解决我的问题最方便的功能,但它太重 (700 MB)。 MaxpboxGL 似乎是从图块中获取离线地图的最简单方法,但我需要将QMapboxGL
转换为 QML 对象。我想知道这是否可行。
很遗憾,QMapboxGL
项目不支持 Windows。我需要我的项目是跨平台的。
您的应用程序中的 ArcGIS 运行时库只有几百 Kbs,所以这应该不是什么大问题。不过,在主机上,您必须在系统级别安装它。
好吧。我可能会尝试,但我还没有找到基本许可证的价格。不过好像不是免费的……
基本的这种功能是免费的。您只需在 Arcgis Online 上注册您的应用程序并获取密钥 - 否则您会在地图上看到水印【参考方案2】:
您可以生成或下载tiles 以供离线使用。要生成图块,请查看 TileMill 或 Maperitive。下载瓷砖可以通过Marble和其他各种工具实现,但请尊重瓷砖服务器的使用政策!下载高缩放图块会导致图块服务器上的负载很高,因为这些图块通常没有缓存,需要即时渲染。
【讨论】:
太棒了!我使用 Maperitive 从我的osm
文件中生成 png
切片。现在我需要使用它们来生成地图。
您好,先生,我用同样的方法生成png文件。但是,就我而言,有太多的 png 文件 -zoom level 10- 我无法命名每个文件。(png 文件的名称应该应用这种模式 osm_100-osm_100-<l|h>-<map_id>-<z>-<x>-<y>.<extension>
。例如,当我下载一些缩放级别为 10 的图块时,一些 png 文件的名称是 202693,202694
等。不幸的是,我必须使用至少 10 级缩放,你猜有许多 png 文件必须命名为一个一。我问的是,如果你也遇到这种情况,你是怎么解决这个问题的?或者,可能有任何其他遵循此模式的图块创建者? @scai
很遗憾,我无法回答这个问题。我从来没有使用过 Qt 来显示地图。以上是关于在 QML 中使用离线交互式地图的主要内容,如果未能解决你的问题,请参考以下文章