2013-01-18 75 views
2

在Python中,最有效的方法是將幾個多邊形合併並簡化爲等效形狀,但使用的多邊形少得多?使用Python高效地合併和縮小多邊形

polygon reduction

我試圖繪製郵政編碼區域,由US Census data在谷歌地圖定義。使用Django的優秀GeoDjango框架以及我對django-census-places應用程序的破解,現在我有數以千計的拉鍊和緯度/經度矢量描述其數據庫中的區域。

我已經寫了一些基本的Python來導出矢量,並呈現Javascript以在Google Map上繪製選定的拉鍊。但是,我遇到的問題是速度非常慢,因爲即使是一個郵政編碼也可能包含數千個多邊形。我可以將此輸出預處理爲JSON並對其進行緩存,但即使這樣,瀏覽器也需要幾分鐘才能加載所有三角形,其中大部分是冗餘的,因爲我只對幾個郵政編碼的整體大綱感興趣。

注意,這個問題類似於this,但不一樣。我不關心重疊的多邊形,因爲我相信沒有重疊。

編輯:This問題也顯得非常相似。

回答

0

要合併多邊形,我建議您需要執行boolean union operation。我不確定你如何在Python中做到這一點,但既然你也提到過JavaScript,那麼我的Clipper庫(用Delphi,C++和C#編寫)here就有很好的JavaScript翻譯。

還有一個在線演示here,它很好地顯示了剪輯庫的功能。

+0

在演示頁面上,「時間」標題下的數字是幾秒或幾分鐘? –

+0

我猜測毫秒。清除基準並執行另一個剪輯操作。手術發生得比眼睛能看到的要快得多,所以絕對不是秒或分鐘:)。 –

1

事實證明,GeoDjango的幾個特性之一是布爾多邊形運算符的全部範圍。我所要做的就是在每個MultiPolygon對象上調用union()來獲取描述整個區域的MultiPolygon。點數的減少是一個數量級。