俺是有普普通通有点点憨憨的小秦同学。一整个星期都莫得更新惹!辣么为什么捏?
       因为小秦在整理各种专业课的笔记,偶尔敲敲代码,运动运动,摸摸鱼,时间就这样悄悄过去辣◑﹏◐

所以,这次不来点干货可就真过意不去辣!下面和小秦一起开启《大地测量学》的学习之路叭!

PS:小秦简单介绍后正篇直接从教材的第4章开始

在开始之前先简单介绍下我们用的教材哦。

武大的《大地测量学基础》(第二版)

1.大地测量学学了什么东东?

学习知识的第一步当然是了解我们在学什么那么大地测量学到底要研究虾米捏?~( ̄▽ ̄)~*

我们首先康康书上的高大上定义:

大地测量学(英语 Geodesy,德语 Geodasie)是在一定的时间-空间参考系统中,测量和描绘地球及其他行星体的一门学科。

大地测量学是地球科学中的一个分支,而且是发展最活跃、最具有重要地位的一个分它的最基本的任务是测量和描绘地球并监测其变化,为人类活动提供关于地球等行星体的间信息。因此,从本质上讲,它是一门地球信息学科,既是基础学科,又是应用学科。

这乍一看可把小秦高兴坏了,是不是精通了这门课小秦幼儿园想成为大科学家的理想是不是就能实现了!

理想和现实果然还是差了亿点点

第四章开始关于地球椭球及其数学投影变换的基本理论中繁复的空间解析几何公式推导和拗口难懂的专有名词可真是让人头秃。

不过小秦认为4.1-4.5也就是下面的正篇不过是那些大科学家们试图认识地球这个大胖小子长啥样而想出的各种方法,嘿嘿。

下面小秦将用Python代码的形式定义和计算地球椭球的各个数学要素。

2.确定一个地球椭球——地球椭球的基本参数

我们小学一年级就学过,地球不是个球是个赤道略宽两极略扁的且凹凸不平的球体。那我们想要用数学的方法研究地球就学要将它用规则的数学模型表示。

在控制测量中,用来代表地球的椭球叫做地球椭球(简称椭球),是地球的数学代表。

而具有一定几何参数,定位及定向的用以代表某一地区的大地水准面的椭球叫做参考椭球

地球椭球的长半轴为a短半轴为b,椭球是绕短轴旋转而成的几何体。

包含旋转轴的平面与椭球面相截所得椭圆叫做子午圈,垂直于旋转轴的平面与椭球面相截的圆叫平行圈,赤道是最大的平行圈,南北极是最小的平行圈。

任何椭球都由子午椭圆的五个基本元素决定:

椭球长半轴a、短半轴b、扁率α、第一和第二偏心率。

为满足不同地区的不同建设及研究需要,全球建立了参数各异的椭球参数,来最大程度的使建立的椭球贴近自己所处区域的地球表面。

同时椭球的各个参数间也存在着它们间的数学关系。

我们可以用程序定义保存椭球各要素,形成自己的大地测量计算模块。

下面为第一部分:椭球实例及椭球要素

import math
import numpy as np
from jzh import dfm2hdz as d2h,hdz2dfm as h2d

首先使导入我们要运用的函数库,math库为简单数学计算库,内置三角函数等常用算法。Numpy库为功能强大的数据处理库,小秦的代码将用到Numpy的矩阵计算功能,而jzh(角转换)库是小秦自己编写的测量中常用的各种角度变换功能,此处d2h()为度分秒转弧度制,h2d()则相异。

class Ellipsoid():# 引用类时声明椭球名称,如 Ellipsoid('CGCS2000')def __init__(self,name,a=0,b=0):self.name = nameif name == 'CGCS2000' or name == 'cgcs2000':# 长半轴aself.a = 6378137# 短半轴bself.b = 6356752.3141# 极曲率半径cself.c = self.a**2/self.b# 扁率αself.alpha = (self.a-self.b)/self.a# 第一偏心率e1平方self.e1_2 = (self.a**2 - self.b**2)/self.a**2# 偏心率e2平方self.e2_2 = (self.a**2 - self.b**2)/self.b**2elif name == 'WGS84' or name == 'wgs84':passelse:# 长半轴aself.a = a# 短半轴bself.b = b# 极曲率半径cself.c = self.a**2/self.b# 扁率αself.alpha = (self.a-self.b)/self.a# 第一偏心率e1平方self.e1_2 = (self.a**2 - self.b**2)/self.a**2# 偏心率e2平方self.e2_2 = (self.a**2 - self.b**2)/self.b**2    

这里我们首先创建椭球类Ellipsoid()并初始化参数name椭球名称及可选参数椭球的长短半轴长a和b。

