Ekstrak garis tengah Kompleks-Poligon di PostGIS / Python

8

Adakah yang tahu cara mengekstrak garis tengah poligon berikut (Fig1) menggunakan fungsi PostGIS atau modul Python? Saya mencoba Fungsi Voronoi tapi itu tidak membantu untuk bentuk seperti ini. Saya ingin sesuatu seperti Fig2 blackline.

Fig1: Bentuk Polygon Fig2: Garis tengah

Zia
sumber
2
Anda mungkin ingin melihat jawaban ini: gis.stackexchange.com/questions/29863/... Saya tahu itu menggunakan ArcGIS sebagai gantinya, tetapi pendekatannya mungkin berguna.
WhiteboxDev
2
Bagaimana dengan: postgis.net/docs/ST_StraightSkeleton.html ?
Jakub Kania
@ Jakub Saya mencoba mengkonfigurasi SFCGAL (diperlukan untuk fungsi Skeleton) ke dB PostGIS saya yang sudah ada. Meskipun saya telah menginstal libSFCGAL.sofile dalam /usr/local/libdirektori tetapi tidak tahu cara membawa ST_StriaghtSkeleton()db? Ada ide?
Zia
PostGIS perlu dikompilasi dengan dukungan SFCGAL, tapi itu pertanyaan yang berbeda dan bukan sesuatu yang saya terlalu kenal.
Jakub Kania
@ Yakub Terima kasih. Saya entah bagaimana telah menyelesaikan konfigurasi SFCGAL ini sendiri di sini
Zia

Jawaban:

4

Ini mungkin alat yang salah untuk Anda, tetapi Anda bisa melakukannya hanya dengan plugin OpenJUMP dan Skeletonizer. Plugin dapat diunduh dari http://sourceforge.net/projects/jump-pilot/files/OpenJUMP_plugins/More%20Plugins/JUMP%20Skeletonizer%20Plugin/

File zip berisi manual yang bagus. Plugin dimaksudkan untuk aliran dan badan air tetapi poligon Anda meniru aliran ke saya.

Ini adalah poligon Anda saat saya mendigitalkannya. Perhatikan simpul di garis tengah input / outlet.

masukkan deskripsi gambar di sini

Titik masuk didigitalkan pada lapisan terpisah. Poin harus patah ke simpul pada batas poligon.

masukkan deskripsi gambar di sini

Gunakan alat Skeletonizer dan isi bidang

masukkan deskripsi gambar di sini

Dapatkan hasilnya

masukkan deskripsi gambar di sini

pengguna30184
sumber
Sayangnya file jar tidak mengandung manual. Bisakah Anda membimbing saya cara menambahkan plugin ini ke OpenJump-GUI saya?
Zia
Lihat di dalam zip , di skeletonizer-1.0 \ doc \ Anda harus menemukan file "SkeletonizerUserGuide.doc". Instalasi dilakukan dengan menjatuhkan file jar dari skeletonizer-1.0 \ lib \ ke direktori lib \ ext di OpenJUMP.
user30184
Namun, sepertinya sebagian besar guci atau versi yang lebih baru sudah termasuk dalam OpenJUMP baik di \ lib atau di \ lib \ ext. Mungkin yang terbaik adalah menyalin hanya yang tampaknya hilang. Restart diperlukan setelah menambahkan toples baru.
user30184
Saya menemukan botol ini di sini . Tapi saya mendapatkan kesalahan ini java.lang.Exception: Could not determine shapefile type - data is either all GeometryCollections or empty (Illegal State Exception)saat menjalankan plugin Skeletonizer ini
Zia
3

Jika poligon Anda raster, mendigitalkannya.

Setelah poligon Anda benar-benar poligon :), solusi pertama terletak, seperti kata @WhiteboxDev, itu kerangka lurus, tetapi memiliki masalah bahwa, selain garis tengah yang Anda inginkan, itu juga mengembalikan banyak segmen yang memancar dari garis itu ke perbatasan poligon Anda. Tetapi jika Anda memiliki PostGIS 2.2+, Anda dapat menggunakannya ST_ApproximateMedialAxis()sebagai gantinya, itulah yang Anda inginkan.

Marcos Dione
sumber