Daha çox

Pgr_dijkstra nəticələrini atributa görə necə birləşdirmək olar?


Yol / küçə başına çox bal toplayan bir masa ilə işləyirəm. PgRouting istifadə edirəmpgr_dijkstramənə bir yol vermək üçün bir üsul, ancaq yol / küçə üçün çox nöqtə qaytarır, pg-də yerləşmiş bir metodun olub olmadığını bilmək istərdim Nəticələri sütuna görə cəmləşdirmək üçün, bu halda eyni küçə adı mövcuddur. Nəticələr cədvəlini dəyişdirmək istəyirəm:

seq | dəyəri | küçə | st_asgeojson | ---- + ------ + ------------ + ---------------------- | 1 | 2.5 | Küçə 1 | {koordinatlar: {…} | 2 | 4.5 | Küçə 1 | {koordinatlar: {…} | 3 | 2.1 | Küçə 2 | {koordinatlar: {…} | 4 | 1.9 | Küçə 2 | {koordinatlar: {…} | 5 | 2.9 | Küçə 1 | {koordinatlar: {…} | 6 | 3.0 | | {koordinatlar: {…} | 7 | 4.5 | | {koordinatlar: {…} |

buna:

seq | dəyəri | küçə | st_asgeojson | ---- + ------ + ------------ + ---------------------- | 1 | 7.0 | Küçə 1 | {koordinatlar: {…} | 2 | 4.0 | Küçə 2 | {koordinatlar: {…} | 3 | 2.9 | Küçə 1 | {koordinatlar: {…} | 4 | 3.0 | | {koordinatlar: {…} | 5 | 4.5 | | {koordinatlar: {…} |

cari sorğu belədir:

Seq, dəyəri :: ikiqat dəqiqlik, küçə :: xarakter dəyişən (192), ST_AsGeoJSON (geom) FROM pgr_dijkstra ('SEÇİN AS AS id, source :: integer, target :: integer, cost :: double precision AS cost FROM my_table , get_nearest_vertex_to_lon_lat (lat_st, long_st), get_nearest_vertex_to_lon_lat (-9.1511504, 38.7487786), false, false) a LEFT JOIN my_table b ON (a.id2 = b.gid);

Çözüm çox gözəl deyil, amma bunun sizin üçün işləməyini düşünürəm:

İLƏ p AS (SEÇ SEK, maliyyət :: ikiqat dəqiqlik, küçə :: xarakter dəyişən (192), geom, - əgər bir küçə adı əvvəlki küçə adı ilə eyni deyilsə, - yeni bir qrupun başlanğıcı COALESCE (( lag (COALESCE (b.street, ")) OVER (SİFARİŞ r.seq))! = COALESCE (b.street,"), true) pgr_dijkstra FROM_Gruping olaraq ('SEÇİN AS AS id, source :: integer, target :: integer, cost :: ikiqat dəqiqlik AS dəyəri FROM my_table ', get_nearest_vertex_to_lon_lat (lat_st, long_st), get_nearest_vertex_to_lon_lat (-9.1511504, 38.7487786), false, false) a LEFT JOIN my_table b ON (a.id) = - ayrı qrupları PS AS aralığına ayırın (SEÇİN p.seq AS start_seq, COALESCE ((qurğuşun (p.seq) YÜKSƏK (SİFARİŞ SAYI p.seq) - 1), p.seq) End_seq OLDUĞU p harada IS_grouping) - - SELECT ps.start_seq, ps.end_seq, p.street, SUM (p.cost) maya dəyəri kimi, ST_AsGeoJSON (ST_Union (p.geom)) gjson FROM p INNER JOIN ps ON (p.seq ARASI ps .start_seq VƏ ps.end_seq) GROUP BY ps.start_seq, ps.end_seq, p.street SİFARİŞ ps.start_seq;

Xeyr, pgRouting-də yerləşmiş bir funksiya yoxdur. Ancaq PostgreSQL və PostGIS məcmu funksiyalarından istifadə edə bilərsinizcəmiSizin üçündəyərisütun və ST_Collect və ya ST_Birlik həndəsələr üçün.


Videoya baxın: Zəngilana bayraq sancıldı (Sentyabr 2021).