【问题标题】:How to calculate intersection coordinate between two given geo coordinates and bearing angle如何计算两个给定地理坐标和方位角之间的交点坐标
【发布时间】:2021-08-04 00:41:35
【问题描述】:

我想计算以下坐标的交点。我能够计算方位角,即这两个坐标之间的航向和距离。但不知道如何计算坐标的交点。

 QGeoCoordinate  sourceCoord(19.999601675,73.726176879);
 QGeoCoordinate destinationCoord(19.999139102,73.725825826);

   distance = 0.06318 km
   bearing angle (heading) 1 to 2 = 215
   bearing angle (heading) 2 to 1 = 35

要计算距离我使用这个公式:

//φ是纬度,λ是经度,R是地球半径

a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)

// 两个坐标之间的距离

c = 2 ⋅ atan2( √a, √(1−a) )

d = R ⋅ c

为了计算方位角(航向),我使用了公式:

θ = atan2( sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ )

如何从方位角和航向计算两个地理坐标的交点?

【问题讨论】:

  • 您是否考虑过转换为墨卡托投影(例如 UTM),然后计算交点,然后恢复为球坐标?
  • 将 (R, φ1, λ1) 转换为 (x1,y1,z1) 并将 (R, φ2, λ2) 转换为 (x2,y2,z2)。平均 (x,y,z) 值。将平均值转换为 (R, φ3, λ3)。不过,您可能需要穿过地球。
  • 我投票结束这个问题,因为它与编程无关
  • 我不太明白你在问什么。 :( 我想我理解线的交点——但不知道什么是“坐标的交点”。你可能是指两条线的交点,从给定方向的两个点(由坐标给出)突出?

标签: c++ c math intersection coordinate-systems


【解决方案1】:

这个问题大部分已经回答了here

如果您假设地球是球形的,您可以执行类似于@chux - Reinstate Monica 建议的操作:

  • 转换为笛卡尔坐标
  • 加点
  • 将结果转换为纬度/经度,忽略半径

在 Python 中,它可能看起来像这样(我去掉了 math.s 以使其更易于阅读):

def midpt(lat1, lng1, lat2, lng2):
    if lat1 == -lat2 and abs(lng1 - lng2) == 180:
        return [0, (radians(lng1) + radians(lng2)) / 2]
    # convert to cartesian
    cart1 = [cos(radians(lat1)) * cos(radians(lng1)),
             cos(radians(lat1)) * sin(radians(lng1)),
             sin(radians(lat1))
             ]
    cart2 = [cos(radians(lat2)) * cos(radians(lng2)),
             cos(radians(lat2)) * sin(radians(lng2)),
             sin(radians(lat2))
             ]
    # add the positions
    pt_sum = [cart1[0] + cart2[0],
              cart1[1] + cart2[1],
              cart1[2] + cart2[2],
              ]
    r = sqrt(pt_sum[0] ** 2 + pt_sum[1] ** 2 + pt_sum[2] ** 2)
    # convert back to lat/lng
    int_lat = degrees(asin(pt_sum[2]/r))
    int_lng = degrees(atan2(pt_sum[1], pt_sum[0]))
    return [int_lat, int_lng]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 2021-08-30
    • 1970-01-01
    • 2011-05-09
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多