Mengidentifikasi cluster dalam data titik vektor menggunakan QGIS?

34

Saya memiliki dataset vektor titik data broadband pedesaan (seberapa cepat, dll.) Dan saya ingin menjelajahi apakah ada kelompok titik dengan karakteristik yang sama, dan untuk memplot poligon yang melingkupinya.

Sebagai contoh, saya mungkin memiliki 45.000 poin dalam satu set data PostGIS yang didistribusikan melalui lanskap. Saya ingin mengidentifikasi kluster yang terletak dalam jarak x km satu sama lain dan di mana kecepatannya di bawah y kbps, dan untuk menghasilkan cembung lambung untuk setiap klaster yang memenuhi syarat.

Apakah ada cara sederhana untuk melakukan ini di QGIS, misalnya?

Adrian
sumber
3
Anda mungkin ingin memperhatikan sifat broadband. Kecepatan tinggi akan terjadi di daerah perkotaan; konglomerasi industri; memancar di sepanjang jalan raya dari CO, modem, dan infrastruktur serat / kabel / DSL lainnya; dan disiarkan dari menara sel tertentu (tergantung pada definisi Anda tentang "broadband"). Dengan demikian kecepatan tinggi akan tampak berkelompok dan kecepatan yang lebih rendah akan terlihat seperti celah dalam kelompok. Secara khusus, itu tidak mungkin bahwa cembung lambung bahkan akan menjadi deskripsi yang layak dari daerah kecepatan rendah. Akan lebih baik untuk mengetahui bagaimana Anda bermaksud menafsirkan "cluster" apa pun yang Anda temukan.
whuber
Terima kasih untuk bantuannya. Saya sedang mempelajari lebih banyak daerah pedesaan, di mana arsitektur broadband kabel dapat memunculkan situasi yang lebih tidak biasa karena distribusi lemari jalan dan langsung memberi makan garis pada tiang, serta geografi daerah misalnya. Sebagai hasilnya Anda menemukan cluster yang dapat menjadi titik awal yang berguna untuk membangun solusi lokal, dan dapat menjadi langkah penting dalam mengembangkan strategi. Bahkan Anda dapat menemukannya di daerah perkotaan, seringkali karena warisan industri atau hal-hal seperti jalur kereta api dan sungai yang terbukti sulit dilintasi.
Adrian

Jawaban:

15

Saya telah menggabungkan bit dari beberapa saran dan menambahkan sedikit dari saya sendiri dan menemukan solusi yang bekerja dengan baik untuk saya - dan semuanya dari dalam QGis!

Saya pertama kali menjalankan PostGis SELECT untuk menemukan titik-titik yang memiliki atribut umum yang tepat dan terletak dalam jarak x km satu sama lain:

SELECT DISTINCT s1.postcode, s1.the_geom, s1.gid DARI broadband_data AS s1 BERGABUNG broadband_data AS s2 ON ST_DWithin (s1.the_geom, s2.the_geom, 1000) WHERE s1.postcode! = S2.postcode DAN s1.fastest_broadband <2000

(Cukup banyak langsung dari buku PostGis in Action yang sangat bagus dari Manning , hanya menambahkan bergabung sendiri)

Saya kemudian memuat plugin ManageR Petani Carson, dan mengimpor lapisan. Dari sini saya mengikuti proses pengelompokan PAM yang disarankan di sini , dan mengekspor hasilnya ke file bentuk, di mana Convex Hulls dihitung dalam hitungan detik menggunakan fTools (Carson berkeliling!).

Adrian
sumber
Edisi 1 PostGIS in Action sekarang tidak dicetak. Berikut ini tautan ke manning.com/books/postgis-in-action-second-edition edisi kedua dan tautan ke bab pertama yang merupakan manning gratis-content.s3.amazonaws.com/download/a/… yang merupakan bagus untuk mulai mendapatkan foto PostGIS
Martin Hügi
8

