我有两个数据集 - 让我们调用它们' 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。
因此,这让我认为代码中的某些内容略有偏差,但只有一行
会感谢对我的代码的任何评论,或者对更简单的连接两个坐标系列方法的建议同样感兴趣 谢谢
答案 0 :(得分:0)
您的坐标参考系统是什么?这些点在斯堪的纳维亚半岛吗?
无论如何,你可以使用geosphere包并使用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(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,依此类推。