赞
踩
(一)QML加载离线地图+标记坐标点:MiniMap全屏
不废话,直接搬别人的砖,曰:他山之石可以攻玉!
- 离线地图的命名规则,主要关注<l/h>-<map_id>两个字段。
Tile filenames have to follow the osm plugin filename pattern, meaning osm_100-<l|h>-<map_id>-<z>-<x>-<y>.<extension>.
- 网络不流畅时下载失败,手动多点几次即可。(工具不太人性的地方!)
- z表示zoomLevel。z值小时地图的数量小,可以全部下载;z值大时地图数量大,可以按区域下载。
官网上有参考例子:QtLocation: using offline map tiles with the OpenStreetMap plugin,完全不需要像很多网站上说的那样骚操作。网页上说明了QtLocation加载离线地图的原理:指定了离线地图路径后,plugin会优先从该路径中查瓦片,找不到才从provider获取该瓦片。(嗯,好像无懈可击!)
With QtLocation 5.8 it is possible to pass an additional offline directory to the OSM plugin. When this parameter is present, tiles will be sourced from the specified directory before being searched in the tile cache, and, after that, being requested to the provider.
关键点在于将离线地图放到qrc资源文件中,这样就可以用相对路径来访问离线地图瓦片了。如果不这样做,osm.mapping.offline.directory就只能采用绝对路径。
- Plugin {
- id: mapPlugin
- name: "osm"
-
- PluginParameter{
- name: "osm.mapping.offline.directory"
- value: ":/offline_tiles/"
- }
- }
经验之谈:当zoomLevel较大时,qrc资源文件放入的瓦片太多了,编译会很慢,甚至Qt会卡死。因此,需要选择恰当的zoomLevel。
标记其实很简单,在指定坐标上添加图像即可,使用MapQuickItem来实现。
- // 成都
- MapQuickItem {
- id: chengdu
- anchorPoint.x: image_axis_x()
- anchorPoint.y: image_axis_y()
- coordinate: QtPositioning.coordinate(30.659462, 104.065735)
- sourceItem: Column {Image{id: img1; source: "marker.png"}}
- }
让人不爽的是,地图在缩放过程中,Marker标记位置并不精准,还需要优化。
QT / MiniMap · GitCode离线地图上标注坐标点https://gitcode.net/qt4/MiniMap.git
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。