점과 폴리곤 경계 사이의 최소 거리 (모든 점은 폴리곤 내부에 있음)를 찾고 싶습니다. 가능하다면 어떻게 값을 추출 할 수 있습니까? 그래서 개인 수와 국경으로부터의 거리 사이의 상관 관계를 찾을 수 있습니다.모든 점과 폴리곤 경계 사이의 최소 거리 찾기
다각형은 .SHP 형식이며 X/Y 좌표를 나타냅니다.
누락 된 정보가 있으면 알려주세요. 당신의 도움은 대단히 감사합니다!
점과 폴리곤 경계 사이의 최소 거리 (모든 점은 폴리곤 내부에 있음)를 찾고 싶습니다. 가능하다면 어떻게 값을 추출 할 수 있습니까? 그래서 개인 수와 국경으로부터의 거리 사이의 상관 관계를 찾을 수 있습니다.모든 점과 폴리곤 경계 사이의 최소 거리 찾기
다각형은 .SHP 형식이며 X/Y 좌표를 나타냅니다.
누락 된 정보가 있으면 알려주세요. 당신의 도움은 대단히 감사합니다!
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)
단위 평방 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
(@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
이 거리의 벡터이다.
.ppp 개체를 만드는 데 아무런 문제가 없었지만 .shsp 파일을 .psp 파일로 변환하려고하면 다음과 같은 오류가 표시됩니다. as.psp.default (shp)의 오류 : x를 선분 패턴 어떤 제안? –
당신을 도울 수있는 문서 [here] (http://cran.r-project.org/web/packages/spatstat/vignettes/shapefiles.pdf)가 있습니다. maptools가 shp를 인식하는 방법에 문제가있을 수 있습니다. 'readShapeSpatial()'이후에 데이터의 class()는 무엇입니까? – xraynaud
클래스가 [1] "SpatialPolygonsDataFrame" –