地理测绘基础知识(3)-观测与遮挡

在上一篇文章中,我们介绍了椭球模型下的一系列基础的坐标操作。本节,介绍观测与遮挡问题。

观测主要用于从观察点A观测大地标准点B,用来解决观测的仰角、方位角与大地坐标系之间的关系。
在这里插入图片描述在没有GPS卫星的时代,为了测量一个位置的坐标,往往会设置多个采样点,不断测角、测距、测气压,“跑断腿”。在现代,这种基于方位俯仰的测量技术已经用的不多了,但方位俯仰的计算还是很有用的。

遮挡问题和观测是同一个问题,解决的是从A点能不能看到B的问题。有时候计算A,B的共视问题时用的很多,尤其是其中一方为高山或者飞机时。

1 根据AB两点位置求取方位角、俯仰角

在 A 点观测B点的方位俯仰,是在A点的ENU坐标下完成的。

ENU
接前文,A的ECEF坐标为 A ⃗ \vec A A , B的ECEF坐标为 B ⃗ \vec B B , 在A的ENU坐标系下的坐标为 B E N U ⃗ \vec{B_{ENU}} BENU ,他们的关系:

要计算站在t位置下,查看任意一点 M 的 ENU 坐标,只要执行运算

B E N U ⃗ T = [ E ⃗ N ⃗ U ⃗ ] × ( B E C E F ⃗ − t ⃗ ) T = R × ( B E C E F ⃗ − t ⃗ ) T \vec {B_{ENU}}^T=\begin{bmatrix} {\vec {E} \\ \vec N \\ \vec U}\end{bmatrix} \times \left ( \vec {B_{ECEF}} - \vec t \right )^T =R \times \left ( \vec {B_{ECEF}} - \vec t \right )^T BENU T=[E N U ]×(BECEF t )T=R×(BECEF t )T

为了行文方便,重复一下R矩阵的特点。上式中坐标都是行向量,转置后是列向量。R的左逆、右逆都是自身的转置,故而两类坐标的转换很方便。如果是求取单位向量,则把 t ⃗ \vec t t 设置为0即可。

R = [ − sin ⁡ θ cos ⁡ θ 0 − sin ⁡ φ c o s θ − sin ⁡ φ sin ⁡ θ cos ⁡ φ cos ⁡ φ c o s θ cos ⁡ φ sin ⁡ θ sin ⁡ φ ] R = \begin{bmatrix} {-\sin \theta} & {\cos \theta} & 0\\ {-\sin \varphi cos\theta} & {-\sin \varphi \sin \theta} & {\cos \varphi} \\ \cos \varphi cos\theta & \cos \varphi \sin \theta & \sin \varphi \end{bmatrix} R= sinθsinφcosθcosφcosθcosθsinφsinθcosφsinθ0cosφsinφ

R × R T = R T × R = I R\times R^T=R^T \times R=I R×RT=RT×R=I

(1) 俯仰El

E l = sin ⁡ − 1 U ∣ B E N U ⃗ ∣ El = \sin^{-1} \frac{U}{\left| \vec {B_{ENU}}\right|} El=sin1 BENU U

(2) 方位Az

A z = tan ⁡ − 1 E N Az = \tan^{-1} \frac{E}{N} Az=tan1NE

(3) 基于大气折射的俯仰修正

对于大气层外的B位置,还需要考虑电磁波的折射问题。我们参考 http://www.zeptomoby.com/satellites/ 中的代码,其修正原理如下:

#ifdef WANT_ATMOSPHERIC_CORRECTIONdouble saveEl = el;// Elevation correction for atmospheric refraction.// Reference:  Astronomical Algorithms by Jean Meeus, pp. 101-104// Note:  Correction is meaningless when apparent elevation is below horizonel += deg2rad((1.02 / tan(deg2rad(rad2deg(el) + 10.3 / (rad2deg(el) + 5.11)))) / 60.0);if (el < 0.0){// Reset to true elevationel = saveEl;}if (el > (PI / 2)){el = (PI / 2);}
#endif

主要接口:

