c++直角坐标系与极坐标系的转换_一篇阅读量高达2百6十多万的关于坐标系和投影的相关知识探讨...

57876d2aebb5853a2ddfafcbfcf02d43.gif

本文转载于CSDN作者rsyaoxin

这是一篇关于坐标和投影的「神文」截止目前浏览量已达2698239

是相关文章中不可打破的神话...

文末有本文作者推荐的

两款坐标转换的小工具下载链接

回想一下,接触遥感专业也有几个年头了,而现在越来越偏离遥感了,突然想着把自己脑中的遥感知识整理出来。首先想到的便是坐标系和投影,我想这个东西困扰着80%以上的测绘、遥感和GIS领域的从业人员吧,经常有人问,我自己曾经也很迷糊,什么大地坐标系啊、地心坐标系啊、高斯投影啊、UTM投影啊,搞得头都大了,可是这玩意又不能不玩,毕竟空间信息是遥感数据的灵魂,如果定位不准影像就只能当风景画看了。好吧,那就啃吧,基础的东西还是要的,经过一番探索,再加上去年专门做过坐标转换一些工作,算是清晰明了些了,在此就把我的一些见解分享给大家,欢迎各位菜鸟和专家前来吐槽。好了,咱们言归正传,开始坐标系探险记。

1、什么是坐标系?

        或许很多人心中明白这个概念,却又不甚明白。什么是坐标系?人们描述空间中的一个点或者一个位置,通常会采用坐标这个概念。可是这个坐标该怎么计算呢?它的参考是谁呢?如果中国定义中南海坐标是(1921,1949,2012),美国佬也定义他们白宫的坐标是(1921,1949,2012),哪天黑马说咱们打它中南海一炮吧,那就可能把他自己烤熟。所以必须要建立一个合理的坐标系(⊙﹏⊙b汗~~,这个理由好牵强啊)。

        坐标系由原点和坐标轴组成。坐标系种类很多,我们大家在数学中想必都学过笛卡尔坐标系、极坐标系、球面坐标系和柱面坐标系吧,在地学领域,用到最多的是平面坐标系、空间直角坐标系(前两者属于笛卡尔坐标系)和球面坐标系。比如说一个点坐标是(-2850017.472,4690744.523,3237959.973)就是指空间直角坐标,而我们经常看到的Google Earth上的点的坐标(37°20′17″N,112°33′20″E)就是指球面坐标。

        测量学上,坐标系怎样定义的呢?地球是一个不规则的类椭球,怎样用严格的数学方式表示它,应该是测绘学家们所追求的高峰。为了表示地球上每一个点的位置,是不是要建立一个统一的世界坐标系呢?建立坐标系是不是要确定坐标原点和坐标轴呢?那怎样建立呢?测量学家们把地球当作一个规则的椭球来处理,这下就好办多了,椭球中心就原点呗,长轴短轴就作为坐标轴,这样一个坐标系就出来了啊。可是有人会问,那这个椭球怎么表示呢?嘛嘛的,我也想问,原来这是科学家们利用天文观测得到的,而且不同的科学家得到的椭球还不一样,比如,一个叫Krasovsky的人搞了个克拉索夫斯基椭球,还有人搞了什么IUGG-1975、WGS-84、GRS80椭球,他们主要特点是长半轴和扁率不同。可是又有人会问(Y的,问题好多啊),搞这么多椭球干嘛,有一个不就行啦。呵呵,我们知道,地球坑坑洼洼的,用严密的椭球来表示肯定有误差,有的国家为了使自己的国家与椭球面吻合(最好大家都站在椭球面上),这样根据各自的情况就定义了不同的参考椭球,比如北京54坐标系就采用了苏联老大哥的克拉索夫斯基椭球。可是问题又来了,怎样才算吻合得好呢?肯定会有人站在椭球面上,有人站在椭球面下,真头疼。此时,测量学家们引入了大地基准面来衡量椭球与大地的吻合度。大地基准面是由大地水准面而来,是指平均海平面延伸到大陆得到的一个封闭曲面。比如,在建立北京54坐标系时,专家们肯定会选择与中国的大地水准面吻合比较好的椭球。此时的椭球称为参考椭球,建立的坐标系称为参心坐标系,我国的北京54和西安80坐标系都是参心坐标系,是一种局部范围的坐标系。然而这种坐标系对于全球定位来说极其不便,误差很大,所以山姆大叔率先针对GPS系统设计了全球大地坐标系WGS-84坐标系统,这时的大地原点不再是参考椭球的中心,而是地球的质心。WGS84椭球体的相关参数和WGS84坐标系的坐标轴指向请参考相关专业书籍。我国现有的国家2000坐标系也是一种全球大地坐标系,其与WGS-84坐标系稍微有点差异。

