Skip to content

Commit f3f74a9

Browse files
committedJul 17, 2017
[processing] adapt network analysis algorithms to latest API changes
1 parent 4a6ceff commit f3f74a9

File tree

5 files changed

+62
-63
lines changed

5 files changed

+62
-63
lines changed
 

‎python/plugins/processing/algs/qgis/ServiceAreaFromLayer.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
QgsProcessingParameterString,
4747
QgsProcessingParameterFeatureSource,
4848
QgsProcessingParameterFeatureSink,
49-
QgsProcessingParameterVectorLayer,
5049
QgsProcessingParameterDefinition)
5150
from qgis.analysis import (QgsVectorLayerDirector,
5251
QgsNetworkDistanceStrategy,
@@ -97,9 +96,9 @@ def initAlgorithm(self, config=None):
9796
self.tr('Fastest')
9897
]
9998

100-
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT,
101-
self.tr('Vector layer representing network'),
102-
[QgsProcessing.TypeVectorLine]))
99+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
100+
self.tr('Vector layer representing network'),
101+
[QgsProcessing.TypeVectorLine]))
103102
self.addParameter(QgsProcessingParameterFeatureSource(self.START_POINTS,
104103
self.tr('Vector layer with start points'),
105104
[QgsProcessing.TypeVectorPoint]))
@@ -165,7 +164,7 @@ def displayName(self):
165164
return self.tr('Service area (from layer)')
166165

167166
def processAlgorithm(self, parameters, context, feedback):
168-
layer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
167+
network = self.parameterAsSource(parameters, self.INPUT, context)
169168
startPoints = self.parameterAsSource(parameters, self.START_POINTS, context)
170169
strategy = self.parameterAsEnum(parameters, self.STRATEGY, context)
171170
travelCost = self.parameterAsDouble(parameters, self.TRAVEL_COST, context)
@@ -188,12 +187,12 @@ def processAlgorithm(self, parameters, context, feedback):
188187

189188
directionField = -1
190189
if directionFieldName:
191-
directionField = layer.fields().lookupField(directionFieldName)
190+
directionField = network.fields().lookupField(directionFieldName)
192191
speedField = -1
193192
if speedFieldName:
194-
speedField = layer.fields().lookupField(speedFieldName)
193+
speedField = network.fields().lookupField(speedFieldName)
195194

196-
director = QgsVectorLayerDirector(layer,
195+
director = QgsVectorLayerDirector(network,
197196
directionField,
198197
forwardValue,
199198
backwardValue,
@@ -217,9 +216,9 @@ def processAlgorithm(self, parameters, context, feedback):
217216
feedback.pushInfo(self.tr('Loading start points...'))
218217
request = QgsFeatureRequest()
219218
request.setFlags(request.flags() ^ QgsFeatureRequest.SubsetOfAttributes)
220-
request.setDestinationCrs(layer.crs())
221-
features = source.getFeatures(request)
222-
total = 100.0 / source.featureCount() if source.featureCount() else 0
219+
request.setDestinationCrs(network.sourceCrs())
220+
features = startPoints.getFeatures(request)
221+
total = 100.0 / startPoints.featureCount() if startPoints.featureCount() else 0
223222

224223
points = []
225224
for current, f in enumerate(features):
@@ -230,17 +229,17 @@ def processAlgorithm(self, parameters, context, feedback):
230229
feedback.setProgress(int(current * total))
231230

232231
feedback.pushInfo(self.tr('Building graph...'))
233-
snappedPoints = director.makeGraph(builder, points)
232+
snappedPoints = director.makeGraph(builder, points, feedback)
234233

235234
feedback.pushInfo(self.tr('Calculating service areas...'))
236235
graph = builder.graph()
237236

238237
results = {}
239238
(sinkPoints, pointsId) = self.parameterAsSink(parameters, self.OUTPUT_POINTS, context,
240-
fields, QgsWkbTypes.MultiPoint, layer.crs())
239+
fields, QgsWkbTypes.MultiPoint, network.sourceCrs())
241240

242241
(sinkPolygon, polygonId) = self.parameterAsSink(parameters, self.OUTPUT_POLYGON, context,
243-
fields, QgsWkbTypes.Polygon, layer.crs())
242+
fields, QgsWkbTypes.Polygon, network.sourceCrs())
244243

245244
if sinkPoints:
246245
results[self.OUTPUT_POINTS] = pointsId

‎python/plugins/processing/algs/qgis/ServiceAreaFromPoint.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
QgsProcessingParameterNumber,
4646
QgsProcessingParameterString,
4747
QgsProcessingParameterFeatureSink,
48-
QgsProcessingParameterVectorLayer,
48+
QgsProcessingParameterFeatureSource,
4949
QgsProcessingParameterDefinition)
5050
from qgis.analysis import (QgsVectorLayerDirector,
5151
QgsNetworkDistanceStrategy,
@@ -96,9 +96,9 @@ def initAlgorithm(self, config=None):
9696
self.tr('Fastest')
9797
]
9898

