Saya mencoba meniru proses ArcGIS ini di PostGIS: http://blogs.esri.com/esri/arcgis/2012/11/13/spaghetti_and_meatballs/ . Ini menjelaskan cara memecah titik-titik yang disangga menjadi poligon berdasarkan persimpangan mereka, menghitung jumlah lapisan, dan menghubungkannya dengan poligon untuk mengklasifikasikannya. Saya menggunakannya untuk membuat peta kerapatan titik kasar dengan vektor, dan hasilnya ternyata bagus untuk kumpulan data saya di ArcGIS. Namun, saya berjuang untuk membuat sesuatu yang bisa diterapkan di PostGIS di mana saya membutuhkannya untuk menghasilkan lapisan kepadatan titik dinamis untuk peta web.
Di ArcGIS, saya hanya menjalankan alat Intersect pada layer poin buffered saya untuk membuat bentuk yang saya butuhkan.
Di PostGIS, saya menjalankan kueri ini:
CREATE TABLE buffer_table AS
SELECT a.gid AS gid, ST_Buffer(a.geo,.003) AS geo
FROM public.pointTable a;
CREATE TABLE intersections AS
SELECT a.gid AS gid_a, b.gid AS gid_b, ST_Intersection(a.geo,b.geo) AS geo
FROM public.pointTable a, public.pointTable b
WHERE ST_Intersects(a.geo, b.geo) AND a.gid < b.gid;
DELETE FROM intersections WHERE id_a = id_b;
Outputnya terlihat cukup identik dengan output ArcGIS, kecuali bahwa itu tidak memecah poligon ke tingkat yang sama yang diperlukan untuk peta kepadatan yang berarti. Berikut screenshot dari apa yang saya maksud:
ArcGIS di sebelah kiri, dan PostGIS di sebelah kanan. Agak sulit diceritakan, tetapi gambar ArcGIS menunjukkan poligon 'interior' yang dibuat di mana ketiga buffer berpotongan. Output PostGIS, di sisi lain, tidak membuat poligon interior dan malah membuat komponennya tetap utuh. Ini membuat tidak mungkin untuk memberikan klasifikasi untuk area interior hanya dengan 3 lapisan di atas satu sama lain dibandingkan dengan hanya 1 untuk bagian luar.
Adakah yang tahu fungsi PostGIS untuk memecah poligon ke bawah sejauh yang saya butuhkan? Atau, apakah ada yang tahu cara yang lebih baik untuk menghasilkan peta kerapatan titik dengan vektor di PostGIS?
sumber
Metode yang akhirnya saya gunakan adalah membuat kisi jala di bidang yang saya minati dengan "resolusi" yang cukup tinggi untuk ditata dan mencerminkan data ke tingkat yang wajar. Anda dapat membaca tentang fungsi jala di sini: Cara membuat kisi poligon reguler di PostGIS?
Ini menciptakan jala ikan dengan 800 baris, 850 kolom, yang panjang dan panjangnya 0,0005 radian (menggunakan proyeksi WGS84 dalam lat / panjang dan tingkat geografis yang cukup kecil sehingga distorsi dapat diabaikan - yaitu mereka semua terdistorsi lebih atau kurang sama ), dan kemudian koordinat untuk kiri bawah grid.
Karena ini menciptakan sejumlah besar poligon yang akan menjalankan kueri, saya membuat indeks dan memperbarui statistik. Ini mengurangi kueri khas saya dari 50+ detik menjadi 4-5 detik.
Subquery di sini menghitung jumlah insiden dalam 0,002 radian (sekitar 220 meter) dari setiap poligon kisi jaring, dan mengelompokkannya menurut kisi jaring. Ini secara efektif menghitung jumlah lingkaran yang tumpang tindih dengan resolusi kisi.
Kueri luar yang saya gunakan untuk Menyatukan nilai hitungan setiap poligon, dan membatasi hitungan ke 3 atau lebih besar. Meskipun serikat pekerja tidak sepenuhnya diperlukan dan merupakan bagian paling intensif sumber daya dari kueri, ini penting untuk pemetaan web karena ini secara efektif mengubah puluhan ribu poligon kisi, yang tidak berfungsi dengan baik saat melayani langsung ke pembuka layar, menjadi Multipolygons dari berbagai nilai hitung yang ada (biasanya beberapa lusin untuk data saya).
Membatasi nilai hitungan adalah kemampuan penting untuk memanaskan peta sehingga tidak terlalu banyak menggambarkan data sehingga tidak dapat menafsirkannya - ini juga memiliki utilitas tambahan untuk mempercepat kueri secara signifikan.
Hasil akhir:
sumber