墨卡托投影实现

article/2025/9/13 21:07:17

又称正轴等角圆柱投影。圆柱投影的一种,由荷兰地图学家墨卡托(G. Mercator)于1569年创拟。为地图投影方法中影响最大的。
设想一个与地轴方向一致的圆柱切于或割于地球,按等角条件将经纬网投影到圆柱面上,将圆柱面展为平面后,得平面经纬线网。投影后经线是一组竖直的等距离平 行直线,纬线是垂直于经线的一组平行直线。各相邻纬线间隔由赤道向两极增大。一点上任何方向的长度比均相等,即没有角度变形,而面积变形显著,随远离标准 纬线而增大。该投影具有等角航线被表示成直线的特性,故广泛用于编制航海图和航空图等。
墨卡托投影在切圆柱投影与割圆柱投影中,最早也是最常用的是切圆柱投影。

 

(http://baike.baidu.com/view/301981.htm)

 

公式参数

 

a -- 椭球体长半轴

b -- 椭球体短半轴

f -- 扁率 (a-b) /a

e -- 第一偏心率  

e’-- 第二偏心率  

N -- 卯酉圈曲率半径

 

R -- 子午圈曲率半径

 

B -- 纬度,L -- 经度,单位弧度(RAD)

 -- 纵直角坐标,  -- 横直角坐标,单位米(M)

 

椭球体参数

我国常用的3 个椭球体参数如下(源自“全球定位系统测量规范 GB/T 18314-2001”):

 

椭球体

长半轴 a(米)

短半轴b(米)

Krassovsky(北京54 采用)

6378245

6356863.0188

IAG 75(西安80 采用)

6378140

6356755.2882

WGS 84

6378137

6356752.3142

 

 

墨卡托投影正反解公式

墨卡托投影正解公式:(B,L)→(X,Y),标准纬度B0,原点纬度 0,原点经度L0

 

墨卡托投影反解公式:(X,Y) →(B,L),标准纬度B0,原点纬度 0,原点经度L0

 

 

公式中EXP 为自然对数底,纬度B 通过迭代计算很快就收敛了。

 

程序实现

 

投影的实现封装于一个类class MercatorProj中。

类中定义若干私有变量,保存相关参数

 

 int __IterativeTimes;      //反向转换程序中的迭代次数
double __IterativeValue;  //反向转换程序中的迭代初始值
double __A;    //椭球体长半轴,米
double __B;    //椭球体短半轴,米
double __B0; //标准纬度,弧度
double __L0; //原点经度,弧度

 

以上参数的设定由如下几个public函数完成

复制代码

//设定__A与__B
void MercatorProj::SetAB(double a, double b)
{if(a<=0||b<=0){return;}__A=a;__B=b;
}
//设定__B0
void MercatorProj::SetB0(double b0)
{if(b0<-PI/2||b0>PI/2){return;}__B0=b0;
}
//设定__L0
void MercatorProj::SetL0(double l0)
{if(l0<-PI||l0>PI){return;}__L0=l0;
}
//构造函数中赋予参数默认值
MercatorProj::MercatorProj()
{__IterativeTimes=10;     //迭代次数为10__IterativeValue=0;        //迭代初始值__B0=0;__L0=0;__A=1;__B=1;
}/*******************************************
投影正向转换程序
double B: 维度,弧度
double L: 经度,弧度
double& X:     纵向直角坐标
double& Y:      横向直角坐标
*******************************************/
int MercatorProj::ToProj(double B, double L, double &X, double &Y)
{double f/*扁率*/,e/*第一偏心率*/,e_/*第二偏心率*/,NB0/*卯酉圈曲率半径*/,K,dtemp;double E=exp(1);if(L<-PI||L>PI||B<-PI/2||B>PI/2){return 1;}if(__A<=0||__B<=0){return 1;}f =(__A-__B)/__A;dtemp=1-(__B/__A)*(__B/__A);if(dtemp<0){return 1;}e= sqrt(dtemp);dtemp=(__A/__B)*(__A/__B)-1;if(dtemp<0){return 1;}e_= sqrt(dtemp);NB0=((__A*__A)/__B)/sqrt(1+e_*e_*cos(__B0)*cos(__B0));K=NB0*cos(__B0);      Y=K*(L-__L0);X=K*log(tan(PI/4+B/2)*pow((1-e*sin(B))/(1+e*sin(B)),e/2));return 0;
}
/*******************************************
投影反向转换程序
double X: 纵向直角坐标
double Y: 横向直角坐标
double& B:     维度,弧度
double& L:     经度,弧度
*******************************************/
int MercatorProj::FromProj(double X, double Y, double& B, double& L)
{double f/*扁率*/,e/*第一偏心率*/,e_/*第二偏心率*/,NB0/*卯酉圈曲率半径*/,K,dtemp;double E=exp(1);if(__A<=0||__B<=0){return 1;}f =(__A-__B)/__A;dtemp=1-(__B/__A)*(__B/__A);if(dtemp<0){return 1;}e= sqrt(dtemp);dtemp=(__A/__B)*(__A/__B)-1;if(dtemp<0){return 1;}e_= sqrt(dtemp);NB0=((__A*__A)/__B)/sqrt(1+e_*e_*cos(__B0)*cos(__B0));K=NB0*cos(__B0);      L=Y/K+__L0;B=__IterativeValue;for(int i=0;i<__IterativeTimes;i++){B=PI/2-2*atan(pow(E,(-X/K))*pow(E,(e/2)*log((1-e*sin(B))/(1+e*sin(B)))));}return 0;
}

复制代码

另需几个常量和函数:

复制代码

//圆周率
const double PI=3.1415926535897932;
//角度到弧度的转换
double DegreeToRad(double degree)
{return PI*((double)degree/(double)180);            
}
//弧度到角度的转换
double RadToDegree(double rad)
{return (180*rad)/PI;            
}测试主函数:double b0,l0;double latS,lgtS,latD,lgtD;b0=30;l0=0;latS=60;lgtS=120;m_mp.SetAB(6378137, 6378245,6378140); // WGS 84m_mp.SetB0(DegreeToRad(b0));m_mp.SetL0(DegreeToRad(l0));m_mp.ToProj(DegreeToRad(latS),DegreeToRad(lgtS),latD,lgtD);cout<< latD<<”:”<< lgtD<<endl;
// 7248377.351067:11578353.630128latS=123456;lgtS=654321;m_mp.FromProj(latS,lgtS,latD,lgtD);latD=RadToDegree(latD);lgtD=RadToDegree(lgtD);cout<< latD<<”:”<< lgtD<<endl;
// 1.288032: 6.781493

复制代码

参考材料: 

1、《常用地图投影转换公式》 青岛海洋地质研究所 戴勤奋

2、百度百科

 

 原文链接:墨卡托投影实现


http://chatgpt.dhexx.cn/article/asFVZAOo.shtml

相关文章

墨卡托投影推导

废话 为啥一堆人都说墨卡托投影是从圆心向圆柱面发射线, 反正我觉得不是那样, 不然公式显然就不对了(也可能是我马虎), 后来去wiki查了一下, 找到了公式的推导. 公式 x = R ( λ − λ 0 ) , y = R ln ⁡ [ tan ⁡ ( π 4 + φ 2 ) ] . {\displaystyle x=R(\lambda -\lambda …

墨卡托投影学习

看下图&#xff1b; 这是超图自带示例&#xff1b;墨卡托坐标系图层的加载&#xff1b; 右下角&#xff0c;看上去数字很大&#xff0c;还有五位小数&#xff0c;的数字&#xff0c;这值就是墨卡托坐标的值&#xff1b; 看一下代码&#xff0c;看不出来是墨卡托坐标系&#x…

墨卡托投影与瓦片地图

目录 一、开胃小知识 二、墨卡托投影 1、什么是墨卡托投影&#xff1f; 2、墨卡托投影的特点 3、墨卡托投影的缺点 三、瓦片地图 1、GIS介绍 2、瓦片地图原理 四、瓦片地图原理---续 1、经纬度 2、投影 3、瓦片 4、瓦片编号 5、关于中国的经纬度 一、开胃小知识 …

墨卡托投影简单介绍

墨卡托投影简单介绍 非洲没有想象的那么小&#xff0c;欧亚大陆也没有看上去那么大&#xff0c;一切都依赖于墨卡托投影。今天就跟小编一起来了解一下墨卡托投影吧。 1 什么是墨卡托投影&#xff1f; 墨卡托(Mercator)投影&#xff0c;又名”等角正轴圆柱投影”&#xff0c;荷…

横轴墨卡托投影参数_横轴墨卡托投影

说明 横轴墨卡托投影也称为高斯-克吕格投影,与墨卡托投影类似,不同之处在于圆柱与沿子午线而非赤道的球体或椭圆体相接触。通过这种方法生成的等角投影不会保持真实的方向。中央经线位于感兴趣区域的中心。这种中心对准方法可以最大程度减少该区域内所有属性的变形。此投影最…

一个小游戏让你彻底弄懂墨卡托投影

什么是墨卡托投影&#xff1f; 什么是墨卡托投影&#xff0c;这个问题我问过别人&#xff0c;同样也有很多人问过我。 受介质和技术的限制&#xff0c;我们平时看到的地图大多是平面的&#xff0c;那么如何将一个三维的地球画在平面上呢。 墨卡托投影就是将三维的地球表示在…

墨卡托投影

目录 一、墨卡托投影基本介绍 二、墨卡托投影由来 三、墨卡托投影的特点 四、墨卡托投影流行的原因 4.1、墨卡托投影对于航行的价值 4.2、墨卡托投影与政治 4.3、Web墨卡托投影 五、墨卡托投影的缺点 一、墨卡托投影基本介绍 墨卡托投影&#xff0c;是正轴等角圆柱投影…

墨卡托投影介绍

一、墨卡托投影 墨卡托投影&#xff0c;又称正轴等角圆柱投影&#xff0c;由荷兰地图学家墨卡托(G.Mercator)于1569年创拟。假设地球被套在一个圆柱中&#xff0c;赤道与圆柱相切&#xff0c;然后在地球中心放一盏灯&#xff0c;把球面上的图形投影到圆柱体上&#xff0c;再把…

Fiddler - 使用 Fiddler 监控本地 HTTP 请求,谷歌浏览器提示“隐私设置错误”

问题如下图所示&#xff0c;无论打开什么常用的网页&#xff0c;都提示这个&#xff0c;一开始以为在 “高级” 里点击 “继续访问” 即可&#xff0c;却没想到连这个按钮都没&#xff0c;而且每个网址访问都这样&#xff0c;想必是 Fiddler 在捣腾&#xff0c;于是想到是否证书…

使用腾讯 CDN,结果网站现在出现您的连接不是私密连接”“,”隐私设置错误”如何解决?

问题&#xff1a; 当配置好腾讯云CDN之后&#xff0c;直接访问主源站可以正常访问&#xff0c;但是当启动CDN加速服务后&#xff0c;就不能访问了。 打开高级看了一下&#xff0c;原来是还没有配置SSL证书。 原因&#xff1a; 网站引用了 https 资源&#xff0c;但没有在 C…

解决隐私权限原因拒审的终极方案. 在用户同意隐私政策前,您的应用获取了用户xx信息

App上架国内市场常会遇到以下原因审核被拒&#xff1a; 您的应用审核未通过。在用户同意隐私政策前&#xff0c;您的应用获取了用户的ANDROID ID&#xff0c;不符合应用市场审核标准。修改建议&#xff1a;请在用户同意隐私政策后&#xff0c;再申请获取用户个人信息及权限。 …

用户隐私保护指引设置~参考案例

文章目录 1. 搜索小程序2. 进入小程序详情3. 更多资料4. 小程序隐私指引5. 具体参考事项 1. 搜索小程序 这里以腾讯文档进行演示 2. 进入小程序详情 3. 更多资料 4. 小程序隐私指引 5. 具体参考事项 以实际的情况为准&#xff0c;这里只是演示

Chrome系浏览器,隐私错误-你的连接不是专用连接

环境 浏览器&#xff1a;Microsoft Edge Dev 92.0.884.2 操作系统&#xff1a;Win10 2004 19041.928 现象 访问不安全不是https的网站&#xff0c;会出现以下警告 解决方案 1.有的网站点开高级后&#xff0c;会出现继续访问的按钮&#xff0c;这种时候直接点击即可。 2.对…

TLS 安全设置未设置为默认设置,这也可能导致此错误。

edge浏览器打开网页时打示“TLS 安全设置未设置为默认设置&#xff0c;这也可能导致此错误。”&#xff0c;如图&#xff1a; 此时可以通过启用TLS功能处理该问题。控制面板-Internet选项-高级。如图&#xff1a; 启用TLS功能后刷新页面或重启浏览器。之后就不会提示之前的报…

Chrome访问HTTPS提示您的连接不是私密连接

谷歌浏览器隐私设置错误 NET::ERR_CERT_AUTHORITY_INVALID 攻击者可能会试图从 xx 窃取您的信息&#xff08;例如&#xff1a;密码、通讯内容或信用卡信息&#xff09;。 谷歌浏览器访问 https 提示您的连接不是私密连接 - 隐私设置错误 如图所示&#xff1a; ​ 点击 继续前…

edge隐私错误“你的连接不是专用连接”解决方案

新电脑自带edge&#xff0c;索性就用edge了。使用过程中发现时不时报错&#xff0c;如下图&#xff1a; 先说我发现的可能凑效的解决方案&#xff08;简单粗暴&#xff09;&#xff1a; 进入edge设置&#xff0c;找到安全性一栏&#xff0c;把这部分功能都关闭&#xff0c;再在…

【错误记录】Google Play 上架报错 ( 对于在 APK 中使用该权限的应用,您必须设置隐私权政策 | 生成并托管 隐私政策 )

文章目录 一、报错信息二、解决方案1、生成隐私政策2、托管隐私政策页面3、Google Play 设置隐私政策 一、报错信息 在 Google Play 中 , 管理并创建内部测试版本 , 上传完毕后 , 检查版本时 , 出现 您的应用所用的 APK&#xff08;版本代码&#xff1a;1&#xff09;会请求以…

Chrome隐私设置错误,您的链接不是私密连接

Chrome浏览器访问https网站时&#xff0c;报&#xff1a; 隐私设置错误&#xff0c;您的链接不是私密连接&#xff0c;服务器证书无效 解决方案 删除Chrome 的 Web Data 配置文件&#xff0c;重启Chrome浏览器 路径&#xff1a;C:\Users\Administrator\AppData\Local\Googl…

关于Google您的连接不是私密连接问题的解决方法 (Chrome 地址栏 Google 搜索错误处理 隐私设置错误)

关于Google您的连接不是私密连接问题的解决方法 &#xff08;Chrome 地址栏 Google 搜索错误处理 隐私设置错误&#xff09; 法一&#xff1a;在谷歌浏览器界面输入“thisisunsafe”&#xff0c;注意不是地址栏输入而是任意的点击键盘就好啦~~不行的话就法二 法二&#xff1a;转…