概述

首先,Qt支持多种地图插件,包括osm,here等等,要看具体支持情况。Qt中使用地图是通过地图类加上地图插件类一起使用的,地图插件的支持情况需要看具体的文档。本文档主要描述如何使用HERE插件。

背景描述

Qt的HERE plugin是一种地图服务插件,该插件可以获取Nokia的HERE地图服务。它的使用方式可以通过以下链接观看。
https://developer.here.com/te...
需要注意的是,同意HERE的使用条款仅仅是同意HERE的使用条款,并不会影响到使用Qt中的其他地图服务插件。
HERE 地图服务插件可以用插件关键词”here”来加载。
这种在线插件使用瓦片地图类,会把瓦片数据缓存在堆内存和纹理内存中。

使用方式

原文链接:https://doc.qt.io/qt-5/locati...

参数

必备参数

Parameter Description
here.app_id 管理员用来对客户端进行身份验证的id
here.token 管理员用于对客户端服务权限验证的token

HERE地图服务插件需要应用的 id 和token来获得HERE服务。具体如何获取id 和token 请看以下链接
https://developer.here.com/
进入网页之后,需要注册成为developer,然后创建项目,就会获得app_id和token,

clipboard.png

创建完毕项目以后点击进去

clipboard.png

就是你的id和token.

可选参数

以下列表展示了可以选择性传递给HERE plugin的参数
注意:自从Qt5.5以来,所有的以下参数必须加上here.的前缀,之前的版本不需要这样的前缀。

参数名称 描述
here.proxy 设置代理服务器,如果需要的话可以将value设置为“system”
here.mapping.host 地图管理员使用的基本的地图瓦片服务的URL地址
here.mapping.host.aerial 地图管理员使用的航空地图瓦片服务URL。(卫星方案使用)
here.mapping.cache.directory 地图瓦片的缓存目录的绝对地址,此地址作为网络磁盘缓存。默认的位置是QtLocation/here 的子目录中的某个位置,这个位置可以用 QStandardPaths::writableLocation()函数获取。使用 QStandardPaths::GenericCacheLocation作为参数。在没有共享缓存的系统上使用QStandardPaths::CacheLocation这个参数。
here.mapping.cache.disk.cost_strategy 缓存地图瓦片到磁盘上的策略,可用的值为bytesize和unitary,当使用bytesize时,相关的参数(here.mapping.cache.disk.size)将会被解读成bytes,如果用unitary,将会被解读成瓦片的数量。默认值为bytesize
here.mapping.cache.disk.size 地图瓦片的磁盘缓存大小,当储存策略为bytesize时,默认大小为50MB,当储存策略为unitary时,为1000个瓦片。
here.mapping.cache.memory.cost_strategy 缓存地图瓦片到内存上的策略,可用的值为bytesize和unitary,当使用bytesize时,相关的参数(here.mapping.cache.memory.size)将会被解读成bytes,如果用unitary,将会被解读成瓦片的数量。默认值为bytesize
here.mapping.cache.memory.size 地图瓦片的内存缓存大小,当储存策略为bytesize时,默认大小为3MB,当储存策略为unitary时,为100个瓦片。
here.mapping.cache.texture.cost_strategy 缓存解压后的地图瓦片到内存上的策略,可用的值为bytesize和unitary,当使用bytesize时,相关的参数(here.mapping.cache.texture.size)将会被解读成bytes,如果用unitary,将会被解读成瓦片的数量。默认值为bytesize
here.mapping.cache.texture.size 地图瓦片的纹理缓存大小,当储存策略为bytesize时,默认大小为6MB,当储存策略为unitary时,为30个瓦片。需要注意的是纹理缓存有一个硬性的最小大小,取决于地图的视口大小,(他必须包含足够的数据区县市当前现实的地图瓦片),这个大小的值是需要的缓存大小加上最小缓存大小的和。
here.mapping.prefetching_style 此参数用于提供一个引擎如何预存取瓦片的提示。默认值为TwoNeighbourLayers,引擎会预存取当前级别的地图上下两个级别,当放大或缩小当前地图时能够起到很好的展示效果。OneNeighbourLayer 只预存与当前级别最近的一层瓦片。最后,NoPrefetching 不预存取瓦片,需要注意的是,根据实际的地图类型,这个参数可能会被无视。
here.mapping.highdpi_tiles 是否请求高dpi的瓦片,可用的值有 true 和false,默认值为false.
here.geocoding.host 地图编码管理员使用的地图编码服务URL
here.routing.host 路径选择服务URL
here.places.host 查询服务URL
here.places.api_version 地址管理员使用的REST API的版本。支持version1和version2, 但是version1已经被废除,并且在release版本中不会支持,默认支持version2。

使用范例

以下的两个例子展示了如何用id和token创建一个HERE插件实例,这两个参数是用于验证信息。

QML

Plugin {
    name: "here"
    PluginParameter { name: "here.app_id"; value: "myapp" }
    PluginParameter { name: "here.token"; value: "abcdefg12345" }
}

C++

QMap<QString,QVariant> params;
params["here.app_id"] = "myapp";
params["here.token"] = "abcdefg12345";

QGeoServiceProvider *gsp = new QGeoServiceProvider("here", params);

总结

Qt的Map的使用方法可以参考Map的官方文档,本文档主要讲解了如何创建一个HERE地图的插件,因为HERE地图插件的创建稍微有些复杂。如果使用OSM插件,则很简单,只需要指定插件名称就可以了,不需要输入app_id 和token:

 Plugin{
        id:osmPlugin
        name:"osm"
    }

在Map中的使用方式如下:

 Map{
        id:map
        anchors.fill: parent
        plugin: herePlugin
        center: QtPositioning.coordinate(31.17396,121.39690)
        zoomLevel: 15
        Component.onCompleted: {
            map.addMapItem(locationItem);
        }
    }

YorkChen
9 声望0 粉丝