下面是几种常见坐标系的椭球参数:

8f40e420bebee02922a8702196171327.png

其中北京54坐标系和西安80坐标系是参心坐标系,而WGS-84坐标系与国家2000坐标系是地心坐标系,坐标原点是地球质心。

       好啦,这样大家明白了坐标系的定义了吧,首先,需要定义参考椭球体,有了参考椭球还需要大地基准面(全球大地坐标系就不要了),然后需要定义坐标系原点和坐标轴的指向。这样一个坐标系就建立了,以后找妹子就方便多了,全球定位吧,哈哈!

2、为什么要投影?

      大家会想,有了坐标就行了,为什么还要搞个让人迷糊的投影?呵呵,前面我们讲到的是以椭球体为参考来进行空间定位,一点都不直观,如果哪天你和妹纸约会,妹纸说她在(-2850017.472,4690744.523,3237959.973)或者(112°E,38°N),尼玛坑爹,这到底在哪个国家,离哥哥我有多远啊,不知道啊,不至于拿个尺子去测吧。这时候,泡妞高手们想出了一个办法,把球面投影到一个平面,用一个平面坐标(x,y)来表示地面点的位置,两点之间求距离是不是很容易啊?这时候你会发现那个妹子不就是隔壁那妞嘛,200米不到(囧!哈哈)。当然,投影最大的目的不是方便把妹纸,而是地图。所以投影就是把球面坐标转化为平面坐标,也就是3D到2D的转换。

      投影有很多种,按性质分,比如等角投影,等积投影,等距投影,任意投影等。大家都知道,球面展开成平面,肯定是一个不严密(也可说不完美)的过程,会有不同程度的变形。如何选择呢?比如在航海上,就需要等角投影,如果方向错了就会差很多,我猜如果哥伦布那时知道这些就不会跑到美洲还以为到了印度吧。如果需要丈量面积,那就要选择等积投影了。

3、测量坐标有哪几种表示方式?

      常见的测量坐标包括大地坐标(B、L、H)、空间直角坐标(X、Y、Z)、平面坐标(x、y、H)。具体参考相关教程。

4、坐标转换

       终于讲到重点了,各种坐标怎样转换是大家最关心的。首先有一点要牢记:

       同一参考椭球下,大地坐标与空间直角坐标之间的转换是严密的(数学关系对应),它们与平面坐标的转换是不严密的,需要做投影转换(想想也明白,把球面展成平面那可是难住了好多科学家呀)。而不同参考椭球之间的坐标转换永远都是非严密的。

     坐标转换原理:

  • 同一椭球下的转换

        同一椭球下,大地坐标(B、L、H)与空间直角坐标(X、Y、Z)之间的转换是严密的,其公式为:

bd9d37b1f4d2f3b1ffa0fb23836ee74b.png

         而大地坐标(B、L、H)与空间直角坐标(X、Y、Z)向平面直角坐标的转换属于非严密的,需要进行球面到平面的投影选择,通常将空间直角坐标转换为大地坐标,然后在大地坐标和平面直角坐标之间采用高斯正算和反算公式进行计算。

  • 不同椭球下的转换

        不同参考椭球下的坐标转换实质是基准的转换。如空间定位技术所采用的全球基准与地面网所采用的局部基准间的转换。通常的转换模型有布尔莎-沃尔夫模型和莫洛金斯基模型。这两种模型都常用且非常相似,布尔莎模型在进行全球或者较大范围内较为常用,但是莫洛金斯基模型可以克服布尔莎模型中旋转参数与平移参数相关性高的问题。

        两个坐标系的转换通常有三维七参数模型和二维四参数模型。

        布尔莎模型又称为七参数转换,或者七参数赫尔默特变换。该模型共采用7个参数,分别为三个平移参数(ΔX、ΔY、ΔZ)和三个旋转参数(ωx、 ωy、ωz)和一个尺度参数k。

