Skip to content

Commit 06c4b07

Browse files
committed
[processing] Use layer crs/fields instead of provider crs/fields
Since the layer has more complete knowledge of the crs (ie, when provider could not determine crs and user has selected it from the list), and also better knowledge of layer fields (virtual fields, joined fields) we should use these rather than the provider methods.
1 parent 00a8fea commit 06c4b07

Some content is hidden

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

45 files changed

+94
-127
lines changed

python/plugins/processing/algs/qgis/AddTableField.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,10 @@ def processAlgorithm(self, progress):
7878
layer = dataobjects.getObjectFromUri(
7979
self.getParameterValue(self.INPUT_LAYER))
8080

81-
provider = layer.dataProvider()
82-
fields = provider.fields()
81+
fields = layer.fields()
8382
fields.append(QgsField(fieldName, self.TYPES[fieldType], '',
8483
fieldLength, fieldPrecision))
85-
writer = output.getVectorWriter(fields, provider.wkbType(),
84+
writer = output.getVectorWriter(fields, layer.wkbType(),
8685
layer.crs())
8786
outFeat = QgsFeature()
8887
features = vector.features(layer)

python/plugins/processing/algs/qgis/AutoincrementalField.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,9 @@ def processAlgorithm(self, progress):
4949
output = self.getOutputFromName(self.OUTPUT)
5050
vlayer = \
5151
dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
52-
vprovider = vlayer.dataProvider()
53-
fields = vprovider.fields()
52+
fields = vlayer.fields()
5453
fields.append(QgsField('AUTO', QVariant.Int))
55-
writer = output.getVectorWriter(fields, vprovider.wkbType(),
54+
writer = output.getVectorWriter(fields, vlayer.wkbType(),
5655
vlayer.crs())
5756
outFeat = QgsFeature()
5857
features = vector.features(vlayer)

python/plugins/processing/algs/qgis/Centroids.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def processAlgorithm(self, progress):
6363

6464
writer = self.getOutputFromName(
6565
self.OUTPUT_LAYER).getVectorWriter(
66-
layer.pendingFields().toList(),
66+
layer.fields(),
6767
QgsWkbTypes.Point,
6868
layer.crs())
6969

python/plugins/processing/algs/qgis/CheckValidity.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -97,27 +97,26 @@ def processAlgorithm(self, progress):
9797
def doCheck(self, progress):
9898
layer = dataobjects.getObjectFromUri(
9999
self.getParameterValue(self.INPUT_LAYER))
100-
provider = layer.dataProvider()
101100

102101
settings = QSettings()
103102
method = int(settings.value(settings_method_key, 1))
104103

105104
valid_ouput = self.getOutputFromName(self.VALID_OUTPUT)
106-
valid_fields = layer.pendingFields().toList()
105+
valid_fields = layer.fields()
107106
valid_writer = valid_ouput.getVectorWriter(
108107
valid_fields,
109-
provider.wkbType(),
108+
layer.wkbType(),
110109
layer.crs())
111110
valid_count = 0
112111

113112
invalid_ouput = self.getOutputFromName(self.INVALID_OUTPUT)
114-
invalid_fields = layer.pendingFields().toList() + [
113+
invalid_fields = layer.fields().toList() + [
115114
QgsField(name='_errors',
116115
type=QVariant.String,
117116
len=255)]
118117
invalid_writer = invalid_ouput.getVectorWriter(
119118
invalid_fields,
120-
provider.wkbType(),
119+
layer.wkbType(),
121120
layer.crs())
122121
invalid_count = 0
123122

python/plugins/processing/algs/qgis/ConcaveHull.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def processAlgorithm(self, progress):
111111
feat = QgsFeature()
112112
dissolved_layer.getFeatures(QgsFeatureRequest().setFilterFid(0)).nextFeature(feat)
113113
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
114-
layer.pendingFields().toList(), QgsWkbTypes.Polygon, layer.crs())
114+
layer.fields().toList(), QgsWkbTypes.Polygon, layer.crs())
115115
geom = feat.geometry()
116116
if no_multigeom and geom.isMultipart():
117117
# Only singlepart geometries are allowed

python/plugins/processing/algs/qgis/ConvexHull.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def processAlgorithm(self, progress):
9797
]
9898

