给定一条在地球表面的线,我如何绘制一条垂直于它的线?


9

给定一条在地球表面的线,我如何绘制一条垂直于它的线?

抱歉,这是一个非常简单的问题。我认为这将是一项简单的任务,但事实证明这是违反直觉的。

我从下图中的蓝线开始(请参阅链接-我尚无法上传数据)。我通过计算蓝线(m)的坡度找到一条垂直线,然后绘制另一条坡度为-1 / m的线(绿)。当我在Matlab中绘制线时(使用“图”和“轴相等”),它们看起来像预期的那样垂直。

http://imgur.com/7qMkx

但是,当我将这些线导出到Google Earth(使用KML工具箱)时,它们看起来不再是垂直的(请参见下面的链接;较短的线是上图中的蓝线)。

http://imgur.com/ncJQ7

我知道奇怪的事情发生在曲面上,但是我认为这些线至少应该局部垂直。我怀疑这与Google Earth中的投影有关-特别是网格单元的边长看起来大致相似,而纵向边长为1度,而纬度边长为0.5学位。

因此,总而言之:

  • 寻找垂直线在曲面上有效的方法吗?(即,绘制渐变为-1 / m的线)
  • 在Google Earth图片中,垂直线看起来是否像预期的那样,还是有些奇怪?

更新:

为了提供更多背景信息:我正在查看从飞机上获取的雷达数据。彩色区域是“斯瓦特”,已记录了观察结果。我在上面的说明中开始的蓝线与条幅平行:这是飞机的飞行线(飞机沿大致西南方向移动)。雷达朝左与飞行线正交的方向看。我试图画一条垂直于飞行线的线。这应该是雷达所看的方向,并且应该整齐地割开条幅。如您所见,事实并非如此。

在此处输入图片说明


2
实际上,Google正确地描绘了角度,而您的Matlab图却没有...
笨蛋

谢谢你的回覆。这是否意味着我计算出的线实际上不垂直于原始线?还是说我在Matlab中查看线条的方式有些错误?我在Matlab中使用“等于轴”命令使自己确信线是垂直的,但是我希望这不能正确表示地球的曲率。
Paul Keating 2012年

2
保罗,您的第一个解释是正确的。像直角坐标一样使用(lon,lat)会严重扭曲方向,以至于大部分角度都明显可见。因此,使用笛卡尔公式-1 / m甚至不会使您接近直角,除非在几个幸运的方向上(或在赤道方向上)。要提供另一种方法,这将有助于知道您想要哪种“线”(例如,测地线或菱形线),绘制该线的目的以及需要多长时间。(
较短的

2
顺便说一句,通过阅读我们网站上有关共形投影的一些主题,您可以学到很多有关这些问题的知识。
ub

非常感谢,胡扯。很有意思。我在上面的问题描述中提供了更多上下文。我需要的长度相对较短(如上图所示,条带的宽度是十分之一度),因此对有效近似值的任何建议将不胜感激。也感谢您的链接-我会检查出来的。
保罗·基廷

Answers:


10

一个优雅的原则提供了一个简单的答案:

光滑曲面上的所有点都足够大地平坦。

这意味着在仿射更改坐标后(通常只涉及其中之一的缩放),我们可以使用欧几里得几何公式,例如用于计算距离的勾股定理和用于查找垂直线的负倒数斜率公式。

在球体上的纬度和经度坐标(远离极点,经度变为奇数),我们要做的就是重新调整东西方向,以反映一个接近极点的经度的收缩长度。对于地球的球形模型,收缩是由纬度的余弦给出的。 这仅是情节长宽比的变化,仅此而已。

这适用于延伸范围不超过南北纬度数且不靠近任一极的区域。

因此,您要做的就是:

  1. 将所有经度乘以典型纬度的余弦。

  2. 计算垂直线。

  3. 撤消坐标调整。

例如,假设飞机的航迹使它从(lon,lat)=(-78,40)变为(-79,41)。我们通常将纬度设定在40到41之间,例如40.5。

步骤1 调整后的坐标为(-78 * cos(40.5),40)=(-59.31167,40)和(-79 * cos(40.5),41)=(-60.07207,41)。

步骤2 该问题建议使用负倒数斜率方法进行此操作。这样做是正确的,但是在某些情况下(坡度是无限的)会失败。使用向量算法更通用,更强大。计算方法如下。

飞行路径的方向向量是从开始到结束的位移,

v =  (-60.07207, 41) - (-59.31167, 40)
  =  (-0.7604, 1.0).

顺时针旋转任何矢量(x,y)都将产生(y,-x),而向右垂直的方向为

w = (1.0, 0.7604).

根据毕达哥拉斯定理,此向量的长度是其系数平方和的平方根,

|w| = sqrt(1^2 + 0.7604^2) = 1.256268

比方说,从飞机飞行的起点沿着此向量移动0.2度。开始于(-59.31167,40),位移为0.2 / | w | 次,直到

(-59.31167, 40) + 0.2 / 1.256268 * (1.0, 0.7604) = (-59.15247  40.12106).

步骤3 要撤消调整,请将所有结果点的第一个坐标除以在步骤1中使用的相同余弦值:

(-59.15247/cos(40.5), 40.12106) = (-77.79064, 40.12106)

如果使用1:1的宽高比绘制这些点,则该角度将显示为钝角而不是直角。但是,如果将宽高比更改为1:cos(40.5)(大约4:3),则该角度将正确显示为90度。使用任何共形投影(包括Google的Mercator)绘制点时,角度也将是正确的。


2
这太棒了,胡扯。非常感谢。这是对我要去哪里哪里以及如何解决问题的非常清楚的解释。我最终使用了Matlab的“方位角”和“ reckon”功能来获取垂直线,但是很高兴看到关于如何执行此操作的更详细的第一原理的说明。非常感谢。
保罗·基廷
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.