34ff6d58ba38e2cdfe9bccf912334aa1.png

       上式是一个WGS84下的空间直角坐标转换到CGCS2000下的空间直角坐标的布尔莎模型,有七个未知参数,简单的求解,只需要3个公共点就可以了,如果要得到严密解,就需要更多的公共点进行最小二乘平差解算。而对于大地坐标,可以转成空间直角坐标再解算,也可以直接利用布尔莎模型。

5、遥感制图的投影和坐标系选择

        关于遥感影像的坐标系和投影,大家经常会听到所谓的地理坐标系(Geographic  coordinate  system)和投影坐标系(Projection coordinate system)的概念。打开Arcgis的坐标系文件夹也会发现这两个子文件夹。地理坐标系是以经纬度表示的,是一种球面坐标系,而投影坐标系是米或者千米等为单位的,是一种以xy表示的平面坐标系。下面是Arcgis中两种坐标系的定义:

2e7a29914d09053ac3b19358c3676285.png

(a) 地理坐标系  

29fe99b7f7fb285a1b11e99559efeab2.png

 (b)投影坐标系

        上图中的左图a是WGS-84下的地理坐标系,我们可以看出它定义了一个WGS-84椭球体,然后是WGS84下的基准面。有了Spheroid和Datum就可以使用地理坐标系了。右图b是西安80坐标系下的投影坐标系,投影方式是高斯-克吕格投影。可以看出,它除了Gauss-Kruger投影参数外,还定义了Xian-1980地理坐标系。

   有人会问,为什么投影坐标系要带一个地理坐标系呢?我们知道投影本质就是把球面投影到平面,那么投影就必须定义是用哪个球面坐标系来投影。比如UTM投影坐标系,我们熟知的是WGS84坐标系来投影,其实我们也可以用国家2000坐标系来投影,就我所知,在月球探索过程中,人们也用到了UTM投影,而这时用来投影的坐标系就是月球坐标系了。

我国常用地图投影的选择:

   在我国,大中比例尺(≥1:50万)的地图一般选择高斯-克吕格投影,高斯-克吕格投影有3°和6°分带两种,1:2.5万-1:50万比例尺地形图采用经差6度分带,1:1万比例尺的地形图采用经差3度分带。小比例尺的地图(比如全中国地图)应采用等角正轴割圆锥投影,也就是兰勃特投影(Lambert Conformal Conic),但是小比例尺海图多选择等角正轴圆柱投影,也就是墨卡托投影。另外我们平时下载的遥感影像大都是WGS-84下的地理坐标系或者UTM投影坐标系。

     下面就一个例子具体说下地理坐标系到投影坐标系的转换(投影的选择):

     比如:北京的中心经纬度大致在(117°E,40°N),那么其在北京54投影坐标系下6°分带就应该选择Beijing 1954 GK Zone 20.prj或者Beijing 1954 GK Zone 20N.prj(后者会在横坐标前加上带号),中央经线=带号(比如20)*6-3。而在西安80投影坐标系下6°分带应该选择Xian 1980 GK Zone 20.prj。北京地区的遥感影像的UTM投影一般会选择WGS 1984 UTM Zone 50N,因为Zone为20*6-3的中央经线为117,左114,右120,正好覆盖北京,而东半球要加30(全球360/6共60个Zone)所以是50N,N表示北半球。此外,需要说明的是,跨带投影会造成较大的变形。很多人下载全球的植被图、夜间灯光图等,想要裁剪出自己需要的区域,原始数据往往是WGS84下的地理坐标系,而矢量数据多是UTM或者TM等投影坐标系,这时需要将矢量数据转换到地理坐标系再去裁剪,如果反过来将全球图去投影,会发现变形得很难看。

6、推荐一些好用的坐标转换工具

