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

news2024/10/6 2:27:42

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

观测主要用于从观察点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_CORRECTION
   double 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 horizon
   el += deg2rad((1.02 / 
                 tan(deg2rad(rad2deg(el) + 10.3 / 
                            (rad2deg(el) + 5.11)))) / 60.0);
   if (el < 0.0)
   {
      // Reset to true elevation
      el = 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.coloradmin.cn/o/893705.html

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

相关文章

ipad手写笔一定要买苹果的吗?适合学生党电容笔推荐

暑假接近尾声&#xff0c;不少学生党开始为开学而做准备了。如果你想要一个与iPad相匹配的电容笔&#xff0c;可以买一个Apple Pencil吧。但事实上&#xff0c;这个苹果产品性能比较出色&#xff0c;卖的还是很好的。但是平替电容笔也是个不错的选择&#xff0c;而且价格也很合…

构建LLM应用程序时需要了解的5件事

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 1.幻觉 使用LLM时应注意的主要方面之一是幻觉。在LLM的背景下&#xff0c;幻觉是指产生不真实的&#xff0c;不正确的&#xff0c;无意义的信息。LLM非常有创意&#xff0c;它们可以用于不同的领域&am…

亚马逊如何登录多个买家号?如何防止账号关联?

如果有多买家账号需要登录使用&#xff0c;以下是在同一设备上登录多个买家账号的一般步骤&#xff1a; 1、登出当前账号&#xff1a;如果您已经登录了一个买家账号&#xff0c;首先需要退出该账号。在页面右上角&#xff0c;通常会看到一个"Hello, [您的用户名]"&a…

终端安全无忧!迅软科技助力母婴用品企业保护隐私信息

客户简要介绍 某母婴用品企业是专业的婴幼儿用品综合制造厂商&#xff0c;是总部设在上海&#xff0c;致力于研发集安全性、舒适性、功能性以及环保于一体的产品。 企业的重要诉求 公司内部奶瓶、纸尿裤等产品的销售数据以及新品设计图片要避免外传被竞争对手拿到&#xff0c;需…

Java“牵手”根据关键词搜索(分类搜索)1688商品列表页面数据获取方法,1688API实现批量商品数据抓取示例

1688商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取1688商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问1688商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

yaml语法规则

1.语法规则 大小写敏感属性层级关系使用多行描述&#xff0c;每行结尾使用冒号结束使用缩进表示层级关系&#xff0c;同层级左侧对齐&#xff0c;只允许使用空格&#xff08;不允许 使用Tab键&#xff09;属性值前面添加空格&#xff08;属性名与属性值之间使用冒号空格作为分…

Azure VM上意外禁用NIC如何还原恢复

创建一个windows虚拟机&#xff0c;并远程连接管理员的方式打开powershell 首先查看虚拟网卡&#xff0c;netsh interface show interface 然后禁用虚拟网卡 ,netsh interface set interface Ethernet disable 去Azure虚拟机控制台&#xff0c;打开串行控制台 控制台中键入cmd,…

如何使用 Docker Compose 运行 OSS Wordle 克隆

了解如何使用 Docker Compose 在五分钟内运行您自己的流行 Wordle 克隆实例。您将如何部署 Wordle&#xff1f; Wordle在 2021 年底发布后席卷了互联网。对于许多人来说&#xff0c;这仍然是一种早晨的仪式&#xff0c;与一杯咖啡和一天的开始完美搭配。作为一名 DevOps 工程师…

MongoDB 安装 linux

本文介绍一下MongoDB的安装教程。 系统环境&#xff1a;CentOS7.4 可以用 cat /etc/redhat-release 查看本机的系统版本号 一、MongoDB版本选择 当前最新的版本为7.0&#xff0c;但是由于7.0版本安装需要升级glibc2.25以上,所以这里我暂时不安装该版本。我们选择的是6.0.9版本…

Leetcode每日一题:1388. 3n 块披萨(2023.8.18 C++)

目录 1388. 3n 块披萨 问题描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 1388. 3n 块披萨 问题描述&#xff1a; 给你一个披萨&#xff0c;它由 3n 块不同大小的部分组成&#xff0c;现在你和你的朋友们需要按照如下规则来分披萨&am…

【MT32F006】MT32F006之HT1628驱动LED

本文最后修改时间&#xff1a;2023年03月30日 一、本节简介 本文介绍如何使用MT32F006连接HT1628芯片驱动LED。 二、实验平台 库版本&#xff1a;V1.0.0 编译软件&#xff1a;MDK5.37 硬件平台&#xff1a;MT32F006开发板&#xff08;主芯片MT32F006&#xff09; 仿真器&a…

【实用黑科技】如何 把b站的缓存视频弄到本地——数据恢复软件WinHex 和 音视频转码程序FFmpeg

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;效率…

Mathematica(42)-计算N个数值的和

比如&#xff0c;我们要用Mathematica求得到下面的式子&#xff1a; 这就需要用到一个函数&#xff1a;Sum 具体地&#xff0c;Sum函数的使用形式如下&#xff1a; 因此&#xff0c;按照公式就可以得到下面的结果&#xff1a; 如果&#xff0c;我们想要将求和号也加进去&#…

三肽-32——修复受损肌肤

简介 昼夜节律是自然界最普遍的一种自然现象, 它的存在使生物体的生理、生化、行为等生命现象表现为以24小时为周期的振荡。昼夜节律发生的物质基础是分子计时器, 即昼夜节律生物钟(circadian clock) 。它由一组特异的核心元件组成, 包括CLOCK (Circadian Locomotor Output Cy…

公路桥梁有哪些安全隐患?

在现代社会&#xff0c;公路桥梁作为连接城市、串联交通的重要纽带&#xff0c;扮演着无可替代的角色。然而&#xff0c;我们常常忽视的是&#xff0c;这些高架构筑物也存在着潜在的安全隐患&#xff0c;可能随时影响着交通的畅通和人们的生命财产安全。为了更好地认识和理解这…

基于百度文心大模型创作的实践与谈论

文心概念 百度文心大模型源于产业、服务于产业&#xff0c;是产业级知识增强大模型。百度通过大模型与国产深度学习框架融合发展&#xff0c;打造了自主创新的AI底座&#xff0c;大幅降低了AI开发和应用的门槛&#xff0c;满足真实场景中的应用需求&#xff0c;真正发挥大模型…

chatglm llm实时流api接口及post访问

参考&#xff1a; https://github.com/THUDM/ChatGLM-6B/pull/573/commits/02947052eefe392fd9f9632894e9551a805c6109 https://github.com/THUDM/ChatGLM-6B/pull/573 1、代码&#xff1a; 提前安装&#xff1a; sse_starlette、fastapi python stream_api.pystream_api.p…

Linux:如何挂载Window的共享目录

本文介绍的方法操作简单快捷&#xff0c;实用性强。下面就让小编来带大家学习“Linux下怎么挂载Window中的共享目录”吧! 一、在Window下创建共享目录 1、首先&#xff0c;在Window下创建一个目录作为共享目录&#xff0c;此处创建的目录名为ShareDir 2、右键目录&#xff0c…

创建密码库/创建用户帐户/更新 Ansible 库的密钥/ 配置cron作业

目录 创建密码库 创建用户帐户 更新 Ansible 库的密钥 配置cron作业 创建密码库 按照下方所述&#xff0c;创建一个 Ansible 库来存储用户密码&#xff1a; 库名称为 /home/curtis/ansible/locker.yml 库中含有两个变量&#xff0c;名称如下&#xff1a; pw_developer&#…

LiveCharts 直方图详解,安装和使用,以及常用属性的说明

LiveCharts 直方图详解 LiveCharts 概述安装 LiveCharts 及 如何使用直方图 LineSeries 属性说明综合直方图小例子 LiveCharts 概述 LiveCharts是一个比较漂亮的WPF图表控件&#xff0c;在数据变化时还会有动画切换的效果&#xff0c;并且样式也可以控制。 安装 LiveCharts 及…