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

1坐标格式转换 ∈ C# 编程笔记

【日志】
2020/6/24 开了此篇博客,准备介绍XYZ、BLH、NEU、高斯投影正反算,搞了一天,预备知识和原理部分差不多了,就差代码了。
2020/6/25 今天回看之前写的代码:wc,这是什么goushi,又臭又长!但是我实在是太懒了,不想在重写了,就简单改下,凑合用吧,毕竟功能还是有的。C# 代码见于源码部分(VIP文章)。

一、预备知识

1. 坐标系简介

我们都知道,我们生活在一个三维的空间当中。现在我们有很多手段来描述空间当中任何一点的准确位置,但是这都得益于坐标系的建立,坐标系是如何建立的呢?下面一起来看一个小故事(来源于百度百科):

1.1 来源

有一天,笛卡尔(1596—1650,法国哲学家、数学家、物理学家)生病卧床,但他头脑一直没有休息,在反复思考一个问题:几何图形是直观的,而代数方程则比较抽象,能不能用几何图形来表示方程呢?这里,关键是如何把组成几何的图形的点和满足方程的每一组“数”挂上钩。他就拼命琢磨。通过什么样的办法、才能把“点”和“数”联系起来。突然,他看见屋顶角上的一只蜘蛛,拉着丝垂了下来,一会儿,蜘蛛又顺着丝爬上去,在上边左右拉丝。

蜘蛛的“表演”,使笛卡尔思路豁然开朗。他想,可以把蜘蛛看做一个点,它在屋子里可以上、下、左、右运动,能不能把蜘蛛的每个位置用一组数确定下来呢?他又想,屋子里相邻的两面墙与地面交出了三条线,如果把地面上的墙角作为起点,把交出来的三条线作为三根数轴,那么空间中任意一点的位置,不是都可以用这三根数轴上找到的有顺序的三个数来表示吗?反过来,任意给一组三个有顺序的数,例如3.2.1,也可以用空间中的一个点 P来表示它们(如图 1)。同样,用一组数(a, b)可以表示平面上的一个点,平面上的一个点也可以用一组二个有顺序的数来表示。于是在蜘蛛的启示下,笛卡尔创建了直角坐标系。
在这里插入图片描述

1.2 其他坐标系

除了可以用上述空间直角坐标系来描述空间中的任意一点位置,还可用球坐标系、柱坐标系 来描述:

1. 球坐标系
在这里插入图片描述
如上图(来源于百度百科)所示,我们首先在空间中建立一个参考点(原点),之后从我们将要描述的那个点引一条直线到原点。这条直线的长度记为r,这条直线在xoy平面的投影与x轴正向的夹角记为 φ \varphi φ,这条直线与z轴正向的夹角记为 θ \theta θ,ok,于是我们也可以用(r, θ \theta θ, φ \varphi φ)这一组数来唯一确定空间中的唯一一点。

1. 球坐标系
在这里插入图片描述
如上图(来源于百度百科)所示,我们还是先在空间中找到一个参考点(原点)将空间直角坐标系建立起来。之后我们从将要描述的那点M向xoy平面引一条垂线交于xoy平面于一点(暂且记为M’)垂线段长度记为z,之后从M’向原点O引一条直线,M’O的长度记为r,M’O与x轴正向的夹角记为 φ \varphi φ。于是我们也可以用(r, φ \varphi φ, z)这一组数来唯一确定空间中的唯一一点。


可以看到,其他坐标系的建立都依托于空间直角坐标系,空间直角坐标系的存在是其他坐标系存在的前提!


2. 几个半径

为了在椭球面上进行控制测量计算,就必须了解椭球面上有关曲线的性质。过椭球面上任意一点可作一条垂直于椭球面的法线,包含这条法线的平面叫做法截面,法截面同椭球面交线叫法截线(或法截弧)。可见,要研究椭球面上曲线的性质,就要研究法截线的性质,而法截线的曲率半径便是一个基本内容。

稍等,为了更好的了解下面几个曲率半径,请看下这几个辅助量:
在这里插入图片描述
下面来看几个曲率半径,后面用到的字母是相同的,就不在赘述了哦~
在这里插入图片描述

3. 几个纬度

在这里插入图片描述
还有一种纬度——地心纬度:地心纬度是纬度的一种。参考椭球上一点与参考椭球中心的连线定义为该点的地心垂线,地心纬度定义为地心垂线与赤道平面的夹角。

