【问题标题】:Calculating Turn Angles given GeoCoordinates计算给定坐标的转角
【发布时间】:2022-08-19 01:03:38
【问题描述】:

例如,就彼此相对接近的地理坐标(经度、纬度)而言,我得到了三个 GPS 点:

p1 = (p1_lon, p1_lat)
p2 = (p2_lon, p2_lat)
p3 = (p3_lon, p3_lat)

假设存在从p1p2(称为段C)的路径,然后是从p2p3(称为段A)的路径。然后假设我画一条从p1p3 的直线(称为段B)。如何计算转角?是在段 C 和 A 之间形成的角度(即相反的段 B)。或者我应该从 180 度(或np.pi 弧度)中减去这个角度以获得转角?

另外,就上述角度的计算而言,我假设三角形的余弦定律是必需的?

B**2 = A**2 + C**2 - 2*A*C*cos(theta)

其中theta 是我们正在求解的角度。所以重新排列方程,我们得到:

theta = np.arccos((B**2 - A**2 - C**2)/(-2*A*C))

但我得到nan。我被引导相信使用余弦或反余弦是有问题的,尤其是对于小距离/角度。我目前正在使用测地线距离,我认为这是测量两个地理坐标之间的距离时最准确的距离。我想我在某处读过关于偏距的信息?但我不确定它是什么以及用于测量距离是否准确。它会帮助计算theta 更容易和更快地避免nans。任何意见是极大的赞赏。谢谢你。

  • 使用测地线库怎么样?例如地理库。无需重新发明轮子。
  • @Thinko 对不起,我不关注。我按照您的建议查看了这个库:geographiclib.sourceforge.io/html/python/code.html,但它似乎只计算距离/测地线距离。但是,我已经在使用 geopy 的方法了。所以测量测地线距离不是问题。我的问题是如何计算转角。
  • 不清楚你想要什么角度。我写了答案,但重新阅读问题,我不确定它是否满足您的需求。能不能给个简单的图?
  • @M.Fire,GeographicLib 不仅测量距离,还计算从一个位置到另一个位置时的初始和最终航向。当您知道航向时,您可以计算转角。

标签: python-3.x geometry geospatial trigonometry angle


【解决方案1】:

你需要计算方位角a21p2p1(注意它和方位角从p1p2不一样!),然后方位角a23p2p3,然后计算转角为

turn = a32 - (a21 + 180)

并根据需要将其更正为0..360-180..180 范围(加/减360)

形成移动 A-B-C 并在 B 后转弯:

要获得方位角,您可以使用适当的 Python geolibrary - 我看到 geolib 包含它。

【讨论】:

    【解决方案2】:

    @MBo 我想我应该首先画一张照片。无论如何,我画了一张我的意思的图片。 theta 这里是当对象从p2 移动到p3 时与线段p1p2 形成的角度。我还想到,更急转弯会导致更大的转弯角度alpha(第二种情况),而第一种情况应该只具有较小的转弯角度,因为与第二种情况相比,转弯并不那么尖锐。所以我相信我们可以通过减去 180 度减去theta 来计算alpha(这是有道理的,因为如果p1p3 在该线上与p2 形成一条直线,即这些点与@ 共线987654334@ 在其他两点的中间,那么物体从p2 直行,所以转角为0 度;如果它们仍然共线,但p1p3 在中间p2p3p1,然后我们会知道物体向后退,因此转弯是 180 度)。这一切都应该在另一边对称地发生。显然,转角只能在 [0,180] 之间。

    然后计算theta 会出现问题。因为这三个点是GPS坐标并且很小,所以角度也可以很小。因此,正如我在网上阅读的一些文章所暗示的那样,应用余弦/反余弦可能是病态的。我不确定这是什么转机。我可以计算这样的角度而不必使用余弦/反余弦吗?当您提到方位角时,您的意思是我必须计算并使用它吗?为什么我们需要它以及它如何帮助解决问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多