99-
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT,
100-
self.tr('Vector layer representing network'),
101-
[QgsProcessing.TypeVectorLine]))
99+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
100+
self.tr('Vector layer representing network'),
101+
[QgsProcessing.TypeVectorLine]))
102102
self.addParameter(QgsProcessingParameterPoint(self.START_POINT,
103103
self.tr('Start point')))
104104
self.addParameter(QgsProcessingParameterEnum(self.STRATEGY,
@@ -163,7 +163,7 @@ def displayName(self):
163163
return self.tr('Service area (from point)')
164164

165165
def processAlgorithm(self, parameters, context, feedback):
166-
layer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
166+
network = self.parameterAsSource(parameters, self.INPUT, context)
167167
startPoint = self.parameterAsPoint(parameters, self.START_POINT, context)
168168
strategy = self.parameterAsEnum(parameters, self.STRATEGY, context)
169169
travelCost = self.parameterAsDouble(parameters, self.TRAVEL_COST, context)
@@ -179,12 +179,12 @@ def processAlgorithm(self, parameters, context, feedback):
179179

180180
directionField = -1
181181
if directionFieldName:
182-
directionField = layer.fields().lookupField(directionFieldName)
182+
directionField = network.fields().lookupField(directionFieldName)
183183
speedField = -1
184184
if speedFieldName:
185-
speedField = layer.fields().lookupField(speedFieldName)
185+
speedField = network.fields().lookupField(speedFieldName)
186186

187-
director = QgsVectorLayerDirector(layer,
187+
director = QgsVectorLayerDirector(network,
188188
directionField,
189189
forwardValue,
190190
backwardValue,
@@ -205,7 +205,7 @@ def processAlgorithm(self, parameters, context, feedback):
205205
True,
206206
tolerance)
207207
feedback.pushInfo(self.tr('Building graph...'))
208-
snappedPoints = director.makeGraph(builder, [startPoint])
208+
snappedPoints = director.makeGraph(builder, [startPoint], feedback)
209209

210210
feedback.pushInfo(self.tr('Calculating service area...'))
211211
graph = builder.graph()
@@ -238,10 +238,10 @@ def processAlgorithm(self, parameters, context, feedback):
238238
geomLower = QgsGeometry.fromMultiPoint(lowerBoundary)
239239

240240
(sinkPoints, pointsId) = self.parameterAsSink(parameters, self.OUTPUT_POINTS, context,
241-
fields, QgsWkbTypes.MultiPoint, layer.crs())
241+
fields, QgsWkbTypes.MultiPoint, network.sourceCrs())
242242

243243
(sinkPolygon, polygonId) = self.parameterAsSink(parameters, self.OUTPUT_POLYGON, context,
244-
fields, QgsWkbTypes.Polygon, layer.crs())
244+
fields, QgsWkbTypes.Polygon, network.sourceCrs())
245245
results = {}
246246
if sinkPoints:
247247
feat.setGeometry(geomUpper)

‎python/plugins/processing/algs/qgis/ShortestPathLayerToPoint.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
QgsProcessingParameterString,
4848
QgsProcessingParameterFeatureSource,
4949
QgsProcessingParameterFeatureSink,
50-
QgsProcessingParameterVectorLayer,
5150
QgsProcessingParameterDefinition)
5251
from qgis.analysis import (QgsVectorLayerDirector,
5352
QgsNetworkDistanceStrategy,
@@ -97,9 +96,9 @@ def initAlgorithm(self, config=None):
9796
self.tr('Fastest')
9897
]
9998

100-
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT,
101-
self.tr('Vector layer representing network'),
102-
[QgsProcessing.TypeVectorLine]))
99+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
100+
self.tr('Vector layer representing network'),
101+
[QgsProcessing.TypeVectorLine]))
103102
self.addParameter(QgsProcessingParameterFeatureSource(self.START_POINTS,
104103
self.tr('Vector layer with start points'),
105104
[QgsProcessing.TypeVectorPoint]))
@@ -158,7 +157,7 @@ def displayName(self):
158157
return self.tr('Shortest path (layer to point)')
159158

160159
def processAlgorithm(self, parameters, context, feedback):
161-
layer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
160+
network = self.parameterAsSource(parameters, self.INPUT, context)
162161
startPoints = self.parameterAsSource(parameters, self.START_POINTS, context)
163162
endPoint = self.parameterAsPoint(parameters, self.END_POINT, context)
164163
strategy = self.parameterAsEnum(parameters, self.STRATEGY, context)
@@ -181,16 +180,16 @@ def processAlgorithm(self, parameters, context, feedback):
181180
feat.setFields(fields)
182181

