我正在尝试计算具有由纬度/经度给出的测地坐标的对象的方位以及到不同纬度/经度坐标处的另一个对象的航向。
问题的粗略概述是
其中三角形代表对象一,箭头代表对象一的方向,正方形代表对象二。
我将尝试解释我对你的问题的理解,并提出一个可以用Python实现的解决方案(看来你在其他项目/主题中使用Python)。
首先:您不是指大地坐标而不是测地坐标吗?请参阅https://en.wikipedia.org/wiki/Geodetic_coordinates
对于大地坐标,有多种方法,但这是最简单的(在我看来)。
我们将使用函数:第一个名为calculate_absolute_bearing_ Degrees_ Between_objects的函数计算两个对象之间的方位角,而不考虑对象的航向。第二个名为calculate_relative_bearing_ Degrees_ Between_objects计算两个对象之间的相对方位。
def calculate_absolute_bearing_degrees_between_objects(latitude1_degrees, longitude1_degrees, latitude2_degrees, longitude2_degrees):
# Convert decimal degrees to radians
latitude1_radians, longitude1_radians, latitude2_radians, longitude2_radians = map(math.radians, [latitude1_degrees, longitude1_degrees, latitude2_degrees, longitude2_degrees])
dLongitude = longitude2_radians - longitude1_radians
x = math.sin(dLongitude) * math.cos(latitude2_radians)
y = math.cos(latitude1_radians) * math.sin(latitude2_radians) - \
math.sin(latitude1_radians) * math.cos(latitude2_radians) * math.cos(dLongitude)
bearing_radians = math.atan2(x, y)
bearing_degrees = math.degrees(bearing_radians)
# Normalize to [0, 360) degrees
bearing_degrees = (bearing_degrees + 360) % 360
return bearing_degrees
其中物体 1 和 2 的坐标分别为(纬度 1_度,经度 1_度)和(纬度 2_度,经度 2_度)。
def calculate_relative_bearing_degrees_between_objects(perceivedBearing, headingObject):
return perceivedBearing - headingObject
其中感知轴承是第一个函数返回的结果,标题对象是问题输入中的标题。
注意:我们假设航向为顺时针正向(向南 180 度)和逆时针负向(向南 -180 度)。