/*!* \brief observe_az_el_range	  计算方位角、俯仰角* \param llaA_in	A点(观察者)* \param llaB_in	B点(被观察者)* \param paz		方位角* \param pel		俯仰角* \param prange	长度* \param ATMOSPHERIC_CORRECTION	大气折射矫正开关* \param rad		经纬度采用弧度* \param latfirst	纬度在第一维度[0]*/
inline void observe_az_el_range(const double llaA_in[/*3*/],const double llaB_in[/*3*/],double * paz,double * pel,double * prange,bool ATMOSPHERIC_CORRECTION = false,const bool rad = false,const bool latfirst = true)

2 可视判断问题

上一节的问题,可以引申出一个命题。如果知道A\B的位置,如何判断A与B之间是不是发生遮挡?同学们有时候会想当然认为只要仰角小于0,就会遮挡。这其实只存在于A位于海面的情况。真实情况要复杂的多,和二者所处的地形有很大关系。

(1) 基于DEM的精确测算方法

一般认为:在海面上,只要A、B两点的连线与当前椭球面没有交点,则可视;在陆地上,只要A、B两点的连线与当前地形没有交点,则可视。在可视关系发生时,仰角完全可以小于0.

EN
此问题可等效为线段A-B与地表数字高程DEM平面有无交点的问题。我们构造参数方程描述线段AB上的任意一点 E,游标 ϱ \varrho ϱ是介于0~1的实数。

E ⃗ = A ⃗ + ( B ⃗ − A ⃗ ) ϱ \vec E=\vec A + (\vec B-\vec A)\varrho E =A +(B A )ϱ

设函数 h = F d e m ( E ⃗ ) h=F_{dem}(\vec E) h=Fdem(E )能够返回ECEF坐标 E ⃗ \vec E E 对应的椭球切投影处的地面高程h(单位),而 H = L L A H ( E ⃗ ) H=LLA_H({\vec E}) H=LLAH(E )返回的是当前位置下的海拔,则可视的条件是:
∀ ϱ ∈ [ 0 , 1 ] : F d e m ( E ⃗ ) < L L A H ( E ⃗ ) \forall {\varrho \in \left [0,1\right ]}: F_{dem}(\vec E)<LLA_{H}(\vec E) ϱ[0,1]:Fdem(E )<LLAH(E )
通俗的说,就是AB连线上的每一点都高于地形。

这种判断,需要有精确的数字高程数据的支持。函数F查询DEM阵列,根据经纬度网格,进行插值,获取高程。此类计算极为耗时,且与DEM数据的品类高度相关,接口上,采用functional对象进行泛化处理。

(2) 基准海平面算法

当采用标准海平面作为表面时,DEM数据恒为0. 该命题变为线段AB与椭球面有无交点的问题。可以使用斜率折半查找的方法,找到距离地面最近的参数 ϱ \varrho ϱ

(3) 引入仰角约束

如果还有附带条件,如试图排除“擦边球”场景,避免线段上某个位置与DEM曲面恰好相切,则可以使用仰角约束。可以要求在路径上任意一点观测A、B两点的仰角均大于 E l El El,如5度或者10度。

要注意的是,引入的约束越多,则计算越慢。

主要接口:

/*!* \brief observe_vis_judge	假设地球没有地形,是光滑的椭球,求取AB是不是可视* \param llaA_in		观测点的经纬度* \param llaB_in		被观测点经纬度* \param minEl			仰角约束,路径上所有地表位置观察A、B的仰角均要高于minEl* \param rad			经纬度采用弧度* \param latfirst		纬度在第一维度[0]* \return				true 是AB可视,false是不可视*/
inline bool observe_vis_judge(const double llaA_in[/*3*/],const double llaB_in[/*3*/],const double minEl = 0,const bool rad = false,const bool latfirst = true)/*!* \brief observe_dem_judge 根据数字高程DEM判断可视关系* \param llaA_in	观测点的经纬度* \param llaB_in   被观测点经纬度* \param dem		数字高程回调,给入纬度(度)、经度(度),返回高度(米)* \param dem_in_meters dem数据的分辨率(米),将使用高于1/2分辨率的精度进行搜索测试* \param minEl			仰角约束,路径上所有地表位置观察A、B的仰角均要高于minEl* \param rad		经纬度采用弧度* \param latfirst	纬度在第一维度[0]* \return			true 是AB可视,false是不可视*/
inline bool observe_dem_judge(const double llaA_in[/*3*/],const double llaB_in[/*3*/],std::function<double (double lat,double lon)> dem,const double dem_in_meters,const double minEl = 0,const bool rad = false,const bool latfirst = true)

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

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

