Saya memiliki layer berikut menggunakan SRID 27700 di postgis:
Ini adalah setiap wilayah administratif di Inggris, dan (seperti yang Anda lihat dari pengelompokan warna) masing-masing memiliki bidang teks yang menentukan daerah tempat mereka berada.
Yang ingin saya lakukan adalah membuat poligon county yang lebih besar dari yang lebih kecil di county tertentu, jadi EG dalam gambar di atas semua poligon warna teal akan membentuk satu poligon besar dari cincin luar tunggal yang berisi semua polis yang warna, seperti semua ungu, coklat, merah muda, abu-abu dll semua harus membentuk satu poligon.
Saya sudah mencoba yang berikut ini:
insert into parishesmerged (geometry)
select astext(multi(ST_Union(the_geom))) as the_geom from parishes
group by county_name
Tapi itu terus menghasilkan geometri yang rusak yang kemudian saya punya masalah besar pemrosesan lebih lanjut.
Saya mencoba membuat peta tingkat kabupaten yang lebih sederhana dengan area keluaran utama di.
Solusi apa pun tidak harus ada di Postgis juga, saya memiliki tumpukan OS4Geo lengkap yang diinstal, versi terbaru QGis dan lebih banyak utilitas daripada yang bisa saya goyang.
Satu-satunya hal yang saya tidak miliki adalah anak laki-laki besar seperti ArcGis (Meskipun saya mungkin memiliki Mapinfo Lama tergeletak di suatu tempat)
Sebagai catatan, dataset yang saya coba buat adalah untuk menemani buku GIS yang sedang saya tulis yang ditujukan untuk pemrogram .NET yang ingin menulis aplikasi GIS menggunakan .NET
Setelah mencoba saran di bawah ini, salah satu yang paling berhasil adalah solusi 'Paul Ramseys'.
Saya sekarang memiliki file counties & borough sederhana yang disederhanakan yang cukup sederhana untuk buku saya, tetapi cukup kompleks untuk memungkinkan saya menunjukkan beberapa SQL geo-spasial yang menarik.
Meskipun solusi Paul pada akhirnya adalah yang bekerja untuk saya, saya juga memanfaatkan jawaban lain untuk hal-hal seperti menyederhanakan peta poligon dan mengurangi kompleksitas lebih lanjut.
Pada hal yang saya amati saat melakukan ini, sementara ST_Collect memang lebih cepat dari ST_Union, jalankan untuk menjalankan itu juga yang paling bertanggung jawab untuk geometri yang rusak. Dugaan saya adalah peningkatan kecepatan diperoleh dengan mengorbankan kurang akuratnya fungsi inti.
astext(multi())
bagian? Saya hanya pergi dari apa yang saya lihat dalam contoh larut PostGIS lainnya.Jawaban:
ST_Union akan berfungsi, tetapi kerja lini Anda hampir pasti tidak bersih. Jadi batas-batas benda kecil Anda tidak semuanya benar-benar disukai. Anda dapat dengan lembut memasang mereka ke kotak untuk mencoba dan meningkatkan peluang yang berbaris vertex, tapi saya yakin Anda masih akan memiliki beberapa kasus yang tidak berfungsi. Entah mereka akan melampaui toleransi atau, lebih mungkin, akan ada tempat-tempat di mana simpul tidak berpasangan, jadi ada garis di satu sisi dan sebuah simpul di sisi lain.
Jika Anda memiliki PostGIS 2.0, membangun struktur topologi dengan toleransi dapat membuat Anda mendapatkan jawaban yang Anda cari, jika Anda beruntung.
sumber
Incorrect parameter count in the call to native function 'ST_Union'
dan saya tidak tahu apakah itu batasan mysql.Anda mengatakan bahwa perlu "... membentuk satu poligon besar dari cincin luar tunggal yang berisi semua polys ...". ST_ExteriorRing melakukan ini,
Anda dapat menggunakan ST_Union (), seperti yang disarankan, atau tes dengan ST_Collection ().
CATATAN: untuk menghindari sedikit lengkungan atau "geometri patah" Anda dapat menggunakan st_convexhull dan / atau ST_Sederhana untuk setiap geom,
dan periksa geometri Anda,
sumber
Fungsi ST_Collect adalah fungsi "agregat" dalam terminologi PostgreSQL
"
SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN
" akan mengembalikan GEOMETRYCOLLECTION terpisah untuk setiap nilai ATTRCOLUM yang berbedahttp://postgis.net/docs/ST_Collect.html
Catatan: ST_Collect jauh lebih cepat daripada ST_Union
sumber
Saya berasumsi dari pertanyaan Anda bahwa Anda menggunakan produk Boundary-Line dari Ordnance Survey. Jika demikian, maka sudah termasuk kumpulan data tingkat Kabupaten sehingga tidak perlu mencoba untuk menghasilkan sendiri dari daerah paroki tingkat bawah.
Jika Anda tidak menggunakan Boundary-Line maka saya sarankan Anda melakukannya karena gratis di bawah lisensi OpenData OS dan memiliki tingkat County sebagai file bentuk yang dapat Anda muat langsung ke PostGIS.
sumber