Skip to content

Commit ab70e05

Browse files
committedJul 27, 2017
Port export geometry info to new API
1 parent 6ae2dda commit ab70e05

File tree

3 files changed

+42
-43
lines changed

3 files changed

+42
-43
lines changed
 

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

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,12 @@
3434
QgsField,
3535
QgsWkbTypes,
3636
QgsFeatureSink,
37-
QgsProcessingUtils,
38-
QgsDistanceArea)
37+
QgsDistanceArea,
38+
QgsProcessingParameterFeatureSource,
39+
QgsProcessingParameterEnum,
40+
QgsProcessingParameterFeatureSink)
3941

4042
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
41-
from processing.core.parameters import ParameterVector
42-
from processing.core.parameters import ParameterSelection
43-
from processing.core.outputs import OutputVector
4443
from processing.tools import vector
4544

4645
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
@@ -66,18 +65,16 @@ def __init__(self):
6665
self.export_z = False
6766
self.export_m = False
6867
self.distance_area = None
69-
70-
def initAlgorithm(self, config=None):
7168
self.calc_methods = [self.tr('Layer CRS'),
7269
self.tr('Project CRS'),
7370
self.tr('Ellipsoidal')]
7471

75-
self.addParameter(ParameterVector(self.INPUT,
76-
self.tr('Input layer')))
77-
self.addParameter(ParameterSelection(self.METHOD,
78-
self.tr('Calculate using'), self.calc_methods, 0))
79-
80-
self.addOutput(OutputVector(self.OUTPUT, self.tr('Added geom info')))
72+
def initAlgorithm(self, config=None):
73+
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
74+
self.tr('Input layer')))
75+
self.addParameter(QgsProcessingParameterEnum(self.METHOD,
76+
self.tr('Calculate using'), options=self.calc_methods, defaultValue=0))
77+
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Added geom info')))
8178

8279
def name(self):
8380
return 'exportaddgeometrycolumns'
@@ -86,36 +83,36 @@ def displayName(self):
8683
return self.tr('Export/Add geometry columns')
8784

8885
def processAlgorithm(self, parameters, context, feedback):
89-
layer = QgsProcessingUtils.mapLayerFromString(self.getParameterValue(self.INPUT), context)
90-
method = self.getParameterValue(self.METHOD)
86+
source = self.parameterAsSource(parameters, self.INPUT, context)
87+
method = self.parameterAsEnum(parameters, self.METHOD, context)
9188

92-
geometryType = layer.geometryType()
93-
fields = layer.fields()
89+
wkb_type = source.wkbType()
90+
fields = source.fields()
9491

95-
if geometryType == QgsWkbTypes.PolygonGeometry:
92+
if QgsWkbTypes.geometryType(wkb_type) == QgsWkbTypes.PolygonGeometry:
9693
areaName = vector.createUniqueFieldName('area', fields)
9794
fields.append(QgsField(areaName, QVariant.Double))
9895
perimeterName = vector.createUniqueFieldName('perimeter', fields)
9996
fields.append(QgsField(perimeterName, QVariant.Double))
100-
elif geometryType == QgsWkbTypes.LineGeometry:
97+
elif QgsWkbTypes.geometryType(wkb_type) == QgsWkbTypes.LineGeometry:
10198
lengthName = vector.createUniqueFieldName('length', fields)
10299
fields.append(QgsField(lengthName, QVariant.Double))
103100
else:
104101
xName = vector.createUniqueFieldName('xcoord', fields)
105102
fields.append(QgsField(xName, QVariant.Double))
106103
yName = vector.createUniqueFieldName('ycoord', fields)
107104
fields.append(QgsField(yName, QVariant.Double))
108-
if QgsWkbTypes.hasZ(layer.wkbType()):
105+
if QgsWkbTypes.hasZ(source.wkbType()):
109106
self.export_z = True
110107
zName = vector.createUniqueFieldName('zcoord', fields)
111108
fields.append(QgsField(zName, QVariant.Double))
112-
if QgsWkbTypes.hasM(layer.wkbType()):
109+
if QgsWkbTypes.hasM(source.wkbType()):
113110
self.export_m = True
114111
zName = vector.createUniqueFieldName('mvalue', fields)
115112
fields.append(QgsField(zName, QVariant.Double))
116113

117-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, layer.wkbType(), layer.crs(),
118-
context)
114+
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
115+
fields, wkb_type, source.sourceCrs())
119116

