如何在QML(Qt)中离线运行OpenStreetMap

时间:2017-01-22 12:27:04

标签: c++ qt qml openstreetmap

我在Qt上使用QML来显示OpenStreetMap(使用osm插件),这需要互联网连接。 有没有办法我可以做同样但离线运行?例如,运行我自己的磁贴服务器(但这样做有多容易)?或者使用一个可以让我快速完成的库。

顺便说一句,我在Ubuntu上运行我的程序。

有关如何做到这一点的任何帮助,特别是如果某人可以提供要完成的步骤,将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:5)

我已设法在Qt(使用QML)中按照以下步骤离线显示OpenStreetMap:

  1. 在localhost上构建/运行切片服务器。我使用了以下指南:https://switch2osm.org/serving-tiles/building-a-tile-server-from-packages/
  2. 在Qt的map.qml文件中,我必须在地图插件(http://doc.qt.io/qt-5/location-plugin-osm.html)中包含以下参数:

    Plugin {
       id: osmMapPlugin
       name: "osm"
    
       //provide the address of the tile server to the plugin
       PluginParameter {
          name: "osm.mapping.custom.host"
          value: "http://localhost/osm/"
       }
    
       /*disable retrieval of the providers information from the remote repository. 
       If this parameter is not set to true (as shown here), then while offline, 
       network errors will be generated at run time*/
       PluginParameter {
          name: "osm.mapping.providersrepository.disabled"
          value: true
       }
    }
    
  3. 最后,地图 QML类型的activeMapType属性必须设置为MapType.CustomMaphttp://doc.qt.io/qt-5/qml-qtlocation-maptype.html)才能使地图与之合作本地磁贴服务器。