2013-07-19 100 views
1

我想創建各種簡單(無自相交),獨立多邊形都具有相同面積(我將多次使用不同面積),但具有不同的周長。我想理想情況下我會有一個因子設計,每個面積10-20個不同的邊/面積比(100-200個多邊形),每個面積10個。我猜想可以爲1個區域生成10個多邊形,然後可以使用乘數來增加/減少10個不同區域重複的每個區域的總大小。在現實中,形狀不一定要有直線,但我認爲這會更容易。多邊形不一定是凸的,角度可以高度變化,形狀不規則,但它們不一定是。高度不規則的多邊形(例如,與具有不同長度邊的矩形相反)的好處是能夠生成具有更大範圍周長面積比的多邊形。如何生成面積相等但邊長不變的簡單多邊形

我正在做這個比較風景與不同大小和形狀的森林收穫(我最終將應用函數來計算每個多邊形的野生動物丰度)。任何工作解決方案都可以,但使用R,Python和/或GIS(ArcGIS或QGIS)的解決方案將是首選。感謝您的任何想法或建議。

回答

4

The GeoPandas模塊似乎只是做你想找的。它用於python,利用python優秀的數據庫進行數據分析,支持Gis和fiona地圖,以及廣泛的多邊形創建。看看這裏:

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

自述:

GeoPandas是一個項目,以增加對地理數據以大熊貓對象的支持。它目前實現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

+0

這MIG可以創建已知區域的標準多邊形,但似乎可能難以創建具有已知區域的不規則多邊形。也許我錯過了一些東西,我是一個Python新手。 – djhocking

+0

@djhocking我已經更新了我的答案。我絕對認爲這可能有你想要的。 ** GeoPandas **可以輕鬆創建和操作複雜的不規則多邊形。你應該轉向他們的github,https://github.com/kjordahl/geopandas?source=cc,並探索這個項目。他們有不少例子可以幫助你。你也可以嘗試與開發者開始對話。 – agconti