我有一个csv文件,包含17,305个池塘的池塘面积和纬度和经度坐标。对于每个池塘,我想确定1公里内所有池塘的坐标。我是R新手,所以我想我可以适应一些最近的邻居代码。我发现这个环中的R预订截止克拉雷:最近邻居R代码的适应性,以确定每个池塘1公里内的池塘位置
x<-runif(100)
y<-runif(100)
par(pty="s")
plot(x,y,pch=16)
distance<-function(x1, y1, x2, y2) sqrt((x2 − x1)^2 + (y2 − y1)^2)
r<-numeric(100)
nn<-numeric(100)
d<-numeric(100)
for (i in 1:100) {
for (k in 1:100) d[k]<-distance(x[i],y[i],x[k],y[k])
r[i]<-min(d[-i])
nn[i]<-which(d==min(d[-i]))
}
for (i in 1:100) lines(c(x[i],x[nn[i]]),c(y[i],y[nn[i]]))
我适应它和使用化石deg.dist函数使用所述半正矢式,而不是使用毕达哥拉斯的。
install.packages("fossil")
library(fossil)
Pond_A<-read.csv("C:\\ PondArea_data\\Pond_areas.csv")
r<-numeric(17305)
nn<-numeric(17305)
d<-numeric(17305)
for (i in 1:17305){
for (k in 1:17305) d[k]<-with(Pond_A,deg.dist(Longitude[i],Latitude[i],Longitude[k],Latitude[k]))
r[i]<-min(d[-i])
nn<-which(d<=1)
}
这似乎给我所有的池塘在1公里的最后一个池塘的身份。但尝试一下,因为我可能无法弄清楚如何为所有的池塘找到答案。如果有人能给我一个解决方案,并且可能解释它为什么有效,我将非常感激。
感谢,
艾丹
你看过'sp'包吗?其中的'spDists'功能应该给你一些容易处理的东西。 – Frank