在 QML 中使用离线交互式地图

Use an offline interactive map in QML

我想以 osm 文件的形式注入从 OpenStreetMap 获得的一大块地图。

根据我在文档中阅读的内容,Open Street Map Plugin 似乎没有任何将源文件作为地图的参数。它仅适用于服务器。问题是 运行 我的应用程序无法连接到 Internet。我需要在内部使用地图。

Mapbox and 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
}

2017 年 4 月更新: QtLocation 现在支持离线 OSM 磁贴。 参见 http://doc.qt.io/qt-5/location-plugin-osm.html

正如您所注意到的,QtLocation 目前没有为您提供 offline option. Also, for basemaps it currently only supports image tiles(不是您正在谈论的 XML 矢量 OSM 数据)。

您有几个选择:

在 QML 中:您可以使用 ArcGIS Runtime SDK for Qt。 从版本 10.26 开始,它支持添加带有离线图块的自定义地图层。您需要先获取 OSM 数据的 PNG/JPG 分块。这是一个支持 OSM slippymap 瓦片的 example layer

在 C++ 中:您会发现一些显示矢量数据的选项,这些数据可能需要或不需要从 OSM 格式转换,并且您需要做更多工作:

还有,别忘了在 Qt Bugtracker 中为上面提到的问题投票!

您可以生成或下载tiles for offline usage. For generating tiles take a look at TileMill or Maperitive. Downloading tiles can be achieved via Marble和各种其他工具,但请尊重瓦片服务器的使用政策!下载高缩放图块会导致图块服务器负载过高,因为这些图块通常不会缓存,需要即时渲染。