조금 너무 많이 이럴 것 같다.
나는 raster
패키지에서 기능 만 사용이 선 주위에 뭔가를 제안 할 것입니다 :
#load package
library(raster)
# create dataframe
df <- data.frame(id=c('a','b','c'), lat=c(51.50549,37.80248,51.50609), lon= c(-0.0924609,-122.416634,-0.1238904))
를 이제 이러한 위도 및 경도, 나는 지리적으로 투사 문자열을 만드는거야와 지점 위치이기 때문에 좌표계 :
pj <- CRS('+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0')
내가 가장 깨끗한 방법은 당신이 (내가 getPoints
를 호출) 원하는 정확히 않는 작은 함수를 정의하는 것입니다 생각 :
getPoints <- function(df,id){
refpoint <- SpatialPoints(df[df$id==id,3:2],proj4string=pj)
pdist <- pointDistance(refpoint,SpatialPoints(df[,3:2],proj4string=pj),lonlat = T)
return(df[pdist < 5000,])
}
포인트 간 거리를 계산하려면 raster
패키지의 pointDistance
을 사용하고 있습니다. 전/거리를 계산할 때 좌표를 SpatialPoints
및 정의 된 투영 pj
으로 공간 점으로 변환해야합니다. 함수에 id
이 제공된 참조 점 refpoint
을 선택하고 데이터 프레임 df
의 모든 점까지의 거리를 계산합니다. 또한 점 자체에 대한 거리를 계산하므로 pdist <= 500000
조건으로 모든 점을 인덱싱 할 수 있으며 거리가 0이므로 선택한 점도 반환합니다.
줄여서 변수에 refpoint
을 할당하는 것을 피할 수 있었지만 조금 더 명확 해졌습니다.
마지막으로 할 수 편리하게 목록에 내 결과를 저장하고 일반적으로 반복되지 않도록됩니다 지점 위치
for (id_sel in df$id){
print(getPoints(df,id_sel))
}
또는 lapply 사용을 통해 하나 루프 : 위치는 어떤 기능을 수행
lapply(df$id,function(x) getPoints(df,x))
및 최종 결과는 어떻게 생겼습니까? 당신은 [귀하의 질문을 재현 가능하게 만들어야합니다.] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#5963610) 'geosphere :: distHaversine' -이 유용합니다. – alistaire