Meskipun bukan solusi QGIS, saya pribadi akan memilih beberapa analisis eksplorasi menggunakan SaTScan . Cepat, didokumentasikan dengan baik dan diterapkan secara luas, sehingga Anda tidak akan kesulitan memulai. 45k poin mungkin memerlukan beberapa RAM.

Saya tidak yakin apakah itu dapat membaca langsung dari Postgres tetapi dengan mudah mengimpor dari file dbf dan teks.

Output analisis kemudian dapat dengan mudah dibaca kembali ke Postgres atau QGIS. Anda dapat memutuskan untuk mencari cluster bundar atau elips (mungkin berguna untuk digunakan jika ada jenis pemukiman tertentu dalam data Anda, misalnya kota / desa berbentuk panjang di lembah dll.). Anda kemudian dapat menghasilkan poligon atau elips atau hanya menampilkan lokasi yang merupakan anggota cluster.

Untuk pratinjau cepat hasil di Google Earth Anda juga bisa menggunakan SaTScan NAACCR ke Google Earth Conversion Tool .

Yang penting - jika Anda memutuskan untuk menjalankan simulasi Monte Carlo (minimum 99, saya pikir) Anda juga akan dapat mengatakan sesuatu tentang signifikansi statistik cluster Anda. Interpretasi dan pembenaran cluster ini akan menjadi masalah lain karena telah diperdebatkan dalam ilmu spasial selama setidaknya dua dekade terakhir (saya pikir;).

Anda dapat mencoba menjalankan analisis spasial murni mencari kelompok nilai tinggi, rendah atau tinggi & rendah. Jika Anda memiliki beberapa atribut temporal dalam data * harian Anda, agregasi mingguan) maka saya pikir akan sangat menarik untuk menjalankan beberapa model ruang-waktu.

Radek
sumber
2
Tampak Bagus - Jawaban Baik
Mapperz
5

SciPy memiliki paket pengelompokan (untuk python), Anda dapat menggunakannya dalam konsol python, menulis sebuah plugin sederhana untuk melakukan itu atau menggunakan PL / python di dalam postgis.

http://docs.scipy.org/doc/scipy/reference/cluster.html

Setelah analisis cukup gunakan f-tools untuk membuat convex hulls.

Pablo
sumber
Saya pengguna sederhana dengan pengalaman sangat sedikit tentang python tetapi saya akan memeriksanya - saya tahu saya harus belajar!
Adrian
Apakah pengelompokan SciPy memperhitungkan hubungan spasial antar poin?
radek
1
Anda tinggal menambahkan dua kovariat lagi untuk koordinat x dan y titik Anda.
Jose
5

Ada contoh serupa tentang apa yang ingin Anda lakukan menggunakan R dan GRASS di sini . Sebagai alternatif, Anda mungkin ingin menggunakan alat pengelompokan scipy seperti yang disarankan, dan kemudian lakukan perhitungan cembung cembung menggunakan metode ini .

Jose
sumber
3

Anda dapat mencoba plugin Ftools. Vector> Geoprocessing Tools> Convex Hulls.

Ada opsi untuk Create convex hulls based on input field, parameter kolom input harus berasal dari atribut titik input Anda.

Maning
sumber
Terima kasih untuk bantuannya. Bit convex hulls akan membuat poligon tetapi tidak mengidentifikasi apakah ada cluster atau di mana mereka berada. Saya benar-benar ingin menemukan cara menghubungkan titik dengan karakteristik serupa dalam jarak x km satu sama lain terlebih dahulu. Saya kira saya perlu menjalankan beberapa skrip yang secara unik mengidentifikasi keberadaan cluster dan memperbarui bidang tambahan di tabel postgis untuk anggota dari setiap cluster. Misalnya, membuat triangulasi Delaunay dan memfilter semua titik di mana sisi segitiga lebih panjang dari x km tetapi saya tidak tahu bagaimana melakukannya
Adrian