Skip to content

Commit 17b02fc

Browse files
committed
fixing bugs in TRSP functions
1 parent 6804bca commit 17b02fc

File tree

3 files changed

+44
-48
lines changed

3 files changed

+44
-48
lines changed

functions/trsp_edge.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
from .FunctionBase import FunctionBase
1111

1212
class Function(FunctionBase):
13-
13+
1414
@classmethod
1515
def getName(self):
1616
''' returns Function name. '''
1717
return 'trsp(edge)'
18-
18+
1919
@classmethod
2020
def getControlNames(self, version):
2121
''' returns control names. '''
@@ -24,17 +24,17 @@ def getControlNames(self, version):
2424
'labelSourcePos', 'lineEditSourcePos',
2525
'labelTargetId', 'lineEditTargetId', 'buttonSelectTargetId',
2626
'labelTargetPos', 'lineEditTargetPos',
27-
'labelTurnRestrictSql', 'plainTextEditTurnRestrictSql' ]
27+
'labelTurnRestrictSql', 'plainTextEditTurnRestrictSql' ]
28+
2829

29-
3030
@classmethod
3131
def isEdgeBase(self):
3232
return True
33-
33+
3434
def prepare(self, canvasItemList):
3535
resultPathRubberBand = canvasItemList['path']
3636
resultPathRubberBand.reset(Utils.getRubberBandType(False))
37-
37+
3838
def getQuery(self, args):
3939
''' returns the sql query in required signature format of pgr_trsp_edge '''
4040
args['where_clause'] = self.whereClause(args['edge_table'], args['geometry'], args['BBOX'])
@@ -46,22 +46,22 @@ def getQuery(self, args):
4646
FROM %(edge_table)s
4747
%(where_clause)s',
4848
%(source_id)s, %(source_pos)s, %(target_id)s, %(target_pos)s, %(directed)s, %(has_reverse_cost)s, %(turn_restrict_sql)s)""" % args
49-
49+
5050
def getExportQuery(self, args):
5151
args['result_query'] = 'result AS (' + self.getQuery(args) + ')'
5252

5353
args['max_seq_query'] = 'max_seq AS (SELECT max(seq), min(seq) FROM result) '
5454

5555
args['with_geom'] = """ with_geom AS (
5656
SELECT
57-
lead(_node) over(), result.*, %(edge_table)s.*
57+
lead(_node) over(), result.*, %(edge_table)s.*
5858
FROM %(edge_table)s JOIN result
59-
ON edge_table.id = result._edge ORDER BY result.seq)""" % args
59+
ON %(edge_table)s.%(id)s = result._edge ORDER BY result.seq)""" % args
6060

6161
args['first_row_split'] = self.getRowSplit(args, 'first')
6262
args['last_row_split'] = self.getRowSplit(args, 'last')
6363

