2016-11-20 3 views
1

У меня есть два набора данных - назовем их «сюжет» (734 строки) и «станциями» (62 строки). Некоторое время назад я выяснил, что этот код должен позволять мне связывать каждый «график» с его ближайшей «станцией» на основе их координат.R - Связывание двух разных наборов координат

набор данных немного похож на этот (но без заголовков длинного и лат)

plot - Long Lat   stations - Long Lat 
     13.2 60.5     14.6 55.4 
     15.4 62.6     15.5 62.9 
     15.6 62.4     16.4 58.9 
     16.5 58.7     19.3 64.0 
     16.5 58.5 


#print results to "results.csv" 
sink("results.csv") 

#identifyl long + lat coords of each data set 
p_coord<-SpatialPoints(plot[,c(1,2)]) 
s_coord<-SpatialPoints(stations[,c(1,2)]) 

#link coordinates 
require(FNN) 
g = get.knnx(coordinates(s_coord), coordinates(p_coord),k=1) 
str(g) 
plot(s_coord_2, col=2, xlim=c(-1e5,6e5)) 
plot(p_coord, add=TRUE) 
segments(coordinates(p_coord)[,1], coordinates(p_coord)[,2], coordinates(s_coord[g$nn.index[,1]])[,1], coordinates(s_coord[g$nn.index[,1]])[,2]) 

#print result in results.csv 
print(g) 

Я так понял, что результаты я получаю немного неправильно - например, участки № 3 и № 4 связаны станции № 4, когда он будет более применимо, что участки # 4 и # 5 связаны на станцию ​​№4.

Так что это заставляет меня думать, что что-то в коде немного смещен, но только на одну строку

был бы признателен за любые замечания по моему коду, или я в равной степени заинтересованы в предложения о более простых способов соединить две серии координаты Thanks

+0

«что участки №4 и №5 связаны с станцией № 4». .. не должна быть станция №3? –

ответ

0

Какова ваша система координат? Эти точки в Скандинавии? Во всяком случае, вы могли бы пойти с пакетом геосферы и использовать distHaversine или distVincentyEllipsoid (точнее), чтобы получить расстояния:

plot <- data.frame(Lon = c(13.2,15.4,15.6,16.5,16.5), 
        Lat = c(60.5,62.6,62.4,58.7,58.5)) 

stations <- data.frame(Lon = c(14.6,15.5,16.4,19.3), 
         Lat = c(55.4,62.9,58.9,64)) 

p_coord <- SpatialPoints(plot[,c(1,2)]) 
s_coord <- SpatialPoints(stations[,c(1,2)]) 

library(geosphere) 
apply([email protected], 1, function(x) { 
    which.min(distHaversine(p1 = x, p2 = [email protected])) 
}) 

Выход будет

[1] 3 2 2 3 3 

, что означает, что участок 1 близок к станции 3, участок 2 связан со станцией 2 и т. д.

Смежные вопросы