当前位置: 首页 > news >正文

离线地图显示

瓦片地图是一种将大地图切割成若干个小的矩形图块(瓦片)的技术,每个瓦片代表地图的一部分,通常具有固定的大小(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模块反馈的经纬度按坐标位置换算成像素点后在图片上画点即可。

相关文章:

  • 加密算法学习与SpringBoot实践
  • Kubernetes(K8S)部署 Redis Cluster 集群
  • Web3的技术挑战:去中心化的可扩展性与性能问题
  • 《基于WebGL的matplotlib三维可视化性能调优》——让大规模3D数据流畅运行在浏览器端!
  • PE文件安全分析实战指南:从结构解析到高级威胁狩猎
  • Golang的代码生成工具实践
  • 【AIGC】通义万相 2.1 与蓝耘智算:共绘 AIGC 未来绚丽蓝图
  • Java实战:Spring Boot application.yml配置文件详解
  • 5.训练策略:优化深度学习训练过程的实践指南——大模型开发深度学习理论基础
  • 【C++】list容器的入门及其模拟实现
  • c++为什么支持simd,而java不支持
  • valgrind 检测多线程 bug,检测 并发 bug concurrent bug parallel bug
  • 【gc】家电行业研发部门的阿米巴经营方案
  • DeepSeek 开源周回顾「GitHub 热点速览」
  • 在虚拟机上安装 Hadoop 全攻略
  • LeetCode:1328. 破坏回文串(贪心 Java)
  • 嵌入式硬件发展历程
  • 本地YARN集群部署
  • 【AI论文】Difix3D+: 利用单步扩散模型改进3D重建
  • 【JavaSE-5】程序逻辑控制相关练习题
  • 温州营销网站公司电话/友情链接代码模板
  • 网站前缀带wap的怎么做/百度搜索推广优化师工作内容
  • 鞍山网站建设营销/广州新闻24小时爆料热线
  • 做超市海报的网站/seo短视频入口
  • 怎么建设境外网站/seo关键词优化软件怎么样
  • 做网站构架用什么软件/网店推广方法