2017-12-14 46 views
1

분산 데이터를보고 있는데 점 사이의 거리와 점 사이의 각도를 얻고 싶습니다. 지금까지 나는 첫 번째 부분 만 달성 할 수있었습니다. 내가 이런 짓을 한 adehabitatLT 패키지에서 청록색 데이터를 사용하여 :R의 공간 점에서 각도 계산하기

require("adehabitatLT") 
require("sp") 
data("teal") 
teal <- teal[1:10 ,] 
capsd <- SpatialPointsDataFrame(coords = SpatialPoints(coords = 
    teal[, c("x","y")], proj4string = CRS("+proj=longlat +datum=WGS84 
    +ellps=WGS84 +towgs84=0,0,0")), data=teal) 
capdistance <- as.data.frame(pointDistance(capsd)) 

capdistance은 청록색 데이터 세트의 첫 번째 10 점 사이의 거리를 표시하는 10 × 10 dataframe입니다.

capdistance data.frame 비슷한 행렬을 만들려면이 지점 사이의 각도를 계산하는 방법을 아는 사람 있습니까? 나는 수색했지만, 지금까지 나는 두 세트의 위치 사이의 각도를 계산하는 것을 발견하지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

그래서 편집

내가 주위를 찾고있다과는 지구권 패키지에서 베어링 기능이 유용 할 것으로 보인다,하지만 난 (적어도) 단계 떨어진이 모든 방법을 작업에서 여전히입니다 를 통해 :

require("geosphere") 
capbearing1 <- bearing(capsd[1:10 ,], capsd[1 ,]) 
capbearing2 <- bearing(capsd[1:10 ,], capsd[2 ,]) 

나는 열 개 목록 모두 10 점 (자체와 구 개 등)를 기준으로 10 점 중 하나의 각도를주고 각각을 달성하기 위해이 열 번 반복 할 수; 그러나 나는 이것을 한 번에 하나의 매트릭스로 열 개의리스트 전체를 매끄럽게 조작하는 것이 정말로 좋을 것이다. 다시, 어떤 도움이 매우 감사합니다.

cygps는 단일 영역에서 UTM을 사용하고 데이터 포인트가 제한되어 있기 때문에 좋은 코드를 제공하므로 이러한 매개 변수가있는 경우 시도해보십시오.

답변

0
foo <- function(df) { 
     x1 <- x2 <- df$x 
     y1 <- y2 <- df$y 
     Xpair<-merge(x1,x2) 
     names(Xpair)<-c("x1","x2") 
     Ypair<-merge(y1,y2) 
     names(Ypair)<-c("y1","y2") 

     dist <- c(sqrt((Xpair$x1 - Xpair$x2)^2 + (Ypair$y1 - Ypair$y2)^2), NA) 

     dx <- c(Xpair$x1 - Xpair$x2, NA) 
     dy <- c(Ypair$y1 - Ypair$y2, NA) 
     abs.angle <- ifelse(dist < 1e-07, NA, atan2(dy, dx)) 
     so <- list(dist, abs.angle) 
     return(so) 
    } 

이 기능을 adehabitatLT:as.ltraj에서 채택했습니다. 거리 및 절대 각 행렬을 생성합니다 (시간 순서에 따른 거리와 각도가 아닌 모든 점 사이의 거리와 각도를 원한다고 가정).

+0

감사합니다. cgyps, 이것은 당신이 말한 것과 같은 거리와 각도를 만들어 내기 위해 효과적이었습니다. 그러나 그것이 출력하는리스트는 다루기에 조금 부피가 있습니다. 누군가가 10x10 행렬로서의 각도를 만드는 법을 알기를 바랍니다. 이 방법은보다 쉽게 ​​참조 될 수 있습니다. – Brent

+0

따라서 x와 y 데이터가 경도/위도에 있기 때문에이 데이터 세트에 대해서는 실제로 다시 잘 돌아 가지 않습니다. 같은 영역에있는 UTM과 같은 것을 다루는 경우이 방법이 효과가 있다고 생각합니다. – Brent

+0

각도를 출력하도록 기능을 변경할 수 있습니다. 위도/경도를 사용하여 거리 측정을 계산하는 것은 바람직하지 않습니다. 확실히 UTM으로 먼저 변환하십시오! – cgyps