183182
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
184-
fields, QgsWkbTypes.LineString, layer.crs())
183+
fields, QgsWkbTypes.LineString, network.sourceCrs())
185184

186185
directionField = -1
187186
if directionFieldName:
188-
directionField = layer.fields().lookupField(directionFieldName)
187+
directionField = network.fields().lookupField(directionFieldName)
189188
speedField = -1
190189
if speedFieldName:
191-
speedField = layer.fields().lookupField(speedFieldName)
190+
speedField = network.fields().lookupField(speedFieldName)
192191

193-
director = QgsVectorLayerDirector(layer,
192+
director = QgsVectorLayerDirector(network,
194193
directionField,
195194
forwardValue,
196195
backwardValue,
@@ -215,9 +214,9 @@ def processAlgorithm(self, parameters, context, feedback):
215214
feedback.pushInfo(self.tr('Loading start points...'))
216215
request = QgsFeatureRequest()
217216
request.setFlags(request.flags() ^ QgsFeatureRequest.SubsetOfAttributes)
218-
request.setDestinationCrs(layer.crs())
219-
features = source.getFeatures(request)
220-
total = 100.0 / source.featureCount() if source.featureCount() else 0
217+
request.setDestinationCrs(network.sourceCrs())
218+
features = startPoints.getFeatures(request)
219+
total = 100.0 / startPoints.featureCount() if startPoints.featureCount() else 0
221220

222221
points = [endPoint]
223222
for current, f in enumerate(features):
@@ -228,15 +227,16 @@ def processAlgorithm(self, parameters, context, feedback):
228227
feedback.setProgress(int(current * total))
229228

230229
feedback.pushInfo(self.tr('Building graph...'))
231-
snappedPoints = director.makeGraph(builder, points)
230+
snappedPoints = director.makeGraph(builder, points, feedback)
232231

233232
feedback.pushInfo(self.tr('Calculating shortest paths...'))
234233
graph = builder.graph()
235234

236235
idxEnd = graph.findVertex(snappedPoints[0])
237236
route = []
238237

239-
total = 100.0 / source.featureCount() if source.featureCount() else 1
238+
nPoints = len(snappedPoints)
239+
total = 100.0 / nPoints if nPoints else 1
240240
for i in range(1, count + 1):
241241
if feedback.isCanceled():
242242
break

‎python/plugins/processing/algs/qgis/ShortestPathPointToLayer.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
QgsProcessingParameterString,
4848
QgsProcessingParameterFeatureSource,
4949
QgsProcessingParameterFeatureSink,
50-
QgsProcessingParameterVectorLayer,
5150
QgsProcessingParameterDefinition)
5251
from qgis.analysis import (QgsVectorLayerDirector,
5352
QgsNetworkDistanceStrategy,
@@ -97,9 +96,9 @@ def initAlgorithm(self, config=None):
9796
self.tr('Fastest')
9897
]
9998

100-
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT,
101-
self.tr('Vector layer representing network'),
102-
[QgsProcessing.TypeVectorLine]))
99+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
100+
self.tr('Vector layer representing network'),
101+
[QgsProcessing.TypeVectorLine]))
103102
self.addParameter(QgsProcessingParameterPoint(self.START_POINT,
104103
self.tr('Start point')))
105104
self.addParameter(QgsProcessingParameterFeatureSource(self.END_POINTS,
@@ -158,7 +157,7 @@ def displayName(self):
158157
return self.tr('Shortest path (point to layer)')
159158

160159
def processAlgorithm(self, parameters, context, feedback):
161-
layer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
160+
network = self.parameterAsSource(parameters, self.INPUT, context)
162161
startPoint = self.parameterAsPoint(parameters, self.START_POINT, context)
163162
endPoints = self.parameterAsSource(parameters, self.END_POINTS, context)
164163
strategy = self.parameterAsEnum(parameters, self.STRATEGY, context)
@@ -181,16 +180,16 @@ def processAlgorithm(self, parameters, context, feedback):
181180
feat.setFields(fields)
182181

183182
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
184-
fields, QgsWkbTypes.LineString, layer.crs())
183+
fields, QgsWkbTypes.LineString, network.sourceCrs())
185184

186185
directionField = -1
187186
if directionFieldName:
188-
directionField = layer.fields().lookupField(directionFieldName)
187+
directionField = network.fields().lookupField(directionFieldName)
189188
speedField = -1
190189
if speedFieldName:
191-
speedField = layer.fields().lookupField(speedFieldName)
190+
speedField = network.fields().lookupField(speedFieldName)
192191

