Geopy:计算GPS航向/方位

ruf*_*fsl 6 python gps geo geopy python-3.x

这是第一次海报.

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

无论如何,我使用大部分scipy来统计验证我的测试结果.
特别是对于这部分,我只是使用:

我一直在研究我的位置协方差,使用geopy的便捷距离函数来抵消我测得的地面实况.通过很少按摩参数,我可以找到矩阵中每个标准偏差元素所描绘的每个方向的距离; 北,东,向和三个方向之间.

但是,这些距离是绝对的,不描述方向.
说:正面,负面将分别与北向或南向相关.

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

我发现其他人提出了类似的问题
但它似乎假设一个大圆近似
我更喜欢使用至少WGS-84椭球模型,或任何可用于地理的相同模型:
跳转到计算距离

任何建议都表示赞赏,
-ruffsl

有兴趣的消息来源:

cff*_*ffk 8

对python 使用geographiclib包.这可以计算椭圆体上的距离和方位等等.(您可以插入路径,测量区域等)例如,之后

pip install geographiclib
Run Code Online (Sandbox Code Playgroud)

你可以做

>>> 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}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您提供有关“Geodesic.WGS84.Inverse”的结果集的更多详细信息并实际计算问题所询问的 GPS 航向/方位,将会很有帮助。 (2认同)

BBD*_*Sys 5

@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
Run Code Online (Sandbox Code Playgroud)