初始化函数可通过name判断椭球类型获取相应的椭球参数,这里pass部分省略了小秦定义的其他椭球的参数。

而最后的else后可通过更改长短半轴和椭球的名称定义自己想要的椭球参数。

Ellipsoid1 = Ellipsoid('CGCS2000')
# Ellipsoid1.a 可获取实例的属性

3. 椭球面上的常用坐标系及相互转换

为了表示椭球面上点的位置,必须要建立相应的坐标系。这里我们介绍几个常用的。

3.1 大地坐标系

哎呀,扫描的图上留下了小秦的笔记

子午面与起始子午面的二面角L叫做大地经度,过P点椭球面的法线Pn与赤道面的夹角B叫做P点的大地经度,当然如果点不在椭球面上就需要再引入参数H——大地高

3.2 大地空间直角坐标系

奇怪的笔记变多了

以椭球中心O点为原点,起始子午面与赤道面交线为X轴赤道面上与X轴正交的方向为Y轴,旋转轴为Z轴。构成右手坐标系。

当然啦,常用的坐标系还有很多:子午面坐标系、地心纬度坐标系、大地极坐标系等等。

这里小秦主要介绍大地坐标系同空间直角坐标系坐标间的相互转换的实现方法(L,B,H)—(X,Y,Z)。

以下为代码实现:

1. 定义LBH,从而转换XYZ

def def_LBH(self,L,B,H=0):self.L = Lself.B = Bself.H = Hself.L_h = d2h(L)self.B_h = d2h(B)self.LB = (L,B)self.LB_h = (d2h(L),d2h(B))# 辅助计算Wself.W = math.sqrt(1 - self.e1_2*(math.sin(d2h(B)))**2)# 辅助计算Vself.V = math.sqrt(1 + self.e2_2*(math.cos(d2h(B)))**2)# 法线长N,同时也是卯酉圈曲率半径Nself.N = self.a/self.W# 空间直角坐标系三个参数self.X = (self.N+H)*math.cos(self.B_h)*math.cos(self.L_h)self.Y = (self.N+H)*math.cos(self.B_h)*math.sin(self.L_h)self.Z = (self.N*(1-self.e1_2)+H)*math.sin(self.B_h)self.XYZ = (self.X,self.Y,self.Z)

小秦这里在椭球类Ellipsoid()下定义了:

defdef_LBH(self,L,B,H=0)函数,H为可选参数获取椭球经纬度坐标

1. 定义XYZ,从而转换LBH

def def_XYZ(self,X,Y,Z):self.X = Xself.Y = Yself.Z = Zself.L_h = math.atan(Y/X)self.L = h2d(math.atan(Y/X))# 迭代求BB1 = Z/math.sqrt(X**2+Y**2)while True:# 辅助计算Wself.W = math.sqrt(1 - self.e1_2*(math.sin(B1))**2)# 法线长/卯酉圈曲率半径Nself.N = self.a/self.WB2 = math.atan((self.Z+self.N*self.e1_2*math.sin(B1)) / math.sqrt(X**2+Y**2))if abs(B2 - B1) <= 0.0000000001:breakB1 = B2self.B_h = B1self.B = h2d(B1)self.LB = (self.L,self.B)

发现了书上的小错误,继工程测量的第二次!

3.4  椭球面上的几种曲率半径

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

1.子午圈曲率半径

2.卯酉圈曲率半径

过椭球面上一点的法线,可作无限个法截面,其中一个与该点子午面相垂直的法面同椭球面相截形成的闭合的圈称为卯西圈。如图4-13中 PEE’即为过P点的卯西圈。卯西圈的曲率半径用N表示。

3.平均曲率

所谓平均率半径R是指经过曲面任意一点所有可能方向上的法截线曲率半径R的算术平均值。

# 辅助计算Wself.W = math.sqrt(1 - self.e1_2*(math.sin(d2h(B)))**2)# 辅助计算Vself.V = math.sqrt(1 + self.e2_2*(math.cos(d2h(B)))**2)

在计算前我们需要先定义辅助计算的参数方便计算

        # 椭球上的几种曲率半径属性# 子午圈曲率半径Mself.M = self.N/self.V**2# 平均曲率半径Rself.R = self.N/self.V# 子午线弧长arc_X:赤道开始到已知纬度点子午线上线段弧长self.arc_X = self.a_list[0]*self.B_h - math.sin(self.B_h)*math.cos(self.B_h)*((self.a_list[1]-self.a_list[2]+self.a_list[3])+(2*self.a_list[2]-16/3*self.a_list[3])*(math.sin(self.B_h))**2 +16/3*self.a_list[3]*(math.sin(self.B_h))**4)# 平行圈半径r,同时也是子午面直角坐标xself.x = self.N*math.cos(self.B_h)# 子午面直角坐标yself.y = self.N*(1-self.e1_2)

