我想找到点与多边形边界之间的最小距离(所有点位于多边形内)。如果可能的话,我如何提取这些值呢?所以我可以找到个体数量与边界距离之间的相关性。找到所有点与多边形边界之间的最小距离
多边形是.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