3

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

多边形采用 .SHP 格式,点在 X/Y 坐标上。

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

4

3 回答 3

7

单位正方形多边形:

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使用in package将 shapefile 中的多边形数据读入 Rrgdal

于 2015-02-07T17:21:49.440 回答
3

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)
于 2015-02-07T14:38:29.737 回答
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是距离向量。

于 2015-02-07T22:10:53.033 回答