而后各曲率的计算都是十分简易的.

小秦这次的学习笔记就更新到这辣,后续还有弧长计算与大地线的知识哦。

当然摄影测量的笔记也不能少,谁让咱们摄影测量那么喜欢用矩阵计算呢,嘿嘿下次再见辣。

可以在公众号阅读小秦的其他学习笔记和分享的学习资料哦。持续更新小秦的GIS学习之旅。

小秦的《大地测量学》笔记1相关推荐

  1. 微信小程序-跟学笔记

    这里是小程序的简单笔记[啥也不懂] 2021/1/7-9/基础篇 第一章 开发流程:申请账号 完善信息 提交代码 审核发布 申请小程序账号的地址:mp.weixin.qq.com 开发者工具 下载 设 ...

  2. 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频

    基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@M_Studio的教学视频) 主要内容:在Sunnyland游戏的设计基础上,新增了物理组件Joint系列.DrawGi ...

  3. 小布老师讲座笔记(五)

    小布老师讲座笔记(五) Archived Redo Log Files ★    Filled online redo log files can be archived ★    There are ...

  4. 小布老师讲座笔记(三)

    小布老师讲座笔记(三) STARTUP  Command Behavior Order of precedence(启动顺序) -spfileSID.ora -Default SPFILE -> ...

  5. 小布老师讲座笔记(四)

    小布老师讲座笔记(四) charpter 4 database After completing this lesson ,you should be able to do the following ...

  6. 计算机操作系统 (第四版汤小丹老师) 复习笔记第一章

    教材为西安电子科技大学 汤小丹老师 第四版 1.1操作系统目标和作用 1.目标 目前存在着多种类型的OS,不同类型的OS,其目标各有所侧重.通常在计算机硬件上配置的OS,其目标有以下几点: 方便性 便 ...

  7. 《变量:看见中国社会小趋势 》读书笔记

    <变量:看见中国社会小趋势 >读书笔记 观察过去30年中国的经济发展,只要去看三个最重要的推动力就 行:工业化.城市化和技术创新 想要判断中国未来的趋势,必须 深入观察工业化.城市化和技术 ...

  8. WIN10 能够正常上网,但是桌面右下角却显示小地球,导致笔记本无法开移动热点

    WIN10 能够正常上网,但是桌面右下角却显示小地球,导致笔记本无法开移动热点 解决方法: 1.右建桌面右下角的小地球,选择[打开"网络和Internet"设置] 2.选择[更改适 ...

  9. 微信小程序开发个人笔记(2)

    微信小程序开发基础笔记 官方文档:微信官方文档 | 微信开放文档 (qq.com) 一.注册等 首先需要注册一下平台(Appid开发者d 和上传管理等都需要) 微信公众平台 (qq.com)(找不到就 ...

最新文章

  1. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )
  2. 汇编语言int 13中断02h功能Demo - 使用emu8086
  3. 文件描述符fd、文件指针fp和vfork()
  4. HDU 1875 畅通工程再续 (最小生成树)
  5. 开启php的ssl,php怎么开启ssl?开启ssl的方法
  6. 如何线程安全地遍历List:Vector、CopyOnWriteArrayList
  7. linux ip地址本地缓存,ip-address – 如何解析组织的IP地址(使用缓存)
  8. Mask-RCNN校验结果计算mAP值
  9. bzoj 4300绝世好题
  10. 桌面云之深信服VMP管理
  11. Python中的abc模块
  12. lte基站信号测试软件,LTE基站的RF一致性测试
  13. 一些常用的软件网络端口协议分类介绍
  14. 线性回归模型-误差分析
  15. Filling the Gaps: Multivariate Time Series Imputation by Graph Neural Networks
  16. JavaScript点名器
  17. python 中在字符串前面加上b,u,r的含义
  18. <Zhuuu_ZZ>Map接口和equals重写
  19. 服务器之间的无线通讯,无线通讯技术之间的比较 - 常见无线通信(数据)传输技术 你知道哪些...
  20. 在ICT圈子找非研发工作

热门文章

  1. 反激变换器变压器设计总结
  2. AS第一次作业:实现APP门户界面框架设计
  3. 第十四届蓝桥杯三月真题刷题训练——第 22 天
  4. 怎么解密PDF文档?这三款解密方法亲测实用
  5. Animate.css动画演示
  6. PKCS 系列很好介绍
  7. java 天干地支_Java-获取年月日对应的天干地支
  8. TP50、TP90、TP99、TP999等TP系列或者95line、99.9line 等line系列的含义
  9. Java随机生成四位数字(四位整数)Random类
  10. 【工具】【docker】前端构建docker镜像文件入门