2013-08-28 1 views
0

연못 지역 및 위도와 경도가 17,305 개의 연못에 대한 CSV 파일이 있습니다. 각 연못에 대해 1km 이내에있는 모든 연못의 좌표를 확인하고 싶습니다. 나는 초보자이기 때문에 가장 가까운 이웃 코드를 적용 할 수 있다고 생각했다. I는 크로로도 예약 R이 루프를 발견각 연못에 대해 1km 이내의 연못 위치를 식별하는 가장 가까운 이웃 R 코드의 적용

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) 
} 

이것은 마지막 연못에서 1km 떨어진 곳에있는 모든 연못의 정체를 알려줍니다. 그러나 나는 모든 연못에 대한 답을 얻는 방법을 찾지 못했을 수도 있습니다. 누군가가 나에게 해결책을 줄 수 있고 그것이 왜 효과가 있는지 설명하면 매우 감사 할 것입니다.

감사합니다,

에이단

+1

'sp' 패키지를 보았습니까? 그것의'spDists' 함수는 당신에게 작업하기 쉬운 것을 제공해야합니다. – Frank

답변

0

당신은 rgeos 패키지에 gWithinDistance를 사용하여 부울 행렬을 생성 할 수 있습니다. 행/열 값은 sp 객체의 rownames를 나타냅니다. 그런 다음 행렬을 데이터 프레임에 강요하고 sp 객체에 다시 할당 할 수 있습니다. 이 예제에서는 sp 패키지의 meuse 데이터를 사용합니다.

require(sp) 
require(rgeos) 
data(meuse) 
    coordinates(meuse) <- ~x+y 

# Create boolean matrix where TRUE is distance condition is |nnd <= d| TRUE else FALSE 
d=200 
DistMat <- gWithinDistance(meuse, meuse, dist=d, byid=TRUE) 

# Turn self-evaluation values to NA 
diag(DistMat) <- NA 

# Join back to data 
cids <- colnames(DistMat) 
    DistMat <- as.data.frame(DistMat) 
    names(DistMat) <- paste("NID", cids, sep=".") 
     [email protected] <- data.frame([email protected], DistMat) 
     str([email protected]) 
+0

이 답변을 주셔서 감사합니다. 죄송합니다. 답변을 너무 오래 주저했기 때문에 답을 이해하고 적용 할 수 있는지 확인하고 싶었습니다. 위도/경도 좌표를 사용하면 거리가도 단위가되어 Eastings and Northings로 변환해야한다는 것을 깨닫는 것보다 더 오래 걸렸습니다. – user2358636

관련 문제