6

第一次在这里发海报。

我正在对为桥梁检查 ROV 八旋翼收集的 GPS 数据进行一些数据分析。我们使用 3D 扫描激光雷达、立体视觉、INS 和其他一些简洁技术在ROS上运行八旋翼。我目前正在使用ublox LEA-6T,其设置与Doug Weibel 的设置类似,用于收集原始 GPS 数据,如载波相位、多普勒频移和卫星星历。然后我使用一个开源项目RTKLIB对本地NOAA CORS站进行一些 DGPS 后处理,以获得厘米精度,以便在重建桥梁的 3D 点云时更好地进行姿态估计。

无论如何,我使用大部分scipy来统计验证我的测试结果。
不过,专门针对这一部分,我只是在使用:

我一直在使用 geopy 的方便距离函数来研究我的位置协方差与我测量的地面实况的偏移量。几乎没有按摩参数,我可以找到矩阵中每个标准差元素所描绘的每个方向的距离;北、东、上和三个方向之间。

然而,这些距离是绝对的,并不描述方向。
说:正,负将分别与向北或向南相关。

我可以简单地使用纬度和经度来检测方向的极性,
但我希望能够找到所描述距离的精确点对点方位,
因为我相信全局航向的值可能对进一步的应用有用除了我现在的。

我发现其他人提出了类似的问题
,但它似乎假设了一个很好的圆近似
我更喜欢使用至少 WGS-84 椭圆体模型,或者任何可以在 geopy 中使用的相同模型:
跳转到计算距离

任何建议表示赞赏,
-ruffsl

有兴趣的来源:

4

3 回答 3

10

使用geolib包用于 python。这可以计算椭圆体上的距离和方位等等。(您可以插入路径、测量区域等)例如,在

pip install geographiclib

你可以做

>>> from geographiclib.geodesic import Geodesic
>>> Geodesic.WGS84.Inverse(-41.32, 174.81, 40.96, -5.50)
{'lat1': -41.32, 'a12': 179.6197069334283, 's12': 19959679.26735382, 'lat2': 40.96, 'azi2': 18.825195123248392, 'azi1': 161.06766998615882, 'lon1': 174.81, 'lon2': -5.5}

这将计算从新西兰惠灵顿 (41.32S 174.81E) 到西班牙萨拉曼卡 (40.96N 5.50W) 的测地线。距离由 s12(19959679 米)给出,初始方位角(方位角)由 azi1(从北顺时针方向 161.067...度)给出。

于 2015-08-20T20:11:56.390 回答
4

两个纬度/经度坐标之间的方位角:(lat1, lon1), (lat2, lon2)

在下面的代码中,lat1、lon1、lat2、lon2 假定为弧度。
将之前从度数转换为弧度。

dLon = lon2 - lon1;
y = Math.sin(dLon) * Math.cos(lat2);
x = Math.cos(lat1)*Math.sin(lat2) -
        Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
brng = Math.atan2(y, x).toDeg();

方位现在在 -180/180 范围内。

归一化为罗盘方位 (0-360)

if brng < 0: brng+= 360
于 2013-07-15T19:34:28.233 回答
1

@AlexWien 在 Python 中的回答

import math, numpy as np

def get_bearing(lat1,lon1,lat2,lon2):
    dLon = lon2 - lon1;
    y = math.sin(dLon) * math.cos(lat2);
    x = math.cos(lat1)*math.sin(lat2) - math.sin(lat1)*math.cos(lat2)*math.cos(dLon);
    brng = np.rad2deg(math.atan2(y, x));
    if brng < 0: brng+= 360
    return brng
于 2018-11-22T15:27:12.867 回答