120117
coordTransform = None
121118

@@ -126,14 +123,17 @@ def processAlgorithm(self, parameters, context, feedback):
126123

127124
self.distance_area = QgsDistanceArea()
128125
if method == 2:
129-
self.distance_area.setSourceCrs(layer.crs())
126+
self.distance_area.setSourceCrs(source.sourceCrs())
130127
self.distance_area.setEllipsoid(context.project().ellipsoid())
131128
elif method == 1:
132-
coordTransform = QgsCoordinateTransform(layer.crs(), context.project().crs())
129+
coordTransform = QgsCoordinateTransform(source.sourceCrs(), context.project().crs())
133130

134-
features = QgsProcessingUtils.getFeatures(layer, context)
135-
total = 100.0 / layer.featureCount() if layer.featureCount() else 0
131+
features = source.getFeatures()
132+
total = 100.0 / source.featureCount() if source.featureCount() else 0
136133
for current, f in enumerate(features):
134+
if feedback.isCanceled():
135+
break
136+
137137
outFeat = f
138138
attrs = f.attributes()
139139
inGeom = f.geometry()
@@ -149,11 +149,11 @@ def processAlgorithm(self, parameters, context, feedback):
149149
attrs.extend(self.line_attributes(inGeom))
150150

151151
outFeat.setAttributes(attrs)
152-
writer.addFeature(outFeat, QgsFeatureSink.FastInsert)
152+
sink.addFeature(outFeat, QgsFeatureSink.FastInsert)
153153

154154
feedback.setProgress(int(current * total))
155155

156-
del writer
156+
return {self.OUTPUT: dest_id}
157157

158158
def point_attributes(self, geometry):
159159
pt = None

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
from .Difference import Difference
5858
from .DropGeometry import DropGeometry
5959
from .DropMZValues import DropMZValues
60+
from .ExportGeometryInfo import ExportGeometryInfo
6061
from .ExtendLines import ExtendLines
6162
from .ExtentFromLayer import ExtentFromLayer
6263
from .ExtractNodes import ExtractNodes
@@ -117,7 +118,6 @@
117118
from .ZonalStatistics import ZonalStatistics
118119

119120
# from .ExtractByLocation import ExtractByLocation
120-
# from .ExportGeometryInfo import ExportGeometryInfo
121121
# from .SinglePartsToMultiparts import SinglePartsToMultiparts
122122
# from .ConvexHull import ConvexHull
123123
# from .FixedDistanceBuffer import FixedDistanceBuffer
@@ -185,8 +185,6 @@ def __init__(self):
185185

186186
def getAlgs(self):
187187
# algs = [
188-
#
189-
# ExportGeometryInfo(),
190188
# SinglePartsToMultiparts(),
191189
# ConvexHull(), FixedDistanceBuffer(),
192190
# VariableDistanceBuffer(),
@@ -244,6 +242,7 @@ def getAlgs(self):
244242
Difference(),
245243
DropGeometry(),
246244
DropMZValues(),
245+
ExportGeometryInfo(),
247246
ExtendLines(),
248247
ExtentFromLayer(),
249248
ExtractNodes(),

‎python/plugins/processing/tests/testdata/qgis_algorithm_tests.yaml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,17 +1095,17 @@ tests:
10951095
name: expected/smoothed_lines_max_angle.gml
10961096
type: vector
10971097

1098-
# - algorithm: qgis:exportaddgeometrycolumns
1099-
# name: Add Geometry PointZ
1100-
# params:
1101-
# CALC_METHOD: '0'
1102-
# INPUT:
1103-
# name: pointsz.gml
1104-
# type: vector
1105-
# results:
1106-
# OUTPUT:
1107-
# name: expected/add_geometry_pointz.gml
1108-
# type: vector
1098+
- algorithm: qgis:exportaddgeometrycolumns
1099+
name: Add Geometry PointZ
1100+
params:
1101+
CALC_METHOD: '0'
1102+
INPUT:
1103+
name: pointsz.gml
1104+
type: vector
1105+
results:
1106+
OUTPUT:
1107+
name: expected/add_geometry_pointz.gml
1108+
type: vector
11091109

11101110
- algorithm: qgis:countpointsinpolygon
11111111
name: Count points in polygon

0 commit comments

Comments
 (0)
Please sign in to comment.