64-
args['intermediate_rows'] = """ intermediate_rows AS (SELECT
64+
args['intermediate_rows'] = """ intermediate_rows AS (SELECT
6565
CASE
6666
WHEN result._node = %(edge_table)s.%(source)s
6767
THEN %(edge_table)s.%(geometry)s
@@ -92,14 +92,14 @@ def getExportMergeQuery(self, args):
9292

9393
args['with_geom'] = """ with_geom AS (
9494
SELECT
95-
lead(_node) over(), result.*, %(edge_table)s.*
95+
lead(_node) over(), result.*, %(edge_table)s.*
9696
FROM %(edge_table)s JOIN result
97-
ON edge_table.id = result._edge ORDER BY result.seq)""" % args
97+
ON %(edge_table)s.%(id)s = result._edge ORDER BY result.seq)""" % args
9898

9999
args['first_row_split'] = self.getRowSplit(args, 'first')
100100
args['last_row_split'] = self.getRowSplit(args, 'last')
101101

102-
args['intermediate_rows'] = """ intermediate_rows AS (SELECT
102+
args['intermediate_rows'] = """ intermediate_rows AS (SELECT
103103
CASE
104104
WHEN result._node = %(edge_table)s.%(source)s
105105
THEN %(edge_table)s.%(geometry)s
@@ -141,7 +141,7 @@ def draw(self, rows, con, args, geomType, canvasItemList, mapCanvas):
141141
args['result_node_id'] = row[1]
142142
args['result_edge_id'] = row[2]
143143
args['result_cost'] = row[3]
144-
144+
145145
if i == 0 and args['result_node_id'] == -1:
146146
args['result_next_node_id'] = rows[i + 1][1]
147147
query2 = """
@@ -170,13 +170,13 @@ def draw(self, rows, con, args, geomType, canvasItemList, mapCanvas):
170170
SELECT ST_AsText(%(transform_s)sST_Reverse(%(geometry)s)%(transform_e)s) FROM %(edge_table)s
171171
WHERE %(target)s = %(result_node_id)d AND %(id)s = %(result_edge_id)d;
172172
""" % args
173-
173+
174174
##Utils.logMessage(query2)
175175
cur2.execute(query2)
176176
row2 = cur2.fetchone()
177177
##Utils.logMessage(str(row2[0]))
178178
assert row2, "Invalid result geometry. (node_id:%(result_node_id)d, edge_id:%(result_edge_id)d)" % args
179-
179+
180180
geom = QgsGeometry().fromWkt(str(row2[0]))
181181
if geom.wkbType() == QgsWkbTypes.MultiLineString:
182182
for line in geom.asMultiPolyline():
@@ -185,9 +185,9 @@ def draw(self, rows, con, args, geomType, canvasItemList, mapCanvas):
185185
elif geom.wkbType() == QgsWkbTypes.LineString:
186186
for pt in geom.asPolyline():
187187
resultPathRubberBand.addPoint(pt)
188-
188+
189189
i = i + 1
190-
190+
191191
def getRowSplit(self, args, which):
192192
# PRIVATE method
193193
# upper case for localy defined string values
@@ -214,7 +214,7 @@ def getRowSplit(self, args, which):
214214
ST_LineInterpolatePoint(%(geometry)s, %(POSITION)s))
215215
ELSE
216216
ST_reverse( ST_split( ST_Snap( %(geometry)s, ST_LineInterpolatePoint(%(geometry)s, %(POSITION)s), 0.00001),
217-
ST_LineInterpolatePoint(%(geometry)s, %(POSITION)s)))
217+
ST_LineInterpolatePoint(%(geometry)s, %(POSITION)s)))
218218
END AS line_geom,
219219
st_length(%(geometry)s) AS length,
220220
_cost

functions/trsp_via_edges.py

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,22 @@
99
from .FunctionBase import FunctionBase
1010

1111
class Function(FunctionBase):
12-
12+
1313
@classmethod
1414
def getName(self):
1515
''' returns Function name. '''
1616
return 'trsp(via edges)'
17-
17+
1818
@classmethod
1919
def getControlNames(self, version):
2020
''' returns control names. '''
21-
return [
22-
'labelId', 'lineEditId',
23-
'labelSource', 'lineEditSource',
24-
'labelTarget', 'lineEditTarget',
25-
'labelCost', 'lineEditCost',
26-
'labelReverseCost', 'lineEditReverseCost',
21+
return self.commonControls + self.commonBoxes + [
2722
'labelIds', 'lineEditIds', 'buttonSelectIds',
2823
'labelPcts', 'lineEditPcts',
2924
'checkBoxDirected', 'checkBoxHasReverseCost',
3025
'labelTurnRestrictSql', 'plainTextEditTurnRestrictSql'
3126
]
32-
27+
3328
@classmethod
3429
def isEdgeBase(self):
3530
return True
@@ -41,9 +36,9 @@ def canExport(self):
4136
@classmethod
4237
def canExportMerged(self):
4338
return True
44-
39+
4540
def isSupportedVersion(self, version):
46-
return version >= 2.1
41+
return version >= 2.1
4742

4843
def prepare(self, canvasItemList):
4944
resultPathsRubberBands = canvasItemList['paths']
@@ -53,16 +48,17 @@ def prepare(self, canvasItemList):
5348

5449
def getQuery(self, args):
5550
''' returns the sql query in required signature format of trsp_via_edges '''
51+
args['where_clause'] = self.whereClause(args['edge_table'], args['geometry'], args['BBOX'])
5652
return """
5753
SELECT seq, id1 AS _path, id2 AS _node, id3 AS _edge, cost as _cost FROM pgr_trspViaEdges('
5854
SELECT %(id)s::int4 AS id,
5955
%(source)s::int4 AS source, %(target)s::int4 AS target,
6056
%(cost)s::float8 AS cost%(reverse_cost)s
6157
FROM %(edge_table)s
62-
WHERE %(edge_table)s.%(geometry)s && %(BBOX)s',
58+
%(where_clause)s',
6359
ARRAY[%(ids)s]::integer[], ARRAY[%(pcts)s]::float8[],
6460
%(directed)s, %(has_reverse_cost)s, %(turn_restrict_sql)s)""" % args
65-
61+
6662
def getQueries(self, args):
6763
args['edge_data_q'] = """
6864
edge_data AS (
@@ -77,7 +73,7 @@ def getQueries(self, args):
7773
ST_Reverse(ST_LineSubstring(%(geometry)s, 0, fraction)) as tosource
7874
FROM %(edge_table)s JOIN edge_data ON (%(edge_table)s.%(id)s = edge_data.eid)
7975
)
80-
""" % args
76+
""" % args
8177

8278
args['result_q'] = """
8379
result AS (
@@ -140,13 +136,13 @@ def getQueries(self, args):
140136

141137
def getExportQuery(self, args):
142138
self.getQueries(args)
143-
139+
144140
query = """
145141
WITH
146142
%(edge_data_q)s,
147143
%(result_q)s,
148144
%(the_rest_q)s
149-
SELECT
145+
SELECT
150146
all_edges.*, %(edge_table)s.*
151147
FROM %(edge_table)s JOIN all_edges
152148
ON %(edge_table)s.%(id)s = all_edges._edge ORDER BY all_edges.seq
@@ -155,7 +151,7 @@ def getExportQuery(self, args):
155151

156152
def getExportMergeQuery(self, args):
157153
self.getQueries(args)
158-
154+
159155
query = """
160156
WITH
161157
%(edge_data_q)s,
@@ -167,7 +163,7 @@ def getExportMergeQuery(self, args):
167163
ST_makeLine(path_geom) AS path_geom from all_edges
168164
""" % args
169165
return query
170-
166+
171167
def draw(self, rows, con, args, geomType, canvasItemList, mapCanvas):
172168
''' draw the result '''
173169
resultPathsRubberBands = canvasItemList['paths']
@@ -253,13 +249,13 @@ def draw(self, rows, con, args, geomType, canvasItemList, mapCanvas):
253249
SELECT ST_AsText(%(transform_s)sST_Reverse(%(geometry)s)%(transform_e)s) FROM %(edge_table)s
254250
WHERE %(target)s = %(result_node_id)d AND %(id)s = %(result_edge_id)d;
255251
""" % args
256-
252+
257253
##Utils.logMessage(query2)
258254
cur2.execute(query2)
259255
row2 = cur2.fetchone()
260256
##Utils.logMessage(str(row2[0]))
261257
assert row2, "Invalid result geometry. (node_id:%(result_node_id)d, edge_id:%(result_edge_id)d)" % args
262-
258+
263259
geom = QgsGeometry().fromWkt(str(row2[0]))
264260
if geom.wkbType() == QgsWkbTypes.MultiLineString:
265261
for line in geom.asMultiPolyline():
@@ -268,7 +264,7 @@ def draw(self, rows, con, args, geomType, canvasItemList, mapCanvas):
268264
elif geom.wkbType() == QgsWkbTypes.LineString:
269265
for pt in geom.asPolyline():
270266
rubberBand.addPoint(pt)
271-
267+
272268
i = i + 1
273269

274270
if rubberBand:

functions/trsp_via_vertices.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@
99
from .FunctionBase import FunctionBase
1010

1111
class Function(FunctionBase):
12-
12+
1313
@classmethod
1414
def getName(self):
1515
''' returns Function name. '''
1616
return 'trsp(via vertices)'
17-
17+
1818
@classmethod
1919
def getControlNames(self, version):
2020
''' returns control names. '''
2121
return self.commonControls + self.commonBoxes + [
2222
'labelIds', 'lineEditIds', 'buttonSelectIds',
2323
'labelTurnRestrictSql', 'plainTextEditTurnRestrictSql'
2424
]
25-
25+
2626

2727
def isSupportedVersion(self, version):
2828
''' checks the supported version '''
29-
return version >= 2.1
29+
return version >= 2.1
3030

3131
def prepare(self, canvasItemList):
3232
resultPathsRubberBands = canvasItemList['paths']
3333
for path in resultPathsRubberBands:
3434
path.reset(Utils.getRubberBandType(False))
3535
canvasItemList['paths'] = []
36-
36+
3737
def getQuery(self, args):
3838
''' returns the sql query in required signature format of trsp_via_vertices '''
3939
args['where_clause'] = self.whereClause(args['edge_table'], args['geometry'], args['BBOX'])
@@ -48,14 +48,14 @@ def getQuery(self, args):
4848
%(directed)s, %(has_reverse_cost)s,
4949
%(turn_restrict_sql)s)
5050
""" % args
51-
51+
5252
def getExportQuery(self, args):
5353
args['result_query'] = self.getQuery(args)
5454

5555
query = """
5656
WITH
5757
result AS ( %(result_query)s )
58-
SELECT
58+
SELECT
5959
CASE
6060
WHEN result._node = %(edge_table)s.%(source)s
6161
THEN %(edge_table)s.%(geometry)s
@@ -107,7 +107,7 @@ def draw(self, rows, con, args, geomType, canvasItemList, mapCanvas):
107107
row2 = cur2.fetchone()
108108
##Utils.logMessage(str(row2[0]))
109109
assert row2, "Invalid result geometry. (node_id:%(result_node_id)d, edge_id:%(result_edge_id)d)" % args
110-
110+
111111
geom = QgsGeometry().fromWkt(str(row2[0]))
112112
if geom.wkbType() == QgsWkbTypes.MultiLineString:
113113
for line in geom.asMultiPolyline():

0 commit comments

Comments
 (0)