2015-02-07 3 views
0

점과 폴리곤 경계 사이의 최소 거리 (모든 점은 폴리곤 내부에 있음)를 찾고 싶습니다. 가능하다면 어떻게 값을 추출 할 수 있습니까? 그래서 개인 수와 국경으로부터의 거리 사이의 상관 관계를 찾을 수 있습니다.모든 점과 폴리곤 경계 사이의 최소 거리 찾기

다각형은 .SHP 형식이며 X/Y 좌표를 나타냅니다.

누락 된 정보가 있으면 알려주세요. 당신의 도움은 대단히 감사합니다!

답변

2

spatstat 패키지에는 두 세트의 점 또는 한 세트의 점과 한 세트의 세그먼트 사이에서 가장 가까운 이웃을 찾는 함수 nncross이 있습니다.

spatstat 점 패턴 객체를 생성하기 위해 X/Y 값 세트를로드하는 데 상대적으로 쉽다 : X와 Y 좌표를 포함하는 두 벡터를하는 경우, 당신이 포인트 패턴 개체를 만들 수 있습니다

library(spatstat) 
p = ppp(x,y) 

세그먼트 패턴 개체를 생성하기 위해 shp 데이터를 변환해야합니다. 이렇게하려면, 당신은 maptools의 명령과 SHP 파일을로드하고 spatstat 객체로 변환보다 수 있습니다

library(maptools) 
shp = readShapeSpatial("yourdata.shp") #read shp file 
shp = as.psp(shp) # convert to psp object 

은 가까운 이웃 거리를 계산하려면, 당신은

nncross(p,shp) 
+0

.ppp 개체를 만드는 데 아무런 문제가 없었지만 .shsp 파일을 .psp 파일로 변환하려고하면 다음과 같은 오류가 표시됩니다. as.psp.default (shp)의 오류 : x를 선분 패턴 어떤 제안? –

+0

당신을 도울 수있는 문서 [here] (http://cran.r-project.org/web/packages/spatstat/vignettes/shapefiles.pdf)가 있습니다. maptools가 shp를 인식하는 방법에 문제가있을 수 있습니다. 'readShapeSpatial()'이후에 데이터의 class()는 무엇입니까? – xraynaud

+0

클래스가 [1] "SpatialPolygonsDataFrame" –

5

단위 평방 nncross 사용해야합니다 다각형 : 단위 광장

library(sp) 
x = cbind(c(0,1,1,0,0),c(0,0,1,1,0)) 
pol = SpatialPolygons(list(Polygons(list(Polygon(x)), "ID"))) 

임의 점 :

set.seed(131) 
pts = SpatialPoints(cbind(runif(10), runif(10))) 
plot(pol) 
points(pts, col = 'red') 

컴퓨팅 거리 :

library(rgeos) 
gDistance(pts, pol, byid = TRUE) # will be 0, all inside 
gDistance(pts, as(pol, "SpatialLines"), byid = TRUE) # dist to line 

추가 플롯하려면 :

text(coordinates(pts), 
    as.character(
    round(as.vector(gDistance(pts, as(pol, "SpatialLines"), byid = TRUE)), 3)), 
pos = 4) 

rgdal

3

(@xraynaud의 단계에 따라 패키지에 readOGR를 사용하여 R으로 Shape 파일에서 폴리곤 데이터를 읽고 약간 수정 됨) :

library(maptools) 
shp = readShapeSpatial("yourdata.shp") #read shp file 
W = as.owin(shp) # convert to owin object 

library(spatstat) 
p = ppp(x, y, window = W) 

이제 p은 다각형으로 경계가 지정된 점을 포함하는 점 패턴입니다. 경계 다각형의 각 점에서의 거리를 계산하기 (보통 spatstat 용어 창이라고도 함) :

d = bdist.points(p) 

지금 d이 거리의 벡터이다.