用测地坐标计算方位角

问题描述 投票:0回答:1

我正在尝试计算具有由纬度/经度给出的测地坐标的对象的方位以及到不同纬度/经度坐标处的另一个对象的航向。

问题的粗略概述是

enter image description here

其中三角形代表对象一,箭头代表对象一的方向,正方形代表对象二。

我知道这可以使用半正矢公式来完成,如所示,但是如何在同时考虑到球体地球的情况下做到这一点。

mapping coordinates latitude-longitude geodesic-sphere
1个回答
0
投票

我将尝试解释我对你的问题的理解,并提出一个可以用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 度)。

© www.soinside.com 2019 - 2024. All rights reserved.