9999
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
100-
fields, QgsWkbTypes.Polygon, layer.dataProvider().crs())
100+
fields, QgsWkbTypes.Polygon, layer.crs())
101101

102102
outFeat = QgsFeature()
103103
inGeom = QgsGeometry()

python/plugins/processing/algs/qgis/Difference.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ def processAlgorithm(self, progress):
6868
self.getParameterValue(Difference.OVERLAY))
6969
ignoreInvalid = self.getParameterValue(Difference.IGNORE_INVALID)
7070

71-
geomType = layerA.dataProvider().wkbType()
71+
geomType = layerA.wkbType()
7272
writer = self.getOutputFromName(
7373
Difference.OUTPUT).getVectorWriter(layerA.pendingFields(),
7474
geomType,
75-
layerA.dataProvider().crs())
75+
layerA.crs())
7676

7777
outFeat = QgsFeature()
7878
index = vector.spatialindex(layerB)

python/plugins/processing/algs/qgis/Dissolve.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,11 @@ def processAlgorithm(self, progress):
7171
field_names = self.getParameterValue(Dissolve.FIELD)
7272
vlayerA = dataobjects.getObjectFromUri(
7373
self.getParameterValue(Dissolve.INPUT))
74-
vproviderA = vlayerA.dataProvider()
7574

7675
writer = self.getOutputFromName(
7776
Dissolve.OUTPUT).getVectorWriter(
7877
vlayerA.fields().toList(),
79-
vproviderA.wkbType(),
78+
vlayerA.wkbType(),
8079
vlayerA.crs())
8180

8281
outFeat = QgsFeature()

python/plugins/processing/algs/qgis/Eliminate.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,9 @@ def processAlgorithm(self, progress):
315315
# End while
316316

317317
# Create output
318-
provider = processLayer.dataProvider()
319318
output = self.getOutputFromName(self.OUTPUT)
320-
writer = output.getVectorWriter(provider.fields(),
321-
provider.wkbType(), processLayer.crs())
319+
writer = output.getVectorWriter(processLayer.fields(),
320+
processLayer.wkbType(), processLayer.crs())
322321

323322
# Write all features that are left over to output layer
324323
iterator = processLayer.getFeatures()

python/plugins/processing/algs/qgis/EquivalentNumField.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,10 @@ def processAlgorithm(self, progress):
5454
output = self.getOutputFromName(self.OUTPUT)
5555
vlayer = dataobjects.getObjectFromUri(
5656
self.getParameterValue(self.INPUT))
57-
vprovider = vlayer.dataProvider()
5857
fieldindex = vlayer.fieldNameIndex(fieldname)
59-
fields = vprovider.fields()
58+
fields = vlayer.fields()
6059
fields.append(QgsField('NUM_FIELD', QVariant.Int))
61-
writer = output.getVectorWriter(fields, vprovider.wkbType(),
60+
writer = output.getVectorWriter(fields, vlayer.wkbType(),
6261
vlayer.crs())
6362
outFeat = QgsFeature()
6463
classes = {}

python/plugins/processing/algs/qgis/Explode.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ def processAlgorithm(self, progress):
4848
vlayer = dataobjects.getObjectFromUri(
4949
self.getParameterValue(self.INPUT))
5050
output = self.getOutputFromName(self.OUTPUT)
51-
vprovider = vlayer.dataProvider()
52-
fields = vprovider.fields()
51+
fields = vlayer.fields()
5352
writer = output.getVectorWriter(fields, QgsWkbTypes.LineString,
5453
vlayer.crs())
5554
outFeat = QgsFeature()

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def processAlgorithm(self, progress):
8989
fields.append(QgsField(yName, QVariant.Double))
9090

9191
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
92-
fields.toList(), layer.dataProvider().wkbType(), layer.crs())
92+
fields.toList(), layer.wkbType(), layer.crs())
9393