相关文章

Unity小项目__小球吃零食

// Player脚本文件源代码 public class Player : MonoBehaviour {public Rigidbody rd; // 定义了一个刚体组件public int score 0; // 定义了一个计分器public Text scoreText; // 定义了一个文本组件public GameObject winText; // 定义了一个游戏物体用于检验游戏结束// S…

WPF显示初始界面--SplashScreen

WPF显示初始界面–SplashScreen 前言 WPF应用程序的运行速度快&#xff0c;但并不能在瞬间启动。当第一次启动应用程序时&#xff0c;会有一些延迟&#xff0c;因为公共语言运行时&#xff08;CLR&#xff09;首先需要初始化.NET环境&#xff0c;然后启动应用程序。 对于WPF中…

【数据结构与算法】队列

文章目录 一&#xff1a;队列1.1 队列的概念1.2 队列的介绍1.3 队列示意图 二&#xff1a;数组模拟队列2.1 介绍2.2 思路2.3 代码实现2.3.1 定义队列基本信息2.3.2 初始化队列2.3.3 判断队列是否满&#xff0c;是否为空2.3.4 添加数据到队列2.3.5 获取队列数据&#xff0c;出队…

Shell学习笔记之基础部分

Shell基础&#xff1a; 查看操作系统支持的shell&#xff1a; [rootrhel9 ansible]# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bashShell的基本元素&#xff1a; 声明&#xff1a;声明用哪个命令解释器来解释并执行当前脚本文件中的语句&#xff0c;一般写的…

浅谈5G技术会给视频监控行业带来的一些变革情况

5G是第五代移动通信技术&#xff0c;能够提供更高的带宽和更快的传输速度&#xff0c;这将为视频技术的发展带来大量机会。随着5G技术的逐步普及与商用&#xff0c;人们将能够享受到更加流畅的高清视频体验&#xff0c;并且5G技术还拥有更低的延迟和更高的网络容量。这些优势不…

Vue中实现自动匹配搜索框内容 关键字高亮文字显示

实现效果如下: 1.首先需要给输入框进行双向绑定 2.拿到搜索的结果去渲染页面 将返回的结果和搜索的关键字进行比对 如果相同的 就变红 上代码 html部分 //输入框<div class"search"><div class"shuru"><input type"请输入要查询的…

论文阅读——Imperceptible Adversarial Attack via Invertible Neural Networks

Imperceptible Adversarial Attack via Invertible Neural Networks 作者&#xff1a;Zihan Chen, Ziyue Wang, Junjie Huang*, Wentao Zhao, Xiao Liu, Dejian Guan 解决的问题&#xff1a;虽然视觉不可感知性是对抗性示例的理想特性&#xff0c;但传统的对抗性攻击仍然会产…

机器学习:基本介绍

机器学习介绍 Hnad-crafted rules Hand-crafted rules&#xff0c;叫做人设定的规则。那假设今天要设计一个机器人&#xff0c;可以帮忙打开或关掉音乐&#xff0c;那做法可能是这样&#xff1a; 设立一条规则&#xff0c;就是写一段程序。如果输入的句子里面看到**“turn of…

Android开发之性能优化:过渡绘制解决方案

1. 过渡绘制 屏幕上某一像素点在一帧中被重复绘制多次&#xff0c;就是过渡绘制。 下图中多个卡片跌在一起&#xff0c;但是只有第一个卡片是完全可见的。背后的卡片只有部分可见。但是Android系统在绘制时会将下层的卡片进行绘制&#xff0c;接着再将上层的卡片进行绘制。但其…

Vue2-配置脚手架、分析脚手架、render函数、ref属性、props配置项、mixin配置项、scoped样式、插件

