使用 argosfilter::distanceTrack 计算 GPS 点之间的距离

Using argosfilter::distanceTrack to calculate distance between GPS points

我对 R 比较陌生,我需要计算 GPS 点之间的距离。我已经通过 argosfilter 包中的 distanceTrack 实现了这一点,但我的数据存在差距。

本应每 10 分钟录制一次,但由于现场问题,最多可能有 5 天的间隔。所以我需要一种方法告诉 R 在两点之间的时间大于 10 分钟时不要计算距离。

我现在的代码非常简单,因为它计算位置序列之间的距离:

lat<-lizard$Lat

lon<-蜥蜴$Lon

distanceTrack(lat,lon)

我认为 if 函数可以工作,但我几乎没有使用过它们,也不知道如何编写它们以便随着时间的推移使用。那么这是一个合适的解决方案还是有更好的方法来做到这一点? 任何关于如何解决这个问题的想法将不胜感激!

执行此操作的一种方法是从数据中筛选出与您想要的不匹配的行。如果我对 distanceTrack 函数是正确的,它需要 N lat / lon 点并将它们减少到这些点之间的 N-1 距离。然后你只需要消除相隔不到十分钟的点,你可以通过过滤数据框很容易地做到这一点。

不知道您的数据到底是什么样子,我在下面创建了一些示例数据,希望与它相似:

## Create a data.frame of 10-minute intervals stored as POSIXct
## You can convert most times to POSIXct using as.POSIXct if they are not already that format
lizard <- data.frame(time=seq(from=as.POSIXct('2015-01-01 00:00:00'), to=as.POSIXct('2015-01-02 00:00:00'), by=10*60))

## Randomly eliminate rows with probability of 15% that a given row is eliminated to create gaps
lizard$keep = runif(nrow(lizard))
lizard <- lizard[lizard$keep <= .85, c('time'), drop=FALSE] ## drop arg used to kepe it a dataframe

## Random lat / lon data:
lizard$Lat = runif(nrow(lizard)) ## runif is random uniform
lizard$Lon = runif(nrow(lizard))

现在我运行计算距离。我们需要在剔除行之前运行计算距离,因为即使行ij之间存在时间间隔(即j$time - i$time > 10 分钟),我们仍然需要行 j 中的值来计算行 jk 之间的行进距离,它们本身可能相隔 10 分钟:

## We initialize to NA; the distance variable for row i will represent the distance between row i-1 and i; 
## row 1 will not have a meaningful value
lizard$distance <- NA 
lizard$distance[2:nrow(lizard)] <- distanceTrack(lizard$Lat, lizard$Lon)

最后我们可以使用布尔值通过比较每行的第 i 行和第 i-1 行来过滤行 2:N:

lizard$isContiguous <- TRUE ## initialize a variable to determine if the data is at 10-min interval
lizard$isContiguous[2:nrow(lizard)] <- (as.numeric(lizard$time[2:nrow(lizard)] - lizard$time[1:nrow(lizard) - 1]) == 10)
lizard <- lizard[lizard$isContiguous, ] ## filter

该数据框中剩余的距离仅为时间间隔为 10 分钟的距离。

有关过滤(或更准确地说,提取或替换)的更多信息,请查看文档 here:

For [-indexing only: i, j, ... can be logical vectors, indicating elements/slices to select