时间间隔内半径内点之间的距离

时间:2018-06-15 09:38:31

标签: r time distance spatial ais

数据如下所示:

ID Lat Long Time
1  3   3    00:01
1  3   4    00:02
1  4   4    00:03
2  4   3    00:01
2  4   4    00:02
2  4   5    00:03
3  5   2    00:01
3  5   3    00:02
3  5   4    00:03
4  9   9    00:01
4  9   8    00:02
4  8   8    00:03
5  7   8    00:01
5  8   8    00:02
5  8   9    00:03

我想测量每个给定时间间隔内给定半径内ID彼此远离的距离。我在1657个时间间隔内以1057 ID执行此操作,因此效率非常重要。

测量半径内点之间的距离很重要,因为如果点太远,我就不在乎。我正在尝试测量相对接近的点之间的距离。例如,我不在乎ID 1距离ID 5有多远,但我关心的是ID 4与ID 5的距离。

我正在使用R和sp包。

2 个答案:

答案 0 :(得分:0)

对于我所看到的,会有多次重复的值。因此,我建议只计算一对坐标的距离(即使在df中重复多次)作为起点。您可以过滤数据并合并表。 (我会把它添加为评论,但我还没有声名鹊起)。

第一行是:

#Creating a DF with no repeated coordinates
df2 <- df %>% group_by(Lat,Long) %>% summarise()

# Calculating Distances
Dist <- distm(cbind(df2$Long,df2$Lat))

答案 1 :(得分:0)

使用for循环和nn2最近邻函数求解:

df$withinradius <- vector(length = dim(df)[1])
for (i in 1:dim(df)[1]){
  interact <- ifelse(sum(
    as.data.frame(
      nn2(
        df[i,c(3,2)],
        query = df[
          which(df[i,4] == df$Time &
                  eligible.df[i,1] != df$ID),c(3,2)
          ],
        searchtype = 'radius', radius = 1))[1]) >= 1,
    '01: One or More Within Radius',
    '02: Zero Within Radius')
  df[i,5] <- interact
}