我想找到點與多邊形邊界之間的最小距離(所有點位於多邊形內)。如果可能的話,我如何提取這些值呢?所以我可以找到個體數量與邊界距離之間的相關性。找到所有點與多邊形邊界之間的最小距離
多邊形是.SHP格式並指向X/Y座標。
任何缺少的信息,請讓我知道!非常感謝您的幫助!
我想找到點與多邊形邊界之間的最小距離(所有點位於多邊形內)。如果可能的話,我如何提取這些值呢?所以我可以找到個體數量與邊界距離之間的相關性。找到所有點與多邊形邊界之間的最小距離
多邊形是.SHP格式並指向X/Y座標。
任何缺少的信息,請讓我知道!非常感謝您的幫助!
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)
單位面積使用多邊形:在單位正方形
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讀取您的多邊形數據由包使用readOGR
rgdal
按照@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
是距離的向量。
創建.ppp對象時沒有問題,但是當我嘗試將.shp文件轉換爲.psp時,顯示的錯誤是:as.psp.default(shp)中的錯誤: 無法將x解釋爲線段模式任何建議? – 2015-02-07 16:23:38
有一個文檔[這裏](http://cran.r-project.org/web/packages/spatstat/vignettes/shapefiles.pdf),可能會幫助你。 maptools如何識別您的shp可能存在問題。 'readShapeSpatial()'之後的數據類()是什麼? – xraynaud 2015-02-07 16:45:45
該類是[1]「SpatialPolygonsDataFrame」 – 2015-02-07 17:22:06