چطور کوتاهترین مسیر بین دو نقطه را با pgRouting پیدا کنم؟
پاسخ کوتاه
نزدیکترین گره شبکه به هر نقطه را پیدا و با pgr_dijkstra روی routing.ways مسیر را بگیرید. نمونه آماده در صفحه «داده آماده ایران» هم هست.
پیشنیاز: شبکه مسیریابی را وارد کرده باشید.
WITH a AS (SELECT id FROM routing.ways_vertices_pgr
ORDER BY the_geom <-> ST_SetSRID(ST_MakePoint(51.389, 35.700), 4326) LIMIT 1),
b AS (SELECT id FROM routing.ways_vertices_pgr
ORDER BY the_geom <-> ST_SetSRID(ST_MakePoint(51.420, 35.760), 4326) LIMIT 1)
SELECT r.seq, w.name, w.length_m, w.the_geom
FROM pgr_dijkstra(
'SELECT gid AS id, source, target, cost, reverse_cost FROM routing.ways',
(SELECT id FROM a), (SELECT id FROM b)) r
JOIN routing.ways w ON w.gid = r.edge;
- مختصات (طول، عرض) را عوض کنید.
- نتیجه را در کنسول SQL روی نقشه ببینید یا در QGIS لایه کنید.
- جمع طول:
SUM(w.length_m)برای کل مسیر. - جهت یکطرفهها در
costوreverse_costلحاظ شده است.
آیا این مقاله به شما کمک کرد؟
هنوز جواب نگرفتید؟ به پشتیبانی بگویید.