(1) 坐标转换工具:用过很多坐标转换工具,也自己写过,现在给大家推荐一款:GPS工具箱,发现它很容易用,精度也不错,这是下载地址:在文末。可能大家平时会用的比较多的是Coord这个软件,但是我发现它结果老是不对,下面是几个软件的比较,第一个是GPS工具箱,第二个是我自己写的一个小软件,第三个是Coord,结果明显不对,不知道是不是我下载的Coord有问题。

ac72d3273cb4ae94be4ffa9b9371bd5d.png

230433d386f75f87e07054c5f75de749.png

19eb5fd604d96b413bbe623ca8a08145.png

(2)开源坐标和投影转换库:Proj4。它的功能主要有经纬度坐标与地理坐标的转换,坐标系的转换,包括基准变换等。这是官方网站:http://trac.osgeo.org/proj/,可以下载到源码和文档,源码是C++所写,需要编译才能集成到你的程序使用。

公众号对话框发送

613

获取两款坐标转换工具的下载链接

- END -

现有测绘成果转换到2000国家大地坐标系统指南

2000国家大地坐标系转换技术培训(含DLG,DOM,DEM,DRG转换方法及后处理)

一篇非常详细的坐标系统学习PPT,值得学习!坐标问题不再头疼

墨卡托、高斯-克吕格、UTM...这些投影的小知识你真的知道吗?

0b4edabc653d284e8c3e0313b4faa504.png

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

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

相关文章

query string parameters什么意思_public static void main(String[] args) 是什么意思?(转)...

public static void main(String[] args),是java程序的入口地址,java虚拟机运行程序的时候首先找的就是main方法。一、这里要对main函数讲解一下,参数String[] args是一个字符串数组,接收来自程度序执行时传进来的参数。如果是在控…

b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?

当在使用浩辰CAD制图软件绘制图纸的过程中,经常要绘制由多个坐标点连接成的曲线时,有什么方便快捷的方法吗?那当然是有的。利用EXCEL表格保存数据并与CAD制图软件巧妙地结合起来,就能很容易地画出曲线。下面给大家详细介绍一下吧&…

阿里云服务器购买该如何选择?阿里云服务器购买步骤流程介绍...

很多第一次购买阿里云服务器,不知该如何选择适合自已的服务器。其实购买阿里云服务器,主要是根据自已网站的流量来决定的。如果网站流量不大,一天只有几百ip,一般选择1核cpu,1G内存,1MB带宽就可以用了&…

python 切片_全面解读Python高级特性切片

大家好,欢迎来到Crossin的编程教室!众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串、列表、元组…)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢?切片(slice)就是一种截取索…

读书笔记(06) - 语法基础 - JavaScript高级程序设计

写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了。 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章。对此,笔者换了随…

最近做了一个安装包的安装流程图

最近到做安装包的详细设计。下图是安装包的流程图,如果有什么意见和建议,希望大家给我留言,大家以前讨论 转载于:https://www.cnblogs.com/zengshengping815/archive/2009/04/22/1441319.html

idea tomcat启动成功但是访问方面都是404_IDEA相关配置【集成Tomcatamp;项目部署】...

“知其然知其所以然”始终是Brick我学习新兴技术的出发点,那么咱们来聊聊以下几个问题问题1:在编写完web项目之后,我们怎么才能运行项目呢?--需要部署项目到Tomcat上。问题2:部署项目到Tomcat服务器有多少种方式&#…

用U盘或移动硬盘安装Windows7 (超简单制作Win7安装U盘方法)

转载链接:http://www.iplaysoft.com/win7-usb-dvd-download-tool.html 最近很多人想要安装 Windows7 ,下载回去后的ISO镜像文件很多人都是使用 Nero 或 IMGBurn 等工具刻录成光盘来安装的。但实际上,不需刻盘安装Win7的方法还是有不少的。…

安装pywin32时:ImportError: DLL load failed: %1 不是有效的 Win32 应用程序和 DLL load failed...

问题一:ImportError: DLL load failed: %1 不是有效的 Win32 应用程序 import pywinapi报错:ImportError: DLL load failed: %1 不是有效的 Win32 应用程序 原因:与python版本不对应 pypi官网上下载whl文件,我的python 版本为27 下载第一个后安装 下载文…

