Saya mencoba mengidentifikasi di mana jalan berpotongan satu sama lain, dan membuat titik di persimpangan ini, dengan jumlah jalan yang membentuk persimpangan terdaftar.
Saya bertanya-tanya apakah ada cara menggunakan ST_NumPoints untuk mencapai ini, tetapi saya tidak tahu apa yang harus saya lakukan. Apa yang telah saya lakukan adalah membuat tabel poin di mana garis-garis berpotongan menggunakan kode berikut:
CREATE TABLE test_points as
SELECT
ST_Intersection(a.geom, b.geom),
a.gid
FROM
roads as a,
roads as b
WHERE
ST_Touches(a.geom, b.geom);
Jika saya menjalankan ini pada sampel jalan saya mendapatkan kotak titik berikut (jalan ditunjukkan untuk ilustrasi):
Jika saya memeriksa salah satu poin, saya melihat bahwa ada banyak poin yang saling menumpuk:
GID di sini adalah ID jalan, tapi saya tidak mengerti mengapa ada beberapa poin. Saya bisa mengerti 4 poin dihitung untuk persimpangan jalan pusat, tetapi ada 12 poin yang tercantum di sini. Apakah ada cara yang lebih baik untuk melakukan perhitungan ini di PostGIS?
COUNT()
sepertiCOUNT(ST_Touches(..))
danCOUNT(ST_Intersection(..))
tetapi ini sepertinya tidak berhasil karena semua nilainya12
.Ini sedikit lebih rumit dari yang Anda duga. Itu karena tidak ada cara yang baik dalam menganalisis hubungan untuk lebih dari pasangan. Anda tidak dapat menempatkan tiga baris ke dalam fungsi dan bertanya apakah semuanya berpotongan.
Tapi, setidaknya satu pendekatan bisa menjadi yang pertama menemukan penyeberangan, lalu periksa berapa banyak jalan yang bersinggungan di setiap penyeberangan (semua bisa dilakukan dalam permintaan yang sama).
Jika jalan Anda terhubung dengan sempurna satu sama lain, dan tidak ada jalan yang melewati persimpangan, maka Anda dapat melakukan sesuatu seperti ini (tidak diuji):
diedit dengan klausa grup yang terlupakan (masih belum diuji):
Jika jalan tidak terhubung dengan benar dan / atau beberapa jalan melewati persimpangan, itu lebih rumit.
HTH
Nicklas
sumber
distinct_crosspoints ,roads
dengan nama tabel saya (roads_test
)? Saya memang mencobanya tetapi kemudian mendapat kesalahan tentanggeom
menjadi ambigu.Jika garis A (id 1) melintasi garis B (id 2) itu adalah titik persimpangan yang kita butuhkan. Tetapi garis B juga melintasi garis A pada titik yang sama. Tetapi kita tidak membutuhkan poin ini dua kali. Itu sebabnya saya menggunakan
a.gid < b.gid
sebagai gantinyaa.gid != b.gid
sumber