我想创建各种简单(没有自相交)的独立多边形,所有多边形都具有相同的区域(我将使用不同的区域多次执行),但具有不同的周长。我想理想情况下我会有一个因子设计,其中10个区域各有10-20个不同边缘/面积比的多边形(100-200个多边形)。我想可以为1个区域生成10个多边形,然后可以使用乘数来增加/减少10个不同区域重复的每个多边形的总大小。实际上,形状不必有直边,但我认为这样会更容易。多边形不必是凸面,角度可以是高度可变的,形状不规则,但它们不一定是。高度不规则多边形(例如,与长边不同的矩形相对)的好处是能够生成具有更大范围的周长:面积比的多边形。
我这样做是为了将景观与不同大小和形状的森林收获进行比较(我最终将应用一个函数来计算每个多边形的野生动植物丰度)。任何工作解决方案都可以,但使用R,Python和/或GIS(ArcGIS或QGIS)的解决方案将是首选。感谢您的任何想法或建议。
答案 0 :(得分:4)
GeoPandas 模块似乎可以满足您的需求。它用于python,利用python优秀的数据库分析库,支持Gis和fiona映射,以及广泛的多边形创建。在这里查看:
https://github.com/kjordahl/geopandas?source=cc
来自自述文件:
GeoPandas是一个向pandas对象添加地理数据支持的项目。它目前实现了GeoSeries和GeoDataFrame类型,它们分别是pandas.Series和pandas.DataFrame的子类。 GeoPandas对象可以作用于形状上的几何对象并执行几何操作。
多边形创建的一个例子:
>>> p1 = Polygon([(0, 0), (1, 0), (1, 1)])
>>> p2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
>>> p3 = Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
>>> g = GeoSeries([p1, p2, p3])
>>> g
0 POLYGON ((0.0000000000000000 0.000000000000000...
1 POLYGON ((0.0000000000000000 0.000000000000000...
2 POLYGON ((2.0000000000000000 0.000000000000000...
dtype: object
最终结果为:
不规则多边形的一个更复杂的例子:
>>> boros = GeoDataFrame.from_file('nybb.shp')
>>> boros.set_index('BoroCode', inplace=True)
>>> boros.sort()
>>> boros
BoroName Shape_Area Shape_Leng \
BoroCode
1 Manhattan 6.364422e+08 358532.956418
2 Bronx 1.186804e+09 464517.890553
3 Brooklyn 1.959432e+09 726568.946340
4 Queens 3.049947e+09 861038.479299
5 Staten Island 1.623853e+09 330385.036974
geometry
BoroCode
1 (POLYGON ((981219.0557861328125000 188655.3157...
2 (POLYGON ((1012821.8057861328125000 229228.264...
3 (POLYGON ((1021176.4790039062500000 151374.796...
4 (POLYGON ((1029606.0765991210937500 156073.814...
5 (POLYGON ((970217.0223999023437500 145643.3322...