三者关系
在这里插入图片描述
三者差异很小,且有 B > u > ϕ B>u>\phi B>u>ϕ

4. XYZ - 地心地固系

上面提到的空间直角坐标系在数学领域是这么个名字,那我们搞测绘的拿来一用就套了个马甲,改头换面成了 地心地固系!

地心地固坐标系(Earth-Centered, Earth-Fixed,简称ECEF)简称地心坐标系,是一种以地心为原点的地固坐标系(也称地球坐标系),是一种笛卡儿坐标系。原点 O (0,0,0)为地球质心,z 轴与地轴平行指向北极点,x 轴指向本初子午线与赤道的交点,y 轴垂直于xoz平面(即东经90度与赤道的交点)构成右手坐标系。
在这里插入图片描述


通俗的讲,就是将空间直角坐标系搬到地球质心,然后让z轴指向北极点,x轴指向本初子午线与赤道的交点,y轴与其构成右手坐标系。


5. BLH - 大地坐标系

在介绍大地坐标系之前,我们首先要搞清楚一个概念:参考椭球。

从古至今,我们的前辈从未放弃过对于自身(人类的起源)和宇宙(宇宙的起源)认识。人类对于地球的形状的认知也逐渐区域完备,现在,我们已经知道,地球是一个不规则的椭球形物体,陆水三七分。这样一个不规则球体,做起研究来超级复杂。数学是几乎是所有学科的基础,数学领域已经将球形研究的很透彻了,所以测绘界前辈就提出了用一个椭球体来最小二乘拟合地球,这样就有了总地球椭球和参考地球椭球之概念。

两者有什么区别呢?从拟合效果来看,总地球椭球是全局最优,参考地球椭球是局部最优。总地球椭球只有一个,它会将整个地球拟合的很好,但是如果我们想研究的区域比如北京吧,它如果用总地球椭球来拟合的话,效果会差很多,所以,就提出来了参考地球椭球,这个参考地球椭球只保证了我用来拟合北京这块地方效果比较好,其他地方不予考虑。

ok,了解了参考椭球,那么我们就看一下大地坐标系的定义:大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系。地面点的位置用大地经度、大地纬度和大地高度表示。大地坐标系的确立包括选择一个椭球、对椭球进行定位和确定大地起算数据。

在这里插入图片描述
教材上的描述:
在这里插入图片描述


大地经度L:过P点的子午面与起始子午面间的夹角。由格林威治子午线起算,向东为正,向西为负。
大地纬度B:在P点的子午面上,P点的法线Pn与赤道面的夹角。由赤道起算,向北为正,向南为负。
大地高H:P点沿参考椭球面法线到参考椭球面的距离。


6. NEU - 站心坐标系

以测站为原点,测站上的法线(垂线)为Z轴方向的坐标系就称为
法线(或垂线)站心坐标系。

  • 垂线站心坐标系:以测站为原点,以测站垂线为Z轴,子午线方向为X轴建立的左手坐标系。
  • 法线站心坐标系:以测站为原点,以测站法线为Z轴,子午线方向为X轴建立的左手坐标系。
    在这里插入图片描述

注意:站心坐标系是左手系!!


7. 高斯投影正反算

高斯投影是 横轴椭圆柱等角投影。所谓横轴指的是投影面的轴线与地球自转轴相垂直,且与某一条经线相切所得的投影。所谓等角指的是投影前后的角度不变形,投影的长度比与方向无关,即某点的长度比是一个常数(又把等角投影称为正形投影)。所谓椭圆柱投影指的是椭圆柱与某一经线相切,将该经线附近区域投影到椭圆柱面上,然后将圆柱或椭圆柱展开成平面。总的来说,想象有一个椭圆柱面横套在地球椭球体外面,并与某一条子午线(此子午线称为中央子午线或轴子午线)相切,椭圆柱的中心轴通过椭球体中心,然后用一定投影方法,将中央子午线两侧各一定经差范围内的地区投影到椭圆柱面上,再将此柱面展开即成为投影面。
在这里插入图片描述
以中央子午线为轴,两边对称划出一定区域作为投影范围,此范围称作投影带。分带时,既要限制长度变形,使其不大于测图误差;带数又不应过多,以减少换带计算工作。我国规定按经差6°和3°进行投影分带。

  1. 6°带: 自0°子午线起每隔经差6°自西向东分带,依次编号1,2,3,…60。我国6°带中央子午线的经度,由73°起每隔6°而至135°,共计11带,带号用n表示,中央子午线的经度用L0表示。
    带号及中央子午线经度的关系:
    L0=6×n-3
    n=L/6+1
  2. 3°带: 自东经1.5°子午线起,每隔3°设立一个投影带, 依次编号为1,2,3, …, 120带;中央子午线经度依次为3°, 6°, 9°, … , 360°。
    带号及中央子午线经度的关系:
    n=L/3(四舍五入)
    L0 =3×n