&#x1f954;:总有一段付出了没有回报的日子 是在扎根 更多Vue知识请点击——Vue.js VUE2-Day6 配置脚手架脚手架结构render函数vue.js与vue.runtime.xxx.js的区别引入render函数为什么要引入残缺的vue呢&#xff1f; 脚手架默认配置ref属性props配置项传递数据接收数据注意点…

如何利用 EMC 模型解决能源服务提供商的瓶颈

01. 什么是合同能源管理&#xff1f; 合同能源管理(EMC-Energy Management Contract) 是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。&#xff1a;节能服务公司与用能单位以契约形式约定节能项目的节能目标&#xff0c;节能服…

环境与能源创新专题:地级市绿色创新、碳排放与环境规制数据

数据简介&#xff1a;推动绿色发展&#xff0c;促进人与自然和谐共生是重大战略举措。绿色发展强调“绿水青山就是金山银山”&#xff0c;人与自然和谐共生重在正确处理生态环境保护与经济发展的关系。在着力于实现绿色发展的过程中&#xff0c;绿色创新是绿色发展的重要驱动因…

ComponentOne Studio ASP.NET MVC Crack

ComponentOne Studio ASP.NET MVC Crack FlexReport增强功能 添加了对在Microsoft Windows上部署Microsoft Azure的支持。 添加了对显示嵌入字体的支持。 .NET标准版的经典C1PDF(Beta版) GrapeCity的经典C1Pdf库现在提供了基于Microsoft.NET标准的版本。在任何.NET应用程序(包括…

如何让你的图片服务也有类似OSS的图片处理功能

原文链接 前言 有自己机房的公司一般都有一套存储系统用于存储公司的图片、视频、音频、文件等数据&#xff0c;常见的存储系统有以NAS、FASTDFS为代表的传统文件存储&#xff0c;和以Minio为代表的对象存储系统&#xff0c;随着云服务的兴起很多公司逐渐将数据迁移到以阿里云…

【C语言】深度剖析数据在内存中的存储

一、数据类型详细介绍 1、数据类型介绍 &#xff08;1&#xff09;基本的内置类型 //内置类型就是C语言自带的类型char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double …

米尔瑞萨RZ/G2L开发板-02 ffmpeg的使用和RTMP直播

最近不知道是不是熬夜太多&#xff0c;然后记忆力减退了&#xff1f; 因为板子回来以后我就迫不及待的试了一下板子&#xff0c;然后发现板子有SSH&#xff0c;但是并没有ffmpeg&#xff0c;最近总是在玩&#xff0c;然后今天说是把板子还原一下哇&#xff0c;然后把官方的固件…

【Linux操作系统】深入探索Linux进程:创建、共享与管理

进程的创建是Linux系统编程中的重要概念之一。在本节中&#xff0c;我们将介绍进程的创建、获取进程ID和父进程ID、进程共享、exec函数族、wait和waitpid等相关内容。 文章目录 1. 进程的创建1.1 函数原型和返回值1.2 函数示例 2. 获取进程ID和父进程ID2.1 函数原型和返回值2.…

java练习4.快速查找

题目: 数组 arr[6,1,3,7,9,8,5,4,2],用快速排序进行升序排序. import java.util.Random;public class recursionDemo {public static void main(String[] args) {/*快速排序:* 第一轮:以0索引为基准数,确定基准数在数组正确的位置,* 比基准数小的放到左边,比基准数大的放在右边…

Markdown 入门基础

文章目录 Markdown 是什么&#xff1f;为什么要使用 Markdown?工欲善其事&#xff0c;必先利其器Markdown 的工作原理Markdown 有什么用&#xff1f;网站文件资料笔记书籍演示文稿邮件文档 Markdown 方言其它资源 Markdown 是什么&#xff1f; Markdown 是一种轻量级的标记语…

【c语言】通讯录(动态版+文件+背景音乐)含源码

开饭了&#xff0c;之前写的通讯录&#xff0c;是否会有人觉得申请1000人的空间是不是有点用不上呀&#xff0c;怎么才能做到要多少申请多少个呢&#xff1f;&#xff1f;我们学完动态内存管理&#xff0c;和文件的相关操作&#xff0c;终于可以继续完善我们的通讯录了 船新版本…