2015-02-07 148 views
0

我想找到點與多邊形邊界之間的最小距離(所有點位於多邊形內)。如果可能的話,我如何提取這些值呢?所以我可以找到個體數量與邊界距離之間的相關性。找到所有點與多邊形邊界之間的最小距離

多邊形是.SHP格式並指向X/Y座標。

任何缺少的信息,請讓我知道!非常感謝您的幫助!

回答

2

spatstat包中有一個函數nncross,它找到兩組點或一組點或一組段的最近鄰居。

它是相對容易的加載一組x/y值的創建spatstat點圖案對象:如果X和Y是含您的座標的兩個向量,可以用創建點圖案對象

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

您需要將您的shp數據轉換爲spatstat細分模式對象。要做到這一點,你可以從maptools加載使用命令SHP文件和比轉換成spatstat對象:

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

要計算你的近鄰距離,你必須nncross

nncross(p,shp) 
+0

創建.ppp對象時沒有問題,但是當我嘗試將.shp文件轉換爲.psp時,顯示的錯誤是:as.psp.default(shp)中的錯誤: 無法將x解釋爲線段模式任何建議? – 2015-02-07 16:23:38

+0

有一個文檔[這裏](http://cran.r-project.org/web/packages/spatstat/vignettes/shapefiles.pdf),可能會幫助你。 maptools如何識別您的shp可能存在問題。 'readShapeSpatial()'之後的數據類()是什麼? – xraynaud 2015-02-07 16:45:45

+0

該類是[1]「SpatialPolygonsDataFrame」 – 2015-02-07 17:22:06

5

單位面積使用多邊形:在單位正方形

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) 

從shape文件爲R讀取您的多邊形數據由包使用readOGRrgdal

3

按照@xraynaud的步驟(略微修改):

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是距離的向量。