193-
director = QgsVectorLayerDirector(layer,
192+
director = QgsVectorLayerDirector(network,
194193
directionField,
195194
forwardValue,
196195
backwardValue,
@@ -215,9 +214,9 @@ def processAlgorithm(self, parameters, context, feedback):
215214
feedback.pushInfo(self.tr('Loading end points...'))
216215
request = QgsFeatureRequest()
217216
request.setFlags(request.flags() ^ QgsFeatureRequest.SubsetOfAttributes)
218-
request.setDestinationCrs(layer.crs())
219-
features = source.getFeatures(request)
220-
total = 100.0 / source.featureCount() if source.featureCount() else 0
217+
request.setDestinationCrs(network.sourceCrs())
218+
features = endPoints.getFeatures(request)
219+
total = 100.0 / endPoints.featureCount() if endPoints.featureCount() else 0
221220

222221
points = [startPoint]
223222
for current, f in enumerate(features):
@@ -228,7 +227,7 @@ def processAlgorithm(self, parameters, context, feedback):
228227
feedback.setProgress(int(current * total))
229228

230229
feedback.pushInfo(self.tr('Building graph...'))
231-
snappedPoints = director.makeGraph(builder, points)
230+
snappedPoints = director.makeGraph(builder, points, feedback)
232231

233232
feedback.pushInfo(self.tr('Calculating shortest paths...'))
234233
graph = builder.graph()
@@ -237,7 +236,8 @@ def processAlgorithm(self, parameters, context, feedback):
237236
tree, cost = QgsGraphAnalyzer.dijkstra(graph, idxStart, 0)
238237
route = []
239238

240-
total = 100.0 / source.featureCount() if source.featureCount() else 1
239+
nPoints = len(snappedPoints)
240+
total = 100.0 / nPoints if nPoints else 1
241241
for i in range(1, count + 1):
242242
if feedback.isCanceled():
243243
break

‎python/plugins/processing/algs/qgis/ShortestPathPointToPoint.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@
4646
QgsProcessingParameterField,
4747
QgsProcessingParameterNumber,
4848
QgsProcessingParameterString,
49+
QgsProcessingParameterFeatureSource,
4950
QgsProcessingParameterFeatureSink,
50-
QgsProcessingParameterVectorLayer,
5151
QgsProcessingParameterDefinition)
5252
from qgis.analysis import (QgsVectorLayerDirector,
5353
QgsNetworkDistanceStrategy,
@@ -98,9 +98,9 @@ def initAlgorithm(self, config=None):
9898
self.tr('Fastest')
9999
]
100100

101-
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT,
102-
self.tr('Vector layer representing network'),
103-
[QgsProcessing.TypeVectorLine]))
101+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
102+
self.tr('Vector layer representing network'),
103+
[QgsProcessing.TypeVectorLine]))
104104
self.addParameter(QgsProcessingParameterPoint(self.START_POINT,
105105
self.tr('Start point')))
106106
self.addParameter(QgsProcessingParameterPoint(self.END_POINT,
@@ -160,7 +160,7 @@ def displayName(self):
160160
return self.tr('Shortest path (point to point)')
161161

162162
def processAlgorithm(self, parameters, context, feedback):
163-
layer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
163+
network = self.parameterAsSource(parameters, self.INPUT, context)
164164
startPoint = self.parameterAsPoint(parameters, self.START_POINT, context)
165165
endPoint = self.parameterAsPoint(parameters, self.END_POINT, context)
166166
strategy = self.parameterAsEnum(parameters, self.STRATEGY, context)
@@ -180,16 +180,16 @@ def processAlgorithm(self, parameters, context, feedback):
180180
fields.append(QgsField('cost', QVariant.Double, '', 20, 7))
181181

182182
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
183-
fields, QgsWkbTypes.LineString, layer.crs())
183+
fields, QgsWkbTypes.LineString, network.sourceCrs())
184184

185185
directionField = -1
186186
if directionField:
187-
directionField = layer.fields().lookupField(directionFieldName)
187+
directionField = network.fields().lookupField(directionFieldName)
188188
speedField = -1
189189
if speedFieldName:
190-
speedField = layer.fields().lookupField(speedFieldName)
190+
speedField = network.fields().lookupField(speedFieldName)
191191

192-
director = QgsVectorLayerDirector(layer,
192+
director = QgsVectorLayerDirector(network,
193193
directionField,
194194
forwardValue,
195195
backwardValue,
@@ -211,7 +211,7 @@ def processAlgorithm(self, parameters, context, feedback):
211211
True,
212212
tolerance)
213213
feedback.pushInfo(self.tr('Building graph...'))
214-
snappedPoints = director.makeGraph(builder, [startPoint, endPoint])
214+
snappedPoints = director.makeGraph(builder, [startPoint, endPoint], feedback)
215215

216216
feedback.pushInfo(self.tr('Calculating shortest path...'))
217217
graph = builder.graph()

0 commit comments

Comments
 (0)
Please sign in to comment.