Web墨卡托投影的原理和公式推导

news2024/11/22 19:10:30

Web墨卡托投影的原理和公式推导

简介

Web墨卡托投影(Web Mercator,EPSG:3857)是一种广泛应用于互联网地图的投影系统。Google地图、天地图等互联网地图通常情况下默认支持两种坐标系统,其一是WGS84地理坐标系,EPSG代码为4326,坐标形式为经纬度,另一种即为以WGS84地理坐标系为基础的墨卡托投影坐标

image-20240615154109351

Web墨卡托投影的WKT表达式如下:

PROJCRS["WGS 84 / Pseudo-Mercator",
    BASEGEOGCRS["WGS 84",
        ENSEMBLE["World Geodetic System 1984 ensemble",
            MEMBER["World Geodetic System 1984 (Transit)"],
            MEMBER["World Geodetic System 1984 (G730)"],
            MEMBER["World Geodetic System 1984 (G873)"],
            MEMBER["World Geodetic System 1984 (G1150)"],
            MEMBER["World Geodetic System 1984 (G1674)"],
            MEMBER["World Geodetic System 1984 (G1762)"],
            MEMBER["World Geodetic System 1984 (G2139)"],
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]],
            ENSEMBLEACCURACY[2.0]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4326]],
    CONVERSION["Popular Visualisation Pseudo-Mercator",
        METHOD["Popular Visualisation Pseudo Mercator",
            ID["EPSG",1024]],
        PARAMETER["Latitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8801]],
        PARAMETER["Longitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["False easting",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["easting (X)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["northing (Y)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["Web mapping and visualisation."],
        AREA["World between 85.06°S and 85.06°N."],
        BBOX[-85.06,-180,85.06,180]],
    ID["EPSG",3857]]

proj表达式如下:

+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs

投影特点

如下图所示,从投影方式来看,Web墨卡托投影属于正轴等角切圆柱投影,该投影方式将投影圆柱竖直放置,使其圆周外轮廓与地球参考球体的赤道相切,此时从参考球体的中心发出投影射线,将地球参考球体投影在圆柱体侧立面上,再将该投影圆柱侧面展开,即得到Web墨卡托投影平面

Web墨卡托投影坐标系的x轴与参考球体的赤道重合,从经度-180°指向180°,y轴与0°经线重合,从纬度-90°指向90°

正如前述所说,Web墨卡托投影以WGS84地理坐标系为基础,该地理坐标系的基准平面为椭球体,但是Web墨卡托投影在进行投影公式推导时将该参考椭球体近似为一个标准球体,这是该投影坐标系的主要不足之一。

img

投影公式推导

images

从纬线圈来看,基于正轴等角切圆柱投影的特点,Web墨卡托投影会将所有的纬线圈投影为大小相同的圆环,该圆环即为投影圆柱的圆周。由于投影圆柱与地球参考球体在赤道处相切,且投影中心与参考球体中心重合,因此赤道处的纬线圈的投影变形为1。假设地球参考球体的半径为 R R R,其它纬度为 ϕ \phi ϕ的纬度圈,在投影前的周长 C 1 = 2 π R cos ⁡ ( ϕ ) C_1=2\pi R\cos(\phi) C1=2πRcos(ϕ),在投影后的周长 C 2 = 2 π R C_2=2\pi R C2=2πR,因此纬线圈的投影变形为 C 2 / C 1 = 1 / cos ⁡ ( ϕ ) C_2/C_1=1/\cos(\phi) C2/C1=1/cos(ϕ),由此可得维度越高,纬线圈即投影坐标系中x轴方向的投影变形越大

投影点的x轴坐标的计算公式如下:
x = λ ⋅ R cos ⁡ ( ϕ ) ⋅ 1 / cos ⁡ ( ϕ ) = λ ⋅ R x=\lambda·R\cos(\phi)·1/\cos(\phi)=\lambda·R x=λRcos(ϕ)1/cos(ϕ)=λR
从经线圈来看,由于Web墨卡托投影属于等角投影,即投影前后方向角度保持不变,投影前后的图形具有相似关系,因此经线圈(y轴方向)的投影变形需要和纬线圈(x轴方向)保持一致,因此Web墨卡托投影的投影变形与经度维度,只与维度有关,为 1 / cos ⁡ ( ϕ ) 1/\cos(\phi) 1/cos(ϕ)

经线圈不同位置的投影变形随着纬度的变化而不同,因此需要通过积分来计算投影点y轴的坐标,公式如下:
d ϕ ⋅ R ⋅ 1 / cos ⁡ ( ϕ ) = d y d\phi·R·1/\cos(\phi)=dy dϕR1/cos(ϕ)=dy

∫ 0 ϕ R / cos ⁡ ( ϕ ) d ϕ = ∫ 0 y d y \int_{0}^{\phi}R/\cos(\phi)d\phi=\int_{0}^{y}dy 0ϕR/cos(ϕ)dϕ=0ydy

y = R ⋅ ln ⁡ [ tan ⁡ ( π 4 + ϕ 2 ) ] y=R·\ln[\tan(\frac{\pi}{4}+\frac{\phi}{2})] y=Rln[tan(4π+2ϕ)]

由投影坐标下(x,y)反算经纬度的公式如下:
λ = x R \lambda = \frac{x}{R} λ=Rx

ϕ = 2 ⋅ arctan ⁡ ( e y R ) − π / 2 \phi=2·\arctan(e^{\frac{y}{R}})-\pi/2 ϕ=2arctan(eRy)π/2

从投影坐标正算公式可知,当纬度为±90°时,此时y的投影坐标为 ± ∞ ±\infty ±,然而在实际处理中,一般将参考球体投影到一个正方形平面,此时
y m a x = x m a x = λ m a x ⋅ R = π ⋅ R y_{max}=x_{max}=\lambda_{max}·R=\pi·R ymax=xmax=λmaxR=πR
反算此时纬度范围
ϕ m a x = 2 ⋅ arctan ⁡ ( e π ⋅ R R ) − π 2 = 1.484 r a d = 85.05 1 ° \phi_{max} = 2·\arctan(e^{\frac{\pi·R}{R}})-\frac{\pi}{2}=1.484rad = 85.051^{°} ϕmax=2arctan(eRπR)2π=1.484rad=85.051°
ϕ m i n = 2 ⋅ arctan ⁡ ( e − π ⋅ R R ) − π 2 = − 1.484 r a d = − 85.05 1 ° \phi_{min} = 2·\arctan(e^{\frac{-\pi·R}{R}})-\frac{\pi}{2}=-1.484rad =- 85.051^{°} ϕmin=2arctan(eRπR)2π=1.484rad=85.051°

转换代码

// 经纬度转Web墨卡托坐标
const lonlatToxy = (lon, lat) => {
	const x = (lon / 180) * Math.PI * EARTHRADIUS;
	const y =
		Math.log(Math.tan(Math.PI / 4 + ((lat / 180) * Math.PI) / 2)) *
		EARTHRADIUS;
	return [x, y];
};
// web墨卡托坐标转经纬度坐标
const xyTolonlat = (x, y) => {
	const lon = x / EARTHRADIUS / Math.PI * 180;
	const lat = (2 * Math.atan(Math.exp(y / EARTHRADIUS)) - Math.PI / 2) / Math.PI * 180;
	return [lon, lat];
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1828517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式面经111题答案汇总(含技术答疑)_嵌入式项目源码分享

111道嵌入式面试题答案汇总专栏链接(承诺免费技术答疑) --> 《嵌入式/C面试题解析大全》 1、简介 本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业工作经验,整理超全面111道嵌入式面试…

CentOS7服务器中安装openCV4.8的教程

参考链接:Centos7环境下cmake3.25的编译与安装 参考链接:Linux安装或者升级cmake,例子为v3.10.2升级到v3.25.0(自己指定版本) 参考链接:Linux安装Opencv(C) 一、下载资源 1.下载cmake3.25.0的压缩包&am…

计算机网络:网络层 - 路由选择协议

计算机网络:网络层 - 路由选择协议 路由器的结构路由选择协议概述自治系统 AS内部网关协议路由信息协议 RIP距离向量算法RIP报文格式收敛问题 开放最短路径优先 OSPF基本工作原理自治系统分区 外部网关协议BGP-4 路由器的结构 如图所示,路由器被分为路由…

Java实现异步开发的方式

1)、继承 Thread 2)、实现 Runnable 接口 3)、实现 Callable 接口 FutureTask (可以拿到返回结果,可以处理异常) 4)、使用线程池 区别:1、2)不能得到返回值 …