pointcut注解_Spring AOP使用指南,详细了解AOP相关注解

Spring AOP 指导教程什么是Spring AOP spring aop可以在spring构建的系统中使用面向切面编程。当然Spring Boot也是基于Spring构建的。使用AOP可以实现诸如事务,日志以及安全校验等通过切面统一完成的任务。他可以通过简单的注解方式实现在方法执行前后来执行你自己…

C# 实现FTP上传与下载

向FTP服务器下载文件的简单实例 Codestring filePath "d:\\"; string fileName "lhking.txt"; //文件下载之后要保存的路径和文件名 FtpWebRequest reqFTP; try { FileStream outputStream …

云栖专辑 | 阿里开发者们的第6个感悟:享受折磨

2015年12月20日,云栖社区上线。2018年12月20日,云栖社区3岁。阿里巴巴常说“晴天修屋顶”。在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备。所以社区特别制作了这个专辑——分享给开发者们20个弥足珍贵的成长…

加密文件忘记密码怎么解密_MyBatis 配置文件 用户密码加密存储

properties配置文件一般是使用properties保存配置文件内容,然后在mybatis配置文件中进行读取在resource文件下新建db.properties文件内容如下# 数据库配置文件 driver com.mysql.cj.jdbc.Driver url jdbc:mysql:// /mybatis username password 然后,接着把文件放入源码包…

科技前沿智能创新 2019北京智能家居 全屋智能博览会

2019北京智能家居大型展览会 2019北京全屋智能家居博览会报道布展:2019年6月26日-27日 展会开幕:2019年6月28日上午9:00时展会交易:2019年6月28日-30日 展会撤展:2019年6月30日下午14:00时 展览会在北京市政…

java 容器_我也来聊聊,JAVA容器与迭代器

java的容器与迭代器是一个老生常谈的话题了。本文旨在与大家分享一些关于双向链表与迭代器的运用小技巧,并希望本篇文章的内容能够在项目中给你带来帮助。Stack与LinkedListStack是一个LIFO(后进先出)的容器。若要在java中定义一个Stack应该怎么办?也许你…

apache目录的访问控制

转载链接&#xff1a;http://blog.sina.com.cn/s/blog_7be8a2150100trml.html 1.根目录的访问控制 DocumentRoot "/var/www/html" <Directory /> Options FollowSymLinks AllowOverride None </Directory> 解释一下&#xff1a; <Dir…

广东高院驳回快播对深圳市场监管局2.6亿罚款案上诉

雷帝网 乐天 12月29日报道据广东高院官方微信消息&#xff0c;广东省高级人民法院对深圳市快播科技有限公司&#xff08;简称快播&#xff09;诉深圳市市场监督管理局&#xff08;简称市场监管局&#xff09;著作权行政处罚纠纷案作出终审宣判&#xff0c;驳回上诉&#xff0c;…

shell 练习3

1、编写脚本/root/bin/createuser.sh&#xff0c;实现如下功能&#xff1a;使用一个用户名做为参数&#xff0c;如果指定参数的用户存在&#xff0c;就显示其存在&#xff0c;否则添加之&#xff1b;显示添加的用户的id号等信息2、编写脚本/root/bin/yesorno.sh&#xff0c;提示…

两个数组结果相减_学点算法(三)——数组归并排序

今天来学习归并排序算法。分而治之归并算法的核心思想是分而治之&#xff0c;就是将大问题转化为小问题&#xff0c;在解决小问题的基础上&#xff0c;再去解决大问题。将这句话套用到排序中&#xff0c;就是将一个大的待排序区间分为小的待排序区间&#xff0c;对小的排序区间…

ASP记数器

这两天有好几个老的ASP网站要改&#xff0c;其中有要求加记数器&#xff0c;为图简单&#xff0c;就用文本文件的形式存储记数。以前用ifream的形式嵌入&#xff0c;不能很好的控制记数器显示的风格&#xff0c;现在改进了一下&#xff0c;可以很好的与嵌入板块风格结合了。把做…