我有一个二维多边形列表,定义为R中x和y坐标的双列矩阵。它们完全填充方形区域并且是互斥的。我想使用这些多边形定义来生成x,y坐标值的精细网格,其中每个值由它落入哪个多边形来标识。
我已经探索了 sp 包,可以将我的多边形变成类SpatialPolygons
的对象,但我不知道这是否让我更接近目标。通过数据框中的多边形,我可以使用ggplot
和geom_polygon(aes(fill=ID))
来生成基于多边形ID着色的多边形图。
我可以看到前进的道路,但不知道如何完成其中任何一条道路:
一个采用多边形并在多边形边界内生成均匀坐标网格的函数。 (我的多边形是非常不规则的,有很多边,所以为它们创建一个自定义函数会很痛苦且容易出错。)
一个函数,它采用一对x,y坐标和我的多边形列表,并输出坐标所在的多边形。
一个函数,它接受我的ggplot生成的绘图并将颜色转换为数字坐标值的网格,我可以将其读回R.
我可能还有其他方法没有想到。我不得不相信其他人之前有同样的需求,但是广泛的搜索并没有让我找到任何能够满足我需要的功能。
答案 0 :(得分:2)
[关于删除spsample的嘟]]
在寒冷的白天,似乎你想要别的东西:
如果你的所有多边形构成一个矩形并且你想要在该矩形上有一个规则的点网格,那么就创建一个网格坐标的SpatialPoints对象(参见'expand.grid'以解决该子问题的部分解决方案)然后使用来自package的'overlay':sp来测试网格点所在的多边形。
您可能还想使用bbox来获取多边形的范围。
答案 1 :(得分:1)
听起来你在正方形网格上做这个定位所以它可能比更通用的多边形方法需要的更简单。假设你在这个方格上的坐标是两个向量,'xx'和'yy',你有一个名为'mypoints'的data.frame或矩阵中的点列表。这将创建一个row-col-indices矩阵来查找正确的子方块:
xx <- seq(0,1,by=.1)
yy <- seq(0,1,by=.1)
mypoints <- matrix(runif(10), ncol=2)
head(mypoints)
#---------------
[,1] [,2]
[1,] 0.7731868 0.2707768
[2,] 0.7005779 0.7881789
[3,] 0.9520941 0.6661852
[4,] 0.4625906 0.9176813
[5,] 0.4550811 0.5017386
#---------------
findInterval(mypoints[1:5,1], xx)
#[1] 8 8 10 5 5
findInterval(mypoints[1:5,2], yy)
#[1] 3 8 7 10 6
pointidxs <- matrix( c( findInterval(mypoints[,1], xx),
findInterval(mypoints[,2], yy) ), ncol=2)
head(pointidxs)
#--------------
[,1] [,2]
[1,] 8 3
[2,] 8 8
[3,] 10 7
[4,] 5 10
[5,] 5 6
答案 2 :(得分:1)
我没有想太多,但这里有一个咖啡前的想法:我知道你的多边形形成了Voronoi的细分。现在,应该很容易获得相应的Delaunay三角剖分,这应该为您提供一种直接的方法来确定特定点是否属于相应的多边形。
希望有道理吗?