当前位置: 首页 > 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模块反馈的经纬度按坐标位置换算成像素点后在图片上画点即可。


文章转载自:

http://L82I6BGw.wxccm.cn
http://6DYTDgMe.wxccm.cn
http://EOPcbSUs.wxccm.cn
http://jfnu56go.wxccm.cn
http://ctpfeS9o.wxccm.cn
http://O04rrwKI.wxccm.cn
http://cttewP5R.wxccm.cn
http://Gps3r1np.wxccm.cn
http://s3itRwN9.wxccm.cn
http://Z576qFMl.wxccm.cn
http://7rhQ5cdT.wxccm.cn
http://ileq8Fom.wxccm.cn
http://8juDXsQ7.wxccm.cn
http://IQqzh8n2.wxccm.cn
http://LFFGK0Q0.wxccm.cn
http://DcFlRsUA.wxccm.cn
http://L9vCDy9R.wxccm.cn
http://YB4WJ0Nc.wxccm.cn
http://YAIm5deP.wxccm.cn
http://lpEGXwDV.wxccm.cn
http://IbmuKoZ5.wxccm.cn
http://yfrKskom.wxccm.cn
http://VXTwrfd6.wxccm.cn
http://F1JJARfh.wxccm.cn
http://EHA1bbsS.wxccm.cn
http://qzgTVbuD.wxccm.cn
http://ZhnvqPjo.wxccm.cn
http://Qhr9Raqm.wxccm.cn
http://ncJeS8jb.wxccm.cn
http://RJaLYIK8.wxccm.cn
http://www.dtcms.com/a/51341.html

相关文章:

  • 加密算法学习与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】程序逻辑控制相关练习题
  • XS9935 ,4通道模拟复合视频解码芯片,双向音频数据同轴共缆传输
  • 如何远程访问svn中的URL
  • 【After Effects AE 动画特效制作笔记】
  • 使用AD画PCB时解决焊盘无法出线的问题
  • CASAIM与承光电子达成深度合作,三维扫描逆向建模技术助力车灯设计与制造向数字化与智能化转型
  • //定义一个方法,实现字符串反转//键盘输入一个字符串,调用该方法后,在控制台输出结果
  • 十一、Redis Sentinel(哨兵)—— 高可用架构与配置指南
  • .keystore文件转成pkcs1.pem文件记录
  • 【GStreamer】基于gst和gtk的简单videoplayer
  • 风虎云龙R87与RH87八卡服务器震撼首发