Bagaimana cara mencapai yang setara dengan Larutkan dari ArcGIS untuk Desktop menggunakan ST_Union?

11

Saya mencoba mencapai yang setara dengan alat Dissolve dari ArcGIS untuk Desktop menggunakan ST_Union dari PostGIS tetapi sepertinya saya tidak mendapatkan hasil yang diharapkan.

Saya punya satu tabel yang memiliki atribut tertentu dengan Geometri Poligon. (seperti FID, Locstat, Loccnt, Shape)

Ini pertanyaan saya:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;
Dhams
sumber
1
Bisakah Anda menjelaskan hasil apa yang Anda harapkan dan apa yang Anda dapatkan? Berjalan: SELECT AsText (ST_Union ...) FROM ... mungkin membantu menemukan kesalahan.
Micha
Dalam tabel saya memiliki 6842 catatan, sesuai dengan hasil ArcGIS saya harus mendapatkan 1683 catatan di mana saat menggunakan kueri saya mendapatkan 6842 catatan. Saya juga mencoba ST_Aggr_Union yang memberi saya 742 Rekaman dengan Geometri null ganda.
Dhams

Jawaban:

14

Masalah Anda kemungkinan karena apa yang Anda sertakan dalam grup dengan bidang.

ST_UNION adalah fungsi agregat, artinya dibubarkan berdasarkan apa yang Anda tentukan sebagai GROUPparameter.

Inilah yang Anda masukkan:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c Group by c.fid,c.boundaryshape;

Menurut ini, Anda mengelompokkan menurut Anda fid, yang mungkin merupakan pengidentifikasi unik, dan juga oleh boundaryshape, yang merupakan geometri. Masalah dengan ini adalah bahwa sangat tidak mungkin bahwa fitur berbagi ID unik, akan memiliki geometri yang identik. Oleh karena itu, ST_Unionmungkin akan berakhir dengan sesuatu seperti berikut ini:

Input:   
fid     boundaryshape  
1         11  
1         12  
1         11  
1         13  
2         12  
2         13  
2         12  
3          5  
3          2  
3          4  

Output:  
fid     boundaryshape  
1        (11 + 11)  
1        12  
1        13  
2        (12 + 12)  
2        13  
3        2  
3        4  
3        5

Dalam hal ini, Anda hanya boleh dibubarkan berdasarkan pengenal unik Anda, kecuali Anda benar-benar memiliki sejumlah geometri duplikat dengan yang sama fid, yang Anda coba singkirkan. Bahkan dalam situasi itu, Anda hanya perlu mengelompokkan berdasarkan fid, dan serikat akan mengurus duplikasi geometri.

Saya akan mencoba yang berikut:

SELECT c.fid, ST_Union(c.boundaryshape) FROM c GROUP BY c.fid;

Itu akan memberi Anda hasil yang diinginkan melarutkan semua fitur berdasarkan atribut umum fid.

Ini dokumen bantuan di situs PostGIS: ST_Union

Lihat contoh pertama yang tercantum di bagian bawah dan perhatikan bahwa itu tidak termasuk geometri di bagian grup.

Dapatkan Tata Ruang
sumber
1
Dalam beberapa kasus, lebih baik mengambil geometri ke kotak sebelum melakukan penyatuan: SELECT ST_Union (ST_SnapToGrid (geom, 0,0001)) DARI grup geo_area oleh level_identifier;
Maxim Eliseev