QtLocation和自定义插件实现地图下载与加载离线地图

QtLocation和自定义插件实现基础地图和地图上航线绘制见上篇文章

说明:这里在线地图与离线地图都是使用的bing

地图缓存

首先要知道缓存的区域,一般使用当前地图显示的区域或者自己框一个区域。

可以根据左下角和右上角的屏幕坐标获取相应的经纬度,这样就确定了矩形范围。

Map组件屏幕坐标转经纬度方法

通过经纬度范围和缩放级别遍历地图的所有瓦片

lonToTileX 通过经度计算出瓦片的横坐标(X坐标)

  • lon + 180.0:把经度从 -180 到 180 的范围转换成 0 到 360 的范围。
  • / 360.0:把经度映射到 0 到 1 之间。
  • 1 << zoomLevel:通过 1 << zoomLevel 来计算该缩放级别下总的瓦片数量。2 的 zoomLevel 次方,表示当前缩放级别的瓦片网格大小。

latToTileY 通过纬度计算出瓦片的纵坐标(Y坐标)

  • lat * M_PI / 180.0:把纬度从度转换为弧度。
  • log(tan(latRad) + 1.0 / cos(latRad)) / M_PI:这个公式是根据投影变换计算纬度的网格坐标。它来源于 Web Mercator 投影,它将地球表面上的点映射到平面上。
  • 最后通过 (1 << zoomLevel) 来调整瓦片网格大小。

这里根据待下载瓦片路径拼接url地址请求网络下载

下载请求返回后,根据瓦片路径保存到本地即可

加载离线地图

当用鼠标在Map组件上进行地图缩放或者平移需要加载地图时,就会触发QGeoTiledMapReply *getTileImage(const QGeoTileSpec &spec)函数

把请求网络的拼接改为查找本地文件路径的拼接

读取瓦片数据后给地图加载新的瓦片数据。

在线离线融合:可以先在本地查找瓦片,本地上没有再去请求网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值