Geopy:计算GPS航向/方位

2024-05-29 02:59:29 发布

您现在位置:Python中文网/ 问答频道 /正文

第一次张贴在这里。

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

不管怎样,我用了大部分的scipy来统计检验我的测试结果。
特别是这一部分,我只是用:

我一直在研究我的位置协方差与我的测量地面真相偏移使用地质的方便的距离函数。只需对参数稍加修改,我就可以找到矩阵中每个标准差元素所描绘的每个方向的距离;北、东、上和三个方向之间的距离。

但是,这些距离是绝对的,不能描述方向。
说明:正、负分别与向北或向南相关。

我可以简单地用经纬度来探测方向的极性,
但我希望能够找到所描述距离的精确点对点方位,
因为我相信,全局标题的值对于我当前的应用程序以外的其他应用程序是有用的。

我发现其他人也提出了类似的问题
但它似乎是假设一个大圆近似值
我希望至少使用WGS-84椭球模型,或任何可用于地质的相同模型:
Jump to Calculating distances

感谢您的任何建议,
-荷叶边

如果感兴趣,来源:


Tags: 数据orgnumpycomhttp距离wwwscipy
3条回答

两个纬度/经度坐标之间的方位:(纬度1,经度1),(纬度2,经度2)

在下面的代码中,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

@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

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

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.32s174.81E)到西班牙萨拉曼卡(40.96n5.50W)的测地线。距离由s12(19959679米)给出,初始方位角由azi1(161.067米)给出。。。从北顺时针方向旋转)。

相关问题 更多 >

    热门问题