Skip to content

Commit a5ddab6

Browse files
authoredAug 5, 2017
Merge pull request #4950 from nyalldawson/algs
Port some more algs to new API
2 parents ca1abdc + 470afbe commit a5ddab6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2141
-675
lines changed
 

‎python/plugins/processing/algs/help/qgis.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ qgis:generatepointspixelcentroidsinsidepolygons:
242242

243243

244244
qgis:hublines:
245+
This algorithm creates hub and spoke diagrams with lines drawn from points on the Spoke Point layer to matching points in the Hub Point layer.
245246

247+
Determination of which hub goes with each point is based on a match between the Hub ID field on the hub points and the Spoke ID field on the spoke points.
246248

247249
qgis:hypsometriccurves: >
248250
This algorithm computes hypsometric curves for an input Digital Elevation Model. Curves are produced as table files in an output folder specified by the user.
@@ -368,7 +370,9 @@ qgis:pointslayerfromtable: >
368370
The attributes table of the resulting layer will be the input table.
369371

370372
qgis:pointstopath:
373+
Converts a point layer to a line layer, by joining points in a defined order.
371374

375+
Points can be grouped by a field to output individual line features per group.
372376

373377
qgis:polarplot: >
374378
This algorithm generates a polar plot based on the value of an input vector layer.

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

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,14 @@
3434
QgsFeature,
3535
QgsFeatureSink,
3636
QgsGeometry,
37-
QgsMessageLog,
38-
QgsProcessingUtils)
37+
QgsProcessingException,
38+
QgsProcessingUtils,
39+
QgsProcessingParameterVectorLayer,
40+
QgsProcessingParameterEnum,
41+
QgsProcessing,
42+
QgsProcessingParameterFeatureSink)
3943

4044
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
41-
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
42-
from processing.core.parameters import ParameterVector
43-
from processing.core.parameters import ParameterSelection
44-
from processing.core.outputs import OutputVector
45-
from processing.tools import dataobjects
4645

4746
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
4847

@@ -67,16 +66,17 @@ def __init__(self):
6766
super().__init__()
6867

6968
def initAlgorithm(self, config=None):
70-
self.modes = [self.tr('Largest area'),
69+
self.modes = [self.tr('Largest Area'),
7170
self.tr('Smallest Area'),
72-
self.tr('Largest common boundary')]
71+
self.tr('Largest Common Boundary')]
7372

74-
self.addParameter(ParameterVector(self.INPUT,
75-
self.tr('Input layer'), [dataobjects.TYPE_VECTOR_POLYGON]))
76-
self.addParameter(ParameterSelection(self.MODE,
77-
self.tr('Merge selection with the neighbouring polygon with the'),
78-
self.modes))
79-
self.addOutput(OutputVector(self.OUTPUT, self.tr('Eliminated'), datatype=[dataobjects.TYPE_VECTOR_POLYGON]))
73+
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT,
74+
self.tr('Input layer'), [QgsProcessing.TypeVectorPolygon]))
75+
self.addParameter(QgsProcessingParameterEnum(self.MODE,
76+
self.tr('Merge selection with the neighbouring polygon with the'),
77+
options=self.modes))
78+
79+
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Eliminated'), QgsProcessing.TypeVectorPolygon))
8080

8181
def name(self):
8282
return 'eliminateselectedpolygons'
@@ -85,29 +85,32 @@ def displayName(self):
8585
return self.tr('Eliminate selected polygons')
8686

8787
def processAlgorithm(self, parameters, context, feedback):
88-
inLayer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT), context)
89-
boundary = self.getParameterValue(self.MODE) == self.MODE_BOUNDARY
90-
smallestArea = self.getParameterValue(self.MODE) == self.MODE_SMALLEST_AREA
88+
inLayer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
89+
boundary = self.parameterAsEnum(parameters, self.MODE, context) == self.MODE_BOUNDARY
90+
smallestArea = self.parameterAsEnum(parameters, self.MODE, context) == self.MODE_SMALLEST_AREA
9191

9292
if inLayer.selectedFeatureCount() == 0:
93-
QgsMessageLog.logMessage(self.tr('{0}: (No selection in input layer "{1}")').format(self.displayName(), self.getParameterValue(self.INPUT)),
94-
self.tr('Processing'), QgsMessageLog.WARNING)
93+
feedback.reportError(self.tr('{0}: (No selection in input layer "{1}")').format(self.displayName(), parameters[self.INPUT]))
9594

9695
featToEliminate = []
9796
selFeatIds = inLayer.selectedFeatureIds()
98-
output = self.getOutputFromName(self.OUTPUT)
99-
writer = output.getVectorWriter(inLayer.fields(), inLayer.wkbType(), inLayer.crs(), context)
97+
98+
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
99+
inLayer.fields(), inLayer.wkbType(), inLayer.sourceCrs())
100100

101101
for aFeat in inLayer.getFeatures():
102+
if feedback.isCanceled():
103+
break
104+
102105
if aFeat.id() in selFeatIds:
103106
# Keep references to the features to eliminate
104107
featToEliminate.append(aFeat)
105108
else:
106109
# write the others to output
107-
writer.addFeature(aFeat, QgsFeatureSink.FastInsert)
110+
sink.addFeature(aFeat, QgsFeatureSink.FastInsert)
108111

109112
# Delete all features to eliminate in processLayer
110-
processLayer = output.layer
113+
processLayer = QgsProcessingUtils.mapLayerFromString(dest_id, context)
111114
processLayer.startEditing()
112115

113116
# ANALYZE
@@ -129,6 +132,9 @@ def processAlgorithm(self, parameters, context, feedback):
129132

130133
# Iterate over the polygons to eliminate
131134
for i in range(len(featToEliminate)):
135+
if feedback.isCanceled():
136+
break
137+
132138
feat = featToEliminate.pop()
133139
geom2Eliminate = feat.geometry()
134140
bbox = geom2Eliminate.boundingBox()
@@ -145,6 +151,9 @@ def processAlgorithm(self, parameters, context, feedback):
145151
engine.prepareGeometry()
146152

147153
while fit.nextFeature(selFeat):
154+
if feedback.isCanceled():
155+
break
156+
148157
selGeom = selFeat.geometry()
149158

150159
if engine.intersects(selGeom.geometry()):
@@ -193,7 +202,7 @@ def processAlgorithm(self, parameters, context, feedback):
193202
if processLayer.changeGeometry(mergeWithFid, newGeom):
194203
madeProgress = True
195204
else:
196-
raise GeoAlgorithmExecutionException(
205+
raise QgsProcessingException(
197206
self.tr('Could not replace geometry of feature with id {0}').format(mergeWithFid))
198207

199208
start = start + add
@@ -207,7 +216,12 @@ def processAlgorithm(self, parameters, context, feedback):
207216

208217
# End while
209218
if not processLayer.commitChanges():
210-
raise GeoAlgorithmExecutionException(self.tr('Could not commit changes'))
219+
raise QgsProcessingException(self.tr('Could not commit changes'))
211220

212221
for feature in featNotEliminated:
213-
writer.addFeature(feature, QgsFeatureSink.FastInsert)
222+
if feedback.isCanceled():
223+
break
224+
225+
sink.addFeature(feature, QgsFeatureSink.FastInsert)
226+
227+
return {self.OUTPUT: dest_id}

0 commit comments

Comments
 (0)
Please sign in to comment.