Geolocation 根据纬度/经度计算方位变化
我手头有一个包含GPS速度的GPS日志数据集。以下是数据集的外观:Geolocation 根据纬度/经度计算方位变化,geolocation,geospatial,latitude-longitude,Geolocation,Geospatial,Latitude Longitude,我手头有一个包含GPS速度的GPS日志数据集。以下是数据集的外观: id | gpstime | lat | lon | speed --------+------------+------------+------------+--------- 157934 | 1530099776 | 41.1825026 | -8.5996864 | 3.40901 157934 | 1530099777 | 41.1825114 | -8.59972
id | gpstime | lat | lon | speed
--------+------------+------------+------------+---------
157934 | 1530099776 | 41.1825026 | -8.5996864 | 3.40901
157934 | 1530099777 | 41.1825114 | -8.599722 | 3.43062
157934 | 1530099778 | 41.1825233 | -8.5997594 | 3.45739
157934 | 1530099779 | 41.1825374 | -8.5997959 | 3.40025
157934 | 1530099780 | 41.1825519 | -8.5998337 | 3.41673
(5 rows)
现在我想计算相对于正北的每个点的方位变化
但我有这些问题还没有找到答案:
根据我的阅读,我发现了以下公式(如答案所示):
轴承=atan(y,x)
其中x
和y
是数量
y=sin(Blon Alon)*cosBlat
x=cosAlat*sinBlat-sinAlat*cosBlat*cos(Blon-Alon)
分别用于点A
和B
。然后从另一个来源,这个公式,这个公式是这样写的:
Bearing = atan2(y,x)
所以我很困惑,我应该使用哪一个公式
lat
和lon
在传递到数量x
和y
之前,应将其从度转换为弧度。由于我的数据集中lon
的值是负数,我应该取每个值的绝对值吗
我认为对于GPS轨道来说,这是一种过度的杀伤力。如果两点之间的距离不是很大(比如几百米),我认为这个简化的计算就足够了
纬度/经度差异在应用程序中显示
Δlat=111km*(lat1-lat2)
Δlon=111km*cos(纬度)*(lon1-lon2)
因此,轴承将是
轴承=atan(Δlon/Δlat)*180/π
轴承=atan(cos(lat)*(lon1-lon2)/(lat1-lat2))*180/ACOS(-1)
对于lat,请使用lat1或lat2或中间位置(如果您愿意)
lat=(lat1+lat2)/2*π/180=(lat1+lat2)/2*ACOS(-1)/180
考虑Δlat或Δlat可能为0谢谢您的这篇文章。然而,我打算在问题中使用公式,其中轴承是根据lat/lon
(不需要距离)计算的。我打算在差值为0的地方搜索点。在问题中,第二行点与第一行点的方位角应仅使用点lat/lon
。这可以在postgres中完成吗(通过运行一些SQL)?它不使用距离。随着Δlon/Δlat
由于分数减少,111km(1°纬度的距离)消失了。啊,好的,我明白了。这可以在postgres中完成吗(通过运行一些SQL),这样我就可以添加另一个列bearing
?这是一个简单的数学问题,所以应该没有问题。我从未使用过postgres,但您应该在文档中找到语法代码>-这绝对是错误的(除非你现在的位置在赤道上)。