AI 定位!GeoSpyAI上传一张图片分析具体位置 不可思议! ! !

🏡作者主页:点击! 🤖常见AI大模型部署:点击! 🤖Ollama部署LLM专栏:点击! ⏰️创作时间:2024年6月16日12点23分 🀄️文章质量:94分…

关于小程序测试账号如何移除

关于小程序测试账号如何移除 有很多小伙伴一开始做开发,一开始用来做测试号,登录微信公众号的时候会提示配置项, 那么如何移除掉呢 https://mp.weixin.qq.com/ 关注「公众平台安全助手」公众号 -> 绑定查询 -> 微信号绑定账号 -> 小程序 -> 点击小程序 -> 解除…

统计完全子字符串

很不错的计数问题&#xff0c;用到了分组循环技巧和滑动窗口 代码的实现方式也非常值得多看 class Solution { public:int f(string s,int k){int res 0;for(int m1;m<26&&k*m<s.size();m){int cnt[27]{};auto check[&](){for(int i0;i<26;i){if(cnt[i]…

打造私密的通信工具,极空间搭建免费开源的电子邮件管理程序『Cypht』

打造私密的通信工具&#xff0c;极空间搭建免费开源的电子邮件管理程序『Cypht』 哈喽小伙伴门好&#xff0c;我是Stark-C~ 说起电子邮件大家都不陌生&#xff0c;哪怕是在当前微信或者QQ已经非常普遍的今天&#xff0c;电子邮件在我们很多人的工作中都充当了重要的通信工具。…

