我想找到点和多边形边界之间的最小距离(所有点都位于多边形内)。如果可能,我如何提取值?,这样我就可以找到个体数量与边界距离之间的相关性。
多边形是.SHP格式,并指向X / Y坐标。
任何遗漏的信息请告诉我!非常感谢您的帮助!
答案 0 :(得分:6)
单位方形多边形:
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)
使用包readOGR
中的rgdal
将形状文件中的多边形数据读入R中
答案 1 :(得分: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
是距离的矢量。
答案 2 :(得分: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)