在R中创建随机多边形,其边界限定为一个shapefile。

4
我有一个Chile国家边界线的shapefile文件。如果可能的话,我希望在这个区域内随机生成1000个多边形。我想知道在R中最好的方法是什么?我的想法是,使用“shapefiles”包加载shapefile文件,然后使用“spatstat”中的可用内容创建点数据集。然后我可以基于这些点创建圆形多边形...这主要是假设性的,我不知道是否可行。
我在R方面有一些经验,但之前没有尝试过任何空间分析。
非常感谢您的想法和建议。
2个回答

4

你能使用栅格多边形吗?

在你的shapefile多边形上生成一个细网格(小于目标多边形面积),然后选择一个随机的“种子”网格方块,并通过逐步添加最近的网格单元来“增长”,直到它达到所需大小。这样,你就可以得到大约圆形的内陆多边形,如果你从沿海单元开始,则为半圆形的多边形。

是否使用栅格表示取决于你创建这些多边形后计划做什么,但看起来你只是要将它们与其他土地利用数据叠加,这可以使用栅格对栅格或栅格对多边形完成。

应该可以在栅格包中完成所有操作。


听起来,我认为光栅方法可能可行。您能否给我一些指针,告诉我如何选择随机的“种子”网格方块以及我可以使用什么来“生长”它们,考虑到我想尝试自动化这个过程1000多次?感谢您的回复 - 非常有用! - JPD
一旦快速浏览,'rasterize' 可以在多边形上产生一个网格值“1”,在外部产生一个值为 'NA'的网格,然后sampleRandom可以选择其中随机的非 NA 单元格。虽然 rowcol 参数似乎存在缺陷... 然后您可能可以使用 'adjacent' 来扩展这些多边形。 - Spacedman

2
这是一个比较困难的问题,因为你需要考虑一些事情。多边形可以是简单的凸形状,也可以是更复杂的“凹”形状或由多个“岛屿”和湖泊组成的多支形状。首先要搞清楚这一点,因为如果你只需要简单的情况,那就更好了。
1)从随机点生成凸多边形很容易,因为你只需要凸包-点的顺序不会影响结果。对于实际的多边形来说,将它们链接在一起作为边界的顺序非常重要,否则你将得到带有扭曲边界的无意义形状。但是,有 alphahull 包可以从非凸点生成更智能的壳。
2)如果多边形的任何部分都不能超出主边界,则需要每个顶点都在边界内,并且连接它们的每个线段都不会跨越主边界。想象一下一个多边形,其顶点都在国家边界内,但是一个线段穿过了一个河湾。有一些采样函数可以获取多边形内的点 (spsamplesp, csrsplancs),并且有一些几何测试在 rgeos 中可以用来确保没有交叉-尽管这是额外的工作,因为你正在测试定义多边形的一组样本点的失败,而不是生成已知的“好案例”。
如果你能放松一些限制,那么可能会比较容易。你提到“圆形多边形”,你真的是指圆(或近似圆)吗?如果是这样,那么一些测试可能会变得简单得多。
我倾向于深入了解你的目标,看看这是否真的是你想做的事情,或者是否可以更简化一些东西。

你好,感谢您迅速和有用的回复。我将再解释一下我的意图:这些“随机”的多边形将充当假设的受保护区域。该项目的目的是查看这些随机生成的受保护区域是否包含比实际受保护区域更多的资源(环境图层集合)。您指出这些多边形理想情况下应该完全位于陆地上,这一点是正确的。创建后,它们将用于在其他图层上执行“按掩模提取”、“按位置选择”或等价操作。 - JPD
关于多边形的形状/大小...近似圆形就足够了。更重要的是,每个多边形的大小应该相当接近,例如距离点10公里半径。 - JPD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接