在这里插入图片描述


我国所在地区全在东半球,6°带带号为13 ~ 23,3°带带号为24 ~ 45


8. 几种椭球参数

椭球类型长轴 a/m短轴 b/m
克拉索夫斯基椭球体6378245.06356863.0187730473
1975年国际椭球体6378140.06356755.2881575287
WGS84椭球体6378137.06356752.3142
CGCS20006378137.06356752.3141

算子午线弧长的公式:

二、程序设计

1. 算法原理

1.1 BLH2XYZ

在这里插入图片描述

1.2 XYZ2BLH

在这里插入图片描述

1.3 XYZ NEU 互转

在这里插入图片描述
在这里插入图片描述

1.4 高斯投影正算

高斯投影正算是用大地坐标(L, B)来推导出高斯平面坐标(x, y)
在这里插入图片描述

1.5 高斯投影反算

高斯投影反算是用高斯平面坐标(x, y)来推导出大地坐标(L, B)
在这里插入图片描述


原理部分只取了冰山一角,更多推导过程还请参看教材!!


2. 源码 - 并不在这里

源码结构体:
在这里插入图片描述
这篇博客耗费了我很多精力,现在已经很长了,看起来太费劲,所以源码就放在另一篇博客(VIP文章哦~)中了。设成VIP文章也是无奈之举,我怕之后有学弟学妹们偷懒+蜂蜜毒药+老师找我喝茶 😨 😨 😨 一般学生党都不会有VIP的,所以…

https://blog.csdn.net/Gou_Hailong/article/details/106960334

引用/参考

[1] 孔祥元,郭际明,刘宗泉编著. 《大地测量学基础》第二版. 武汉大学出版社
[2] 百度百科

【注1】其中的代码也许并不完整,您可以作为伪码参看,或者您可以去我主博客逛逛,也许有意外之喜!
【注2】此篇博客是 C# 编程笔记 的子博客。
【注3】由于博主水平有限,程序可能存在漏洞或bug, 如有发现,请尽快与博主联系!

相关文章:

  • 2坐标转换 四参数/七参数/正形变换 ∈ C# 编程笔记
  • 闭合附和导线近似平差 ∈ C# 编程笔记
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • Matlab 各种画图 ∈ Matlab 使用笔记
  • C#一个解决方案创建多个项目
  • 夜光遥感卫星调研
  • 回归拟合中的基本概念和公式汇编(SSE, MSE, RMSE, RMS, STD, 方差, SSR, SST, R-square, Adjusted_R-squ, 相关度)
  • 立方体相册
  • 中国行政单位划分
  • Matlab 画地图之 m_map
  • 火影手游饰品分解
  • 水准网平差
  • Matlab 双线性内插 缩放矩阵或图像 函数
  • Matlab 求不规则图形的 内切圆和外接圆 函数
  • Matlab 画地图时搞定经纬度注释 函数
  • Bootstrap JS插件Alert源码分析
  • create-react-app做的留言板
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • js算法-归并排序(merge_sort)
  • Sass Day-01
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 程序员最讨厌的9句话,你可有补充?
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端面试题总结
  • 如何利用MongoDB打造TOP榜小程序
  • 用mpvue开发微信小程序
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​学习一下,什么是预包装食品?​
  • ​业务双活的数据切换思路设计(下)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (BFS)hdoj2377-Bus Pass
  • (Git) gitignore基础使用
  • (差分)胡桃爱原石
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (全注解开发)学习Spring-MVC的第三天
  • (一)Java算法:二分查找
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)JAVA中的堆栈
  • (转)Sql Server 保留几位小数的两种做法
  • (转)大道至简,职场上做人做事做管理
  • (转)人的集合论——移山之道
  • ***详解账号泄露:全球约1亿用户已泄露
  • .net core 依赖注入的基本用发
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 中创建支持集合初始化器的类型
  • .NET命令行(CLI)常用命令
  • @AliasFor注解
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [Angular 基础] - 指令(directives)
  • [Asp.net mvc]国际化