9494
ellips = None
9595
crs = None

python/plugins/processing/algs/qgis/ExtractByLocation.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def processAlgorithm(self, progress):
7171

7272
output = self.getOutputFromName(self.OUTPUT)
7373
writer = output.getVectorWriter(layer.pendingFields(),
74-
layer.dataProvider().wkbType(), layer.crs())
74+
layer.wkbType(), layer.crs())
7575

7676
if 'disjoint' in predicates:
7777
disjoinSet = []

python/plugins/processing/algs/qgis/FieldPyculator.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,10 @@ def processAlgorithm(self, progress):
8888

8989
layer = dataobjects.getObjectFromUri(
9090
self.getParameterValue(self.INPUT_LAYER))
91-
provider = layer.dataProvider()
92-
fields = provider.fields()
91+
fields = layer.fields()
9392
fields.append(QgsField(fieldName, self.TYPES[fieldType], '',
9493
fieldLength, fieldPrecision))
95-
writer = output.getVectorWriter(fields, provider.wkbType(),
94+
writer = output.getVectorWriter(fields, layer.wkbType(),
9695
layer.crs())
9796
outFeat = QgsFeature()
9897
new_ns = {}
@@ -107,7 +106,7 @@ def processAlgorithm(self, progress):
107106
self.tr("FieldPyculator code execute error.Global code block can't be executed!\n%s\n%s") % (unicode(sys.exc_info()[0].__name__), unicode(sys.exc_info()[1])))
108107

109108
# Replace all fields tags
110-
fields = provider.fields()
109+
fields = layer.fields()
111110
num = 0
112111
for field in fields:
113112
field_name = unicode(field.name())

python/plugins/processing/algs/qgis/FieldsCalculator.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,11 @@ def processAlgorithm(self, progress):
9494
output.value = system.getTempFilenameInTempFolder(
9595
output.name + '.' + ext)
9696

97-
provider = layer.dataProvider()
98-
fields = layer.pendingFields()
97+
fields = layer.fields()
9998
if newField:
10099
fields.append(QgsField(fieldName, fieldType, '', width, precision))
101100

102-
writer = output.getVectorWriter(fields, provider.wkbType(),
101+
writer = output.getVectorWriter(fields, layer.wkbType(),
103102
layer.crs())
104103

105104
exp = QgsExpression(formula)

python/plugins/processing/algs/qgis/FieldsMapper.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ def processAlgorithm(self, progress):
6868
output = self.getOutputFromName(self.OUTPUT_LAYER)
6969

7070
layer = dataobjects.getObjectFromUri(layer)
71-
provider = layer.dataProvider()
7271
fields = []
7372
expressions = []
7473

@@ -109,7 +108,7 @@ def processAlgorithm(self, progress):
109108
expressions.append(expression)
110109

111110
writer = output.getVectorWriter(fields,
112-
provider.wkbType(),
111+
layer.wkbType(),
113112
layer.crs())
114113

115114
# Create output vector layer with new attributes

python/plugins/processing/algs/qgis/Intersection.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,11 @@ def processAlgorithm(self, progress):
7373
self.getParameterValue(self.INPUT))
7474
vlayerB = dataobjects.getObjectFromUri(
7575
self.getParameterValue(self.INPUT2))
76-
vproviderA = vlayerA.dataProvider()
7776

78-
geomType = vproviderA.wkbType()
77+
geomType = vlayerA.wkbType()
7978
fields = vector.combineVectorFields(vlayerA, vlayerB)
8079
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
81-
geomType, vproviderA.crs())
80+
geomType, vlayerA.crs())
8281
outFeat = QgsFeature()
8382
index = vector.spatialindex(vlayerB)
8483
selectionA = vector.features(vlayerA)

