Lagi

Geometri kosong yang dihasilkan dari fungsi pgrouting

Geometri kosong yang dihasilkan dari fungsi pgrouting


Mari saya mulai dengan mengatakan bahwa saya berasumsi bahwa saya melewatkan sesuatu yang sangat konyol tetapi saya tidak dapat melihatnya.

Saya memiliki tabel poin dan saya mencoba membuat poligon di sekitar setiap titik yang memperkirakan jarak mengemudi maksimum 1000m dari titik tersebut.

Saya menggunakan lapisan jalan Ordnance Survey Vector Map District saat ini yang dimuat ke dalam postgis sebagai multilinestring, dengan Postgis 2.2 dan Postgres 9.3. Semua lapisan menggunakan proyeksi OSGB 27700. Data titik memiliki kolom yang berisi simpul jalan terdekat yang dihitung dari data jalan sumber.

Ketika saya menjalankan SQL untuk satu titik untuk menghasilkan daftar masing-masing jalan menggunakan jarak mengemudi pgrouting, ini berfungsi dengan baik:

SELECT seq, id1 AS node, id2 AS edge, cost, geom FROM pgr_drivingdistance( 'SELECT gid AS id, source, target, st_length(geom) as cost FROM public.os_vd_2014_road', 1529980, -- The node 1000, -- The driving distance false, false ) as di JOIN os_vd_2014_road_nodes AS pt ON di.id1 = pt.id;

(Karena ini pada dasarnya adalah kode Anita Graser dari contohnya, saya tidak mengharapkan yang lain).

Namun, saya ingin membuat kasus umum, idealnya mengembalikan poligon yang menampilkan batas setiap rute tetapi setidaknya satu geometri untuk setiap titik.

Untuk melakukan ini, saya membuat fungsi yang diharapkan akan melakukan itu untuk titik tertentu, dan kemudian memanggilnya dalam pernyataan SELECT sederhana:

BUAT ATAU GANTI FUNGSI vdsl_hull (integer, integer) MENGEMBALIKAN geometri AS $$ SELECT St_Collect(geom) AS the_geom FROM pgr_drivingdistance( 'SELECT gid AS id, source, target, st_length(geom) as cost FROM public.os_vd_ -2014_road', $1 -2014_road' - Node $2, -- Driving distance false, false ) as di JOIN os_vd_2014_road_nodes AS pt ON di.id1 = pt.id; $$ BAHASA SQL; PILIH bt_pcp_list.pcp_id, bt_pcp_list.id AS gid, vdsl_hull(bt_pcp_list.nearest_node, 1000) AS the_geom FROM public.bt_pcp_list WHERE district_code = 'SMBRD';

Ini "tampaknya" berfungsi karena menghasilkan output untuk setiap titik, nilai "gid" yang valid, dan kolom berlabel "the_geom" tetapi kolom geometri kosong. Tahap selanjutnya adalah mengelilingi ST_Collect dengan ST_ConcaveHull() tapi jelas itu tahap yang terlalu jauh untuk saat ini.

Saya berasumsi kesalahan dalam pemikiran saya ada hubungannya dengan geometri yang dihasilkan dari ST_Collect tetapi bisa sepenuhnya salah.

Bantuan apa pun akan sangat diterima!


Saya pikir masalahnya adalah fungsi pgr_drivingdistance kembali:

set pgr_costResult[]:
seq: urutan baris
id1: ID simpul
id2: ID tepi
biaya: biaya untuk mencapai ID simpul ini

Anda tidak memiliki geometri di sini ...

Anda harus menggabungkan hasil ini lagi dengan tabel os_vd_2014_road untuk mencapai geometri dan kemudian st_collect dan st_concavehull


Geometri kosong yang dihasilkan dari fungsi pgrouting - Sistem Informasi Geografis

Saya mengutak-atik plugin GRASS di QGIS untuk menghasilkan DAS dan DAS serta mampu mengidentifikasi semua DAS dan DAS yang mengarah ke satu titik (tergantung di mana saya memilih untuk mempertanyakan informasi).

Melalui penelitian, saya menemukan seseorang yang membuat sesuatu yang mirip dengan apa yang akan dia dapatkan di archHYDRO dengan QGIS dan mengikuti langkahnya, saya dibawa untuk menggunakan fungsi GRASS r.stream.extract, tetapi lapisan yang dihasilkan pasti terlalu padat untuk saya. tujuan. Karena proses ini memakan waktu yang cukup lama, untuk menghindari mengulanginya, saya mencari klarifikasi mengenai pengaturan algoritme dan mana yang harus dinaikkan agar hasilnya sedikit kurang padat.

Saya telah meninggalkan semua pengaturan secara default dalam upaya pertama saya. Saya tentu saja akan melanjutkan penelitian saya untuk mencoba dan mengklarifikasi ini.

Kecurigaan saya adalah bagian "Akumulasi aliran minimum untuk aliran" dan "Hapus segmen aliran yang lebih pendek dari sel" yang dapat dimainkan, tetapi saya tidak tahu skala dampak yang akan ditimbulkan oleh angka.

Berikut tampilannya:

Anda perlu menyesuaikan parameter "ambang", yang merupakan akumulasi aliran minimum untuk aliran di GUI Pemrosesan. Dengan parameter ini Anda menentukan berapa luas drainase minimum untuk setiap jangkauan aliran. Satuannya adalah piksel. Jadi pada gambar di atas, dengan akumulasi aliran Minimum=1 Anda akan membuat jaringan aliran yang sangat padat, di mana setiap piksel adalah tangkapan kecil.

Untuk memilih nilai yang benar, Anda perlu mengetahui resolusi DEM asli Anda, SSRaster_filled, dan area minimum apa yang ingin Anda atur. Berikut adalah dua contoh:


  • Jika saya menggunakan data elevasi SRTM yang terkenal, resolusinya adalah 30 meter, jadi setiap piksel mencakup 900 meter persegi. Kemudian misalkan saya ingin area drainase minimum menjadi 10 kilometer persegi (10.000.000 sq m), saya akan memilih nilai ambang batas 11,000. Itu 10.000.000 / 900.
  • Jika DEM saya adalah resolusi 10 meter, dan saya ingin luas drainase minimal 2 km persegi, maka saya akan memilih ambang 2.000.000 / 100 = 20,000

Beberapa sumber GRASS untuk informasi lebih lanjut: di wiki GRASS dan halaman manual HTH


Tonton videonya: QGeek 004 - NETWORK ANALYSIS IN QGIS - POSTGISPGROUTINGOSM2PGROUTING