2016-12-27 4 views
1

내가 같이 raster 패키지에 distanceFromPoints 기능을 사용하기 위해 노력하고있어 좌표DistanceFromPoints는

distanceFromPoints(object,xy,...) 

, 오브젝트가 래스터과 xyx의 행렬과 y이 경우, 지금

을 조정 내 래스터는 예를 들어 1000 셀을 가지고 xy은 한 점을 나타내며, xy과 각 래스터 셀 사이의 거리를 나타내는 1000 개의 값을 얻습니다. 내 문제는 xy에 여러 좌표 (예 : 10 포인트)가있는 경우입니다. 함수 설명은 xy이 여러 점이 될 수 있음을 나타내지 만 복수 점 XY 점이있는이 함수를 실행하면 XY에있는 각 좌표의 1000 값을 기대하면서도 여전히 1000 값만 얻습니다. 이게 어떻게 작동합니까?

감사합니다.

답변

3

여러 점에서 distanceFromPoints을 사용하면 각 래스터 셀에 대해 단일 값을 제공합니다.이 값은 해당 셀에 가장 가까운 점까지의 거리입니다. 한 지점에이 래스터 레이어의 목록을 제공

r = raster(matrix(nrow = 10, ncol = 10)) 
p = data.frame(x=runif(5), y=runif(5)) 
dp = apply(p, 1, function(p) distanceFromPoints(r,p)) 

, 각각은 거리 :

apply

재현 예를 사용할 수 있습니다 개별적으로 각 지점까지의 거리를 제공 래스터 레이어를 만들려면

# for example, 1st raster in the list has the distance to the 1st point 
plot(dp[[1]]) 
points(p[1,]) 

enter image description here

편의를 위해

, 당신은 래스터 스택에이 목록을 변환 할 수 있습니다

st = stack(dp) 
plot(st) 

enter image description here

주의의 마지막 단어 : 래스터가 이렇게 만든 개체 주목해야한다

은하지 않습니다 실제로 생성 된 지점 목록보다 더 많은 정보를 포함합니다. 따라서 이러한 정보를 저장하는 데는 계산적으로나 메모리가 많이 소요됩니다. 이것이 특정 질문을 해결하는 합리적인 방법이 될 수있는 상황을 쉽게 생각할 수 없습니다. 따라서 이러한 래스터 레이어를 원하는 이유에 대해 다시 생각해보고 전반적인 문제를 해결할 수있는보다 효율적인 방법이 있는지 묻는 것이 좋습니다.

+0

정말 고마워요. 내가 다루고있는 수천 개의 포인트가 있기 때문에 적용이나 루프를 사용하지 않으려 고 노력했다. 이것은 내 코드에서 시간이 오래 걸리는 계산으로 바뀐다. 그러나 당신이 지적했듯이, 이것이 유일한 선택 인 것 같습니다. 답변 해 주셔서 대단히 감사합니다. –

+0

도움이 되니 기쁩니다. 이것이 유용하고 질문에 대답 한 경우, 위쪽 화살표를 클릭하여 upvoting을 고려하고 틱 (체크) 표시를 클릭하여 대답을 수락하십시오. 이것은 주석 대신에 SO에서 감사를 말하는 preferenced 방법입니다. – dww