我想根据 GPS 轨迹分析行进距离但是当我计算距离时,它总是显得太大。
我使用 python 制作一个 csv 文件,其中包含轨道中所有点的纬度和经度,然后我使用 R 进行分析。数据框如下所示:
| lat| lon| lat.p1| lon.p1| dist_to_prev|
|--------:|--------:|--------:|--------:|------------:|
| 60.62061| 15.66640| 60.62045| 15.66660| 28.103099|
| 60.62045| 15.66660| 60.62037| 15.66662| 8.859034|
| 60.62037| 15.66662| 60.62026| 15.66636| 31.252373|
| 60.62026| 15.66636| 60.62018| 15.66636| 8.574722|
| 60.62018| 15.66636| 60.62010| 15.66650| 17.787905|
| 60.62001| 15.66672| 60.61996| 15.66684| 14.393267|
| 60.61996| 15.66684| 60.61989| 15.66685| 7.584996|
...
我可以在这里发布整个数据框以获得可重复性,它只有 59 行,但我不确定在这里发布大块数据的礼仪?让我知道如何最好地分享它。
lat.next 和 lon.next 只是下面一行的 lat 和 lon。dist_to_prev 使用 geosphere 中的 distm() 计算:
library(geosphere)
library(dplyr)
df$dist_to_prev <- apply(df, 1 , FUN = function (row) {
distm(c(as.numeric(row["lat"]), as.numeric(row["lon"])),
c(as.numeric(row["lat.p1"]), as.numeric(row["lon.p1"])),
fun = distHaversine)})
df %>% filter(dist_to_prev != "NA") %>% summarise(sum(dist_to_prev))
# A tibble: 1 x 1
`sum(dist_to_prev)`
<dbl>
1 1266.
我以 Trailforks 的这条赛道为例,如果你看一下他们的赛道描述,它应该是 787m,而不是我得到的 1266m。这不是这条赛道独有的,而是我看过的所有赛道。当我这样做时,它们都会出现 30-50% 的时间太长。
可能的原因之一是纬度/经度只有 5 个小数位。csv 中有 6 个小数位,但当我在 Rstudio 中打开它时,我只能看到 5 个。我在想它只是格式化以使其更易于阅读,并且“整个”数字在那里但也许不是?纬度/经度的类型为:双精度。
为什么我的距离比我获得 gpx 文件的网站上显示的距离大得多?