Saya perlu menghubungkan halte bus (titik) ke lapisan jaringan (data OSM). Halte bus ini tidak terletak langsung di garis (lihat tangkapan layar) atau lokasinya tidak boleh dipindahkan. Saya menggunakan PostGIS, pgrouting dan QGIS dan jaringan sudah dapat dirutekan dengan sumber dan kolom target dll.
Terutama saya ingin melakukan dua hal setelahnya:
- Mendapatkan jarak antara halte bus menggunakan analisis jalur terpendek.
- Membuat isochrones dengan jarak berjalan kaki dari halte menggunakan jaringan OSM.
Untuk mendapatkan nilai yang tepat perlu, bahwa perutean 'dimulai' dan 'berhenti' paling dekat dengan halte bus. Dalam banyak kasus, simpul terdekat yang ada akan terlalu jauh untuk mendapatkan nilai yang tepat. Tetapi seharusnya tidak ada rute ke lokasi titik sebenarnya dari halte bus. Dalam contoh saya pada gambar, Anda dapat melihat seperti apa perutean antara berhenti.
Apakah ada kemungkinan untuk memasukkan node baru secara otomatis ke jaringan (LINESTRING) yang paling dekat dengan halte bus atau apakah mungkin untuk memulai routing pada semacam 'dummy point' yang diatur hanya untuk permintaan (mirip dengan apa jalannya) plugin grafik di QGIS tidak)?
Ini solusi lengkap saya. Ini melibatkan semacam peretasan untuk menyelesaikan pemisahan: Saya mendapatkan poin pada garis (cara, menggunakan terminologi OSM) menggunakan
ST_ClosestPoint
, dan kemudian buffer mereka dengan jarak yang sangat kecil untuk mendapatkan pemisahan agar benar-benar berfungsi. Kalau tidak, kesalahan pembulatan / pembulatan mencegah pemisahan.Ini memiliki masalah yang menghasilkan dua split pada setiap baris per titik (karena buffering). Untuk penggunaan saya ini baik-baik saja, karena kemudian saya diarahkan antara titik-titik pemisahan terdekat dengan titik-titik asli, yang berada di luar garis, dan itu bisa berupa salah satu dari dua titik pemisahan dari persimpangan garis-penyangga.
Saya mulai dengan mengunduh data OSM dan memasukkannya ke Postgres:
Memisahkan cara menggunakan buffer:
Buat topologi yang diperlukan untuk perutean dengan pgrouting:
sumber
Karena saya mengerjakan tugas yang sama, saya hanya ingin memberi tahu tentang pendekatan yang saya gunakan saat ini. Ini menggunakan GRASS GIS, tetapi sejauh percobaan saya dengan PostGIS berjalan, cukup rumit untuk menambahkan beberapa poin baru ke LineStrings yang ada dengan membagi LineStrings tersebut di lokasi masing-masing - walaupun saya yakin ada solusi yang mudah.
Saya sekarang memanfaatkan fungsi GRASS GIS
v.net
menggunakan opsiconnect
. Cukup pilihinput vector line layer
danpoints layer
. Ada opsi untuk mengambil titik ke titik terdekat pada garis, atau untuk membuat koneksi baru antara titik terdekat pada garis dan titik baru.Berikut ini adalah gambar sebelum dan sesudah. Di sisi kanan, untuk setiap titik lapisan poin ditambahkan node di roadnetwork:
Setelah itu di PostGIS, setelah membuat
..._vertices_pgr
tabel Anda dari roadnetwork, tetapkan saja poin Anda ke simpul terdekat sehingga Anda dapat menggunakannya dalam permintaan perutean Anda. Untuk tugas ini Anda dapat menggunakanST_ClosestPoint
fungsi seperti yang dilakukan oleh @Setraworks dalam jawabannya.Kerugian dari pendekatan ini adalah:
Pendekatan ini berfungsi dengan baik jika Anda memiliki jumlah poin yang pasti untuk ditambahkan ke roadnetwork (seperti dalam contoh pertanyaan dengan halte bus).
Jika ada yang bisa memberikan contoh kerja menggunakan PostGIS saya akan senang membaca tentang itu!
sumber
Ada posting yang membahas masalah serupa, Anda dapat melihat posting itu di lokasi berikut: http://osdir.com/ml/qgis-user-gis/2011-11/msg00220.html
sumber