R - 链接两组不同的坐标

时间:2016-11-20 12:40:14

标签: r coordinates

我有两个数据集 - 让我们调用它们' plot'(734行)和' station'(62行)。前段时间我发现这个代码应该让我链接每个情节'到最近的车站'基于他们的坐标

数据集有点像这样 - (但没有Long和Lat的标题)

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。

因此,这让我认为代码中的某些内容略有偏差,但只有一行

会感谢对我的代码的任何评论,或者对更简单的连接两个坐标系列方法的建议同样感兴趣 谢谢

1 个答案:

答案 0 :(得分:0)

您的坐标参考系统是什么?这些点在斯堪的纳维亚半岛吗? 无论如何,你可以使用geosphere包并使用distHaversinedistVincentyEllipsoid(更准确地说)获得距离:

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(p_coord@coords, 1, function(x) {
  which.min(distHaversine(p1 = x, p2 = s_coord@coords))
})

输出

[1] 3 2 2 3 3

表示绘图1靠近工作站3,绘图2链接到工作站2,依此类推。