离线地图显示-1

瓦片地图是一种将大地图切割成若干个小的矩形图块(瓦片)的技术,每个瓦片代表地图的一部分,通常具有固定的大小(256x256像素)。瓦片地图技术广泛应用于网络地图和地理信息系统(GIS)中,主要目的是提升地图的加载速度和用户体验,在没有网络的情况下实现定位。

瓦片地图下载

使用离线地图下载工具(管理员身份运行)可以进行瓦片下载。
在这里插入图片描述
x、y、z表示了瓦片所位置。
在这里插入图片描述
建议最小从3开始,最大到18即可,右侧的是选择图片保存的目录结构:
在这里插入图片描述
选择路径后开始下载:
在这里插入图片描述
下载完成后再下载路径中按缩放等级保存了瓦片图片:
在这里插入图片描述
图片按层级保存,对应关系如下:
在这里插入图片描述

坐标计算办法

每个瓦片的像素是256*256像素:
在这里插入图片描述
接下来最关键的是了解如何将像素点转换为经纬度坐标点,具体转换算法如下:

#define M_PI		3.14159265358979323846

/************************************************************************
限制n在min和max之间
************************************************************************/
double clip(double n, double min, double max)
{
	n = n<min?min:n;
	n = n>max?max:n;
    return n;
}

/***********************************************************************
px:x坐标像素点
py:y坐标像素点
level:缩放等级
lon:计算的经度结果
lat:计算的纬度结果
墨卡托投影:
    y * 2 * M_PI:将归一化的 y 值映射到 [-π, π] 范围。
    qExp(-y * 2 * M_PI):计算 e 的指数。  Qt数学函数
    qAtan(...):计算反正切值。		    Qt数学函数
    最后通过 90 - (360 * ... / M_PI) 将结果转换为纬度值
***********************************************************************/
void pixelXYToLonLat(int px, int py, int level, double *lon, double *lat)
{
	unsigned int size;
	unsigned int w = 256;
	size = w << level; // 缩放等级*256
    double x = (clip(px, 0, size - 1) / size) - 0.5;  // px归一到(-0.5~0.5)
    double y = 0.5 - (clip(py, 0, size - 1) / size);  // py归一到(-0.5~0.5)
    *lon = x * 360;
    *lat = 90 - (360 * qAtan(qExp(-y * 2 * M_PI)) / M_PI);
}

以这张图为例:
在这里插入图片描述
在这里插入图片描述
使用高德平台抓取的左上角坐标大致是(104.06,30.67):
在这里插入图片描述
抓取的右下角坐标大致是(104.11,30.64):在这里插入图片描述
也就是说这张图大致经度范围是(104.06,104.11),纬度范围大致是(30.67,30.64)。使用如上算法在Qt中验证一下:
在这里插入图片描述
可以看到计算结果基本一致,要在图片中标记点位的话就相当于将GPS模块反馈的经纬度按坐标位置换算成像素点后在图片上画点即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xflySnail

码字不易,鼓励鼓励...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值