如何生成面积相等但边缘变化的简单多边形

时间:2013-07-19 14:40:52

标签: python r gis polygon

我想创建各种简单(没有自相交)的独立多边形,所有多边形都具有相同的区域(我将使用不同的区域多次执行),但具有不同的周长。我想理想情况下我会有一个因子设计,其中10个区域各有10-20个不同边缘/面积比的多边形(100-200个多边形)。我想可以为1个区域生成10个多边形,然后可以使用乘数来增加/减少10个不同区域重复的每个多边形的总大小。实际上,形状不必有直边,但我认为这样会更容易。多边形不必是凸面,角度可以是高度可变的,形状不规则,但它们不一定是。高度不规则多边形(例如,与长边不同的矩形相对)的好处是能够生成具有更大范围的周长:面积比的多边形。

我这样做是为了将景观与不同大小和形状的森林收获进行比较(我最终将应用一个函数来计算每个多边形的野生动植物丰度)。任何工作解决方案都可以,但使用R,Python和/或GIS(ArcGIS或QGIS)的解决方案将是首选。感谢您的任何想法或建议。

1 个答案:

答案 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

最终结果为:polygons

不规则多边形的一个更复杂的例子:

>>> 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...

complex