【编程语言】Python平台化为何比Java差?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

第十七章 策略模式

目录 1 策略模式概述 2 策略模式原理 3 策略模式实现 4 策略模式应用实例 5 策略模式总结 1 策略模式概述 策略模式(strategy pattern)的原始定义是&#xff1a;定义一系列算法&#xff0c;将每一个算法封装起来&#xff0c;并使它们可以相互替换。策略模式让算法可以独立…

2.PyQT6程序入门实例

1.第一个程序HelloWorld实现 # conding:utf8from PyQt6.QtWidgets import QApplication, QWidget, QLabel import sysapp QApplication(sys.argv) # 创建一个应用 print("sys.argv&#xff0c;获取项目路径", sys.argv) # 获取参数 print("app.arguments()&qu…

05-5.3.1_1 二叉树的先中后序遍历

&#x1f44b; Hi, I’m Beast Cheng&#x1f440; I’m interested in photography, hiking, landscape…&#x1f331; I’m currently learning python, javascript, kotlin…&#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以订…

vmmare虚拟机没有被分配ip地址问题;NAT模式下一直变化问题

打开任务管理器–>服务–>找到与VM和server相关的服务 发现NAT和DHCP服务被关闭了 尝试启动&#xff0c;报错 尝试一 虚拟网络编辑器点击还原默认设置 尝试二 可以了 ip变化 更改租用时长

【C++】C++入门的杂碎知识点

思维导图大纲&#xff1a; namespac命名空间 什么是namespace命名空间namespace命名空间有什么用 什么是命名空间 namespace命名空间是一种域&#xff0c;它可以将内部的成员隔绝起来。举个例子&#xff0c;我们都知道有全局变量和局部变量&#xff0c;全局变量存在于全局域…

定点数的加减法以及浮点数的表示

加减法运算是计算机中最基本的计算&#xff0c;由于减法可以看成是负值是加法&#xff0c;因此计算机中使用补码表示有符号数之后&#xff0c;可以将减法运算和加法运算合并在一起讨论。 1.补码的加减运算 补码加减运算的规则简单&#xff0c;公式如下(设机器字长为n)&#x…

Spark日志有哪些?

spark.log&#xff1a;记录作业运行日志&#xff0c;包括Spark框架内部日志和用户通过日志接口输出的日志。 executor 启动结束日志&#xff1a; job&#xff0c;stage&#xff0c;task提交结束日志&#xff1a; pmap.log&#xff1a;周期性地截取Driver或Executor的pmap和…

基于SSM+Jsp的列车票务信息管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

多设备互通、开箱即用的私有化笔记软件,极空间部署最强备忘录项目『Memos』

多设备互通、开箱即用的私有化笔记软件&#xff0c;极空间部署最强备忘录项目『Memos』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 手机上的备忘录我想绝大多数的小伙伴都会用到&#xff0c;日常用来记录一下生活中的消费开支清单&#xff0c;或者工作中记录一些重要的任务或项…

欧洲杯“球迷狂欢趴”开启,容声带来“健康养鲜”新理念

6月15日&#xff0c;容声冰箱在深圳举行了异彩纷呈的“欧洲杯养鲜补给站 球迷狂欢趴”系列活动。 容声国内营销总经理韩栋现场发布“以品质领先 为健康养鲜”的主题内容&#xff0c;强调容声将以健康养鲜技术产品的升级迭代&#xff0c;满足用户品质生活需求。 作为有着41年发…

【java分布式计算】分布式计算程序设计基础

期末复习 自留 重点只抓考点 目录 基本技术 SOCKETS网络套接字 多线程 数据序列化 Java I/O流 集合容器 范型 内部类、匿名类、Lambda&#xff08;代码&#xff09; 项目构建管理工具 高级技术 注解&#xff08;代码&#xff09; 反射&#xff08;代码&#xff09;…