python - 如何生成面积相等但边不同的简单多边形

标签 python r gis polygon

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

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

最佳答案

GeoPandas 模块似乎可以满足您的需求。它适用于 python,利用 python 的优秀库进行数据分析,支持 Gis 和 fiona map ,以及广泛的多边形创建。在这里查看:

https://github.com/kjordahl/geopandas?source=cc

自述文件:

GeoPandas is a project to add support for geographic data to pandas objects. It currently implements GeoSeries and GeoDataFrame types which is are subclasses of pandas.Series and pandas.DataFrame respectively. GeoPandas objects can act on shapely geometry objects and perform geometric operations.

多边形创建示例:

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

关于python - 如何生成面积相等但边不同的简单多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748913/

相关文章:

javascript - 将 GeoJSON 坐标转换为其他投影以与 Turf.js 一起使用

Python 垃圾回收

r - 操作图中数据点的位置

r - 将代码推迟到 knitr 中文档的 END

python-2.7 - 如何计算骰子系数以测量python中图像分割的准确性

django - GeoDjango:确定多边形的面积

python - 使用 BeautifulSoup 导航到第二个字符串文本

python - AWS::RDS - 使用对流层的多可用区

python - 如何从时间戳列生成 TimedeltaIndex,其中每个 TimeDelta 都是引用前一个时间戳生成的

R:奇怪的触发函数行为