@@ -63,24 +63,31 @@ def getExportQuery(self, args):
6363 WITH
6464 result AS ( {result_query} ),
6565 departure AS (
66- SELECT start_vid, end_vid, ST_startPoint(geom) AS depart
67- FROM result JOIN {edge_table} ON ({edge_table}.{source} = start_vid)
68-
69- UNION
70-
71- SELECT start_vid, end_vid, ST_endPoint(geom)
72- FROM result JOIN {edge_table} ON ({edge_table}.{target} = start_vid)
73- ),
74-
66+ SELECT DISTINCT ON (start_vid, end_vid)
67+ start_vid, end_vid,
68+ CASE
69+ WHEN {edge_table}.{source} = start_vid
70+ THEN ST_StartPoint({edge_table}.{geometry})
71+ ELSE ST_EndPoint({edge_table}.{geometry})
72+ END AS depart
73+ FROM result
74+ JOIN {edge_schema}.{edge_table}
75+ ON ({edge_table}.{source} = start_vid OR {edge_table}.{target} = start_vid)
76+ ORDER BY start_vid, end_vid, {edge_table}.{id}
77+ ),
7578 destination AS (
76- SELECT start_vid, end_vid, ST_startPoint(geom) AS arrive
77- FROM result JOIN {edge_table} ON ({edge_table}.{source} = end_vid)
78-
79- UNION
80-
81- SELECT start_vid, end_vid, ST_endPoint(geom)
82- FROM result JOIN {edge_table} ON ({edge_table}.{target} = end_vid)
83- )
79+ SELECT DISTINCT ON (start_vid, end_vid)
80+ start_vid, end_vid,
81+ CASE
82+ WHEN {edge_table}.{source} = end_vid
83+ THEN ST_StartPoint({edge_table}.{geometry})
84+ ELSE ST_EndPoint({edge_table}.{geometry})
85+ END AS arrive
86+ FROM result
87+ JOIN {edge_schema}.{edge_table}
88+ ON ({edge_table}.{source} = end_vid OR {edge_table}.{target} = end_vid)
89+ ORDER BY start_vid, end_vid, {edge_table}.{id}
90+ )
8491
8592 SELECT result.*, ST_MakeLine(depart, arrive) AS path_geom
8693
0 commit comments