概述
首先,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,
创建完毕项目以后点击进去
就是你的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);
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。