2016-01-12 57 views
0

我有一個位置列表,我想知道最近點之間的距離。我試圖使用distCosine(),但有一個問題。下面是我做的:R中點之間的距離:distCosine()表中的點?

  1. 我的數據,按經緯度

    structure(list(lat = c(53.56478, 53.919724, 54.109047, 54.109047, 
    54.36612, 55.48143, 56.2335, 56.682796, 56.93616, 57.804092, 
    58.82089, 59.297623, 59.335075, 59.907795, 60.125046, 60.274445, 
    60.289204, 60.386665, 60.591167, 64.68329), long = c(14.585611, 
    14.286517, 13.807847, 13.807847, 10.997632, 18.182697, 16.454927, 
    16.564703, 18.221214, 23.258204, 17.84381, 18.172949, 18.126884, 
    23.217615, 20.65724, 26.44062, 27.189545, 19.847534, 28.5585, 
    24.534185)), .Names = c("lat", "long"), row.names = c(2L, 3L, 
    6L, 11L, 1L, 17L, 15L, 20L, 13L, 19L, 7L, 14L, 4L, 5L, 10L, 12L, 
    18L, 9L, 8L, 16L), class = "data.frame") 
    
  2. 排序我試着用下面的計算器的其他討論distCosine(),包括在新的一列從距離最近LAT(這就是爲什麼我通過LAT排序):

數據美元< - 外(SEQ(nrow(數據)), SEQ(nrow(數據)), 矢量化(功能(I,J)distCosine(數據[1],數據[2,])) )

結果不起作用...這是不是每個點的距離...

有沒有更容易的方式使用distCosine爲我的要求?

+0

我其實並不遙遠數據$ a < - distCosine(p1 = pts [-nrow(pts),],p2 = pts [-1,])但是我有一個錯誤,因爲有第一行沒有... – Floni

回答

0

與其他功能明白了:

data<-data[c("long","lat")] 

distHaversine 
t<-distHaversine(p1 = data[-nrow(data),], 
p2 = data[-1,]) a<-0 final<-c(a,t) data$dist<-final 
a<-0 
final<-c(a,t) 
data$dist<-final 
1

我想你只需要更換distCosine(data[1,], data[2,])distCosine(data[i,c("long","lat")], data[j,c("long","lat")])

data <- head(data,5) # smaller example 

data$a<-outer(seq(nrow(data)), 
       seq(nrow(data)), 
       Vectorize(
       function(i, j) distCosine(data[i,c("long","lat")], data[j,c("long","lat")]) 
       ) 
       ) 

結果:

> data 
     lat  long  a.1  a.2  a.3  a.4  a.5 
2 53.56478 14.58561  0.00 44146.92 79251.87 79251.87 251291.54 
3 53.91972 14.28652 44146.92  0.00 37741.81 37741.81 220118.16 
6 54.10905 13.80785 79251.87 37741.81  0.00  0.00 185040.01 
11 54.10905 13.80785 79251.87 37741.81  0.00  0.00 185040.01 
1 54.36612 10.99763 251291.54 220118.16 185040.01 185040.01  0.00 
>