繁体   English   中英

查找所有点与多边形边界之间的最小距离

[英]Finding the minimum distance between all points and the polygon boundary

我想找到点和多边形边界之间的最小距离(所有点都位于多边形内)。 如果可能,我如何提取值?,这样我就可以找到个体数量与边界距离之间的相关性。

多边形为.SHP格式,并指向X / Y坐标。

如有任何遗漏信息,请告诉我! 非常感谢您的帮助!

单位方形多边形:

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使用readOGR将多边形数据从shapefile读入R中

按照@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是距离的向量。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM