这里的第一次海报。
我正在为桥梁检查ROV octorotor收集的GPS数据进行一些数据分析。我们使用3D扫描激光雷达,立体视觉,INS和其他一些技术,在ROS上运行octorotor。我目前在ublox LEA-6T设置的类似设置中使用Doug Weibel's来收集原始GPS数据,如载波相位,多普勒频移和卫星星历。然后我使用开源项目RTKLIB对本地NOAA CORS站点进行DGPS后处理,以获得cm精度,以便在重建桥梁的3D点云时更好地进行姿态估计。
无论如何,我使用大部分scipy来统计验证我的测试结果 特别是对于这部分,我只是使用:
我一直在研究我的位置协方差,使用geopy的便捷距离函数来抵消我测得的地面实况。通过很少按摩参数,我可以找到矩阵中每个标准偏差元素所描绘的每个方向的距离;北,东,向和三个方向之间。
然而,这些距离是绝对的,不描述方向 说:正面,负面将分别与北向或南向相关。
我可以简单地使用纬度和经度来检测方向的极性,
但我希望能够找到所描述距离的精确点对点轴承,
我相信全局标题的值可能对我目前的其他应用程序有用。
我发现其他人提出了类似的问题
但它似乎假设一个大圆近似
我希望至少使用WGS-84椭球模型,或任何可用于地形的相同模型:
Jump to Calculating distances
任何建议都表示赞赏,
-ruffsl
有兴趣的消息来源:
答案 0 :(得分:8)
使用geographiclib包进行python。这可以计算椭圆体上的距离和方位等等。 (您可以插入路径,测量区域等)例如,在
之后>>> 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}
你可以做到
$(document).ready(function() {
$('#add-btn').click(function(){
var newHtml = '<div>Items: ' + $("#items").val() + ', Quantity: ' + $("#quantity").val() + ', In Order: ' + $("#in-order").val() + ' <div class="btn btn-danger deleteBtn">Delete</div></div>' ;
$("#persisted-items").append(newHtml);
$("#items").val('');
$("#quantity").val('');
});
$(document).on('click', '.deleteBtn', function() {
$(this).parent('div').remove();
});
});
计算从新西兰惠灵顿(41.32S 174.81E)到西班牙萨拉曼卡(40.96N 5.50W)的测地线。距离由s12(19959679米)给出,初始方位角(方位)由azi1(从北方顺时针方向161.067 ...度)给出。
答案 1 :(得分: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
答案 2 :(得分:0)
@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