我手边还有一个包含GPS速度的GPS日志数据集。数据集如下所示:
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)
现在,我要计算相对于真北的每个点的bearing
变化。
但是我有这些问题尚未找到答案:
根据我的阅读,我遇到了公式(如this回答:]
Bearing = atan(y,x)
其中x
和y
是数量
y = sin(B A
和B
。然后从另一个来源公式 here编写公式:Bearing = atan2(y,x)
所以我很困惑,应该使用哪个公式? 我认为,对于GPS跟踪,这会太过分了。如果两点之间的距离不大(比如说几百米),我认为这种简化的计算就足够了。lat
和lon
在传递给数量x
和y
之前应先从度数转换为弧度。由于我的数据集中lon
的值为负,我应该取每个的绝对值吗?我手边还有一个包含GPS速度的GPS日志数据集。数据集如下所示:id | gpstime | lat | lon |速度-------- + ------------ + ------------ + -----... 纬度/经度差异是应用程序。
delta_lat = 111km * (lat1 - lat2)
delta_lon = 111km * cos(lat) * (lon1 - lon2)
bearing = atan(delta_lon / delta_lat) * 180/π
= atan(cos(lat) * (lon1 - lon2) / (lat1 - lat2)) * 180/ACOS(-1)
对于经纬度,请使用lat1或lat2或中间的格式,如果您愿意。
lat = (lat1 + lat2)/2 * π/180 = (lat1 + lat2)/2 * ACOS(-1)/180