python/plugins/processing/algs/qgis/JoinAttributes.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,13 @@ def processAlgorithm(self, progress):
6969
field2 = self.getParameterValue(self.TABLE_FIELD_2)
7070

7171
layer = dataobjects.getObjectFromUri(input)
72-
provider = layer.dataProvider()
7372
joinField1Index = layer.fieldNameIndex(field)
7473

7574
layer2 = dataobjects.getObjectFromUri(input2)
7675
joinField2Index = layer2.fieldNameIndex(field2)
7776

7877
outFields = vector.combineVectorFields(layer, layer2)
79-
writer = output.getVectorWriter(outFields, provider.wkbType(),
78+
writer = output.getVectorWriter(outFields, layer.wkbType(),
8079
layer.crs())
8180

8281
# Cache attributes of Layer 2

python/plugins/processing/algs/qgis/LinesIntersection.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def processAlgorithm(self, progress):
8686
layerB.pendingFields()[idxB]]
8787

8888
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
89-
QgsWkbTypes.Point, layerA.dataProvider().crs())
89+
QgsWkbTypes.Point, layerA.crs())
9090

9191
spatialIndex = vector.spatialindex(layerB)
9292

python/plugins/processing/algs/qgis/Merge.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ def processAlgorithm(self, progress):
6666
layer = QgsVectorLayer(paths[x], unicode(x), 'ogr')
6767

6868
if (len(layers) > 0):
69-
if (layer.dataProvider().wkbType() != layers[0].dataProvider().wkbType()):
69+
if (layer.wkbType() != layers[0].wkbType()):
7070
raise GeoAlgorithmExecutionException(
7171
self.tr('All layers must have same geometry type!'))
7272

7373
layers.append(layer)
7474
totalFeatureCount += layer.featureCount()
7575

76-
for sindex, sfield in enumerate(layer.dataProvider().fields()):
76+
for sindex, sfield in enumerate(layer.fields()):
7777
found = None
7878
for dfield in fields:
7979
if (dfield.name().upper() == sfield.name().upper()):
@@ -88,12 +88,12 @@ def processAlgorithm(self, progress):
8888

8989
total = 100.0 / totalFeatureCount
9090
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
91-
fields.toList(), layers[0].dataProvider().wkbType(),
91+
fields.toList(), layers[0].wkbType(),
9292
layers[0].crs())
9393

9494
featureCount = 0
9595
for layer in layers:
96-
for feature in layer.dataProvider().getFeatures():
96+
for feature in layer.getFeatures():
9797
sattributes = feature.attributes()
9898
dattributes = []
9999
for dindex, dfield in enumerate(fields):
@@ -104,7 +104,7 @@ def processAlgorithm(self, progress):
104104
else:
105105
dattribute = ''
106106

107-
for sindex, sfield in enumerate(layer.dataProvider().fields()):
107+
for sindex, sfield in enumerate(layer.fields()):
108108
if (sfield.name().upper() == dfield.name().upper()):
109109
if (sfield.type() != dfield.type()):
110110
raise GeoAlgorithmExecutionException(

python/plugins/processing/algs/qgis/MergeLines.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,11 @@ def defineCharacteristics(self):
5959
def processAlgorithm(self, progress):
6060
layer = dataobjects.getObjectFromUri(
6161
self.getParameterValue(self.INPUT_LAYER))
62-
provider = layer.dataProvider()
6362

6463
writer = self.getOutputFromName(
6564
self.OUTPUT_LAYER).getVectorWriter(
6665
layer.fields().toList(),
67-
provider.wkbType(),
66+
layer.wkbType(),
6867
layer.crs())
6968

7069
features = vector.features(layer)

python/plugins/processing/algs/qgis/MultipartToSingleparts.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def defineCharacteristics(self):
5858
def processAlgorithm(self, progress):
5959
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
6060

61-
geomType = self.multiToSingleGeom(layer.dataProvider().wkbType())
61+
geomType = self.multiToSingleGeom(layer.wkbType())
6262

6363
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
6464
layer.pendingFields().toList(), geomType, layer.crs())
@@ -87,41 +87,41 @@ def processAlgorithm(self, progress):
8787

8888
def multiToSingleGeom(self, wkbType):
8989
try:
90-
if wkbType in (QgsWkbTypes.Point, QgsWkbTypes.MultiPoint,
91-
QgsWkbTypes.Point25D, QgsWkbTypes.MultiPoint25D):
92-
return QgsWkbTypes.Point
93-
elif wkbType in (QgsWkbTypes.LineString, QgsWkbTypes.MultiLineString,
94-
QgsWkbTypes.MultiLineString25D,
95-
QgsWkbTypes.LineString25D):
96-
97-
return QgsWkbTypes.LineString
98-
elif wkbType in (QgsWkbTypes.Polygon, QgsWkbTypes.MultiPolygon,
99-
QgsWkbTypes.MultiPolygon25D, QgsWkbTypes.Polygon25D):
100-
101-
return QgsWkbTypes.Polygon
90+
if wkbType in (Qgis.WKBPoint, Qgis.WKBMultiPoint,
91+
Qgis.WKBPoint25D, Qgis.WKBMultiPoint25D):
92+
return Qgis.WKBPoint
93+
elif wkbType in (Qgis.WKBLineString, Qgis.WKBMultiLineString,
94+
Qgis.WKBMultiLineString25D,
95+
Qgis.WKBLineString25D):
96+
97+
return Qgis.WKBLineString
98+
elif wkbType in (Qgis.WKBPolygon, Qgis.WKBMultiPolygon,
99+
Qgis.WKBMultiPolygon25D, Qgis.WKBPolygon25D):
100+
101+
return Qgis.WKBPolygon
102102
else:
103-
return QgsWkbTypes.Unknown
103+
return Qgis.WKBUnknown
104104
except Exception as err:
105105
raise GeoAlgorithmExecutionException(unicode(err))
106106

107107
def extractAsSingle(self, geom):
108108
multiGeom = QgsGeometry()
109109
geometries = []
110-
if geom.type() == QgsWkbTypes.PointGeometry:
110+
if geom.type() == Qgis.Point:
111111
if geom.isMultipart():
112112
multiGeom = geom.asMultiPoint()
113113
for i in multiGeom:
114114
geometries.append(QgsGeometry().fromPoint(i))
115115
else:
116116
geometries.append(geom)
117-
elif geom.type() == QgsWkbTypes.LineGeometry:
117+
elif geom.type() == Qgis.Line:
118118
if geom.isMultipart():
119119
multiGeom = geom.asMultiPolyline()
120120
for i in multiGeom:
121121
geometries.append(QgsGeometry().fromPolyline(i))
122122
else:
123123
geometries.append(geom)
124-
elif geom.type() == QgsWkbTypes.PolygonGeometry:
124+
elif geom.type() == Qgis.Polygon:
125125
if geom.isMultipart():
126126
multiGeom = geom.asMultiPolygon()
127127
for i in multiGeom:

python/plugins/processing/algs/qgis/OrientedMinimumBoundingBox.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,10 @@ def processAlgorithm(self, progress):
8282

8383
def layerOmmb(self, layer, writer, progress):
8484
current = 0
85-
vprovider = layer.dataProvider()
8685

87-
fit = vprovider.getFeatures()
86+
fit = layer.getFeatures()
8887
inFeat = QgsFeature()
89-
total = 100.0 / vprovider.featureCount()
88+
total = 100.0 / layer.featureCount()
9089
newgeometry = QgsGeometry()
9190
first = True
9291
while fit.nextFeature(inFeat):

0 commit comments

Comments
 (0)