[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.
This commit is contained in:
Nyall Dawson 2016-08-04 07:33:49 +10:00
parent 00a8fea13b
commit 06c4b07222
45 changed files with 92 additions and 125 deletions

View File

@ -78,11 +78,10 @@ class AddTableField(GeoAlgorithm):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT_LAYER))
provider = layer.dataProvider()
fields = provider.fields()
fields = layer.fields()
fields.append(QgsField(fieldName, self.TYPES[fieldType], '',
fieldLength, fieldPrecision))
writer = output.getVectorWriter(fields, provider.wkbType(),
writer = output.getVectorWriter(fields, layer.wkbType(),
layer.crs())
outFeat = QgsFeature()
features = vector.features(layer)

View File

@ -49,10 +49,9 @@ class AutoincrementalField(GeoAlgorithm):
output = self.getOutputFromName(self.OUTPUT)
vlayer = \
dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
fields = vlayer.fields()
fields.append(QgsField('AUTO', QVariant.Int))
writer = output.getVectorWriter(fields, vprovider.wkbType(),
writer = output.getVectorWriter(fields, vlayer.wkbType(),
vlayer.crs())
outFeat = QgsFeature()
features = vector.features(vlayer)

View File

@ -63,7 +63,7 @@ class Centroids(GeoAlgorithm):
writer = self.getOutputFromName(
self.OUTPUT_LAYER).getVectorWriter(
layer.pendingFields().toList(),
layer.fields(),
QgsWkbTypes.Point,
layer.crs())

View File

@ -97,27 +97,26 @@ class CheckValidity(GeoAlgorithm):
def doCheck(self, progress):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT_LAYER))
provider = layer.dataProvider()
settings = QSettings()
method = int(settings.value(settings_method_key, 1))
valid_ouput = self.getOutputFromName(self.VALID_OUTPUT)
valid_fields = layer.pendingFields().toList()
valid_fields = layer.fields()
valid_writer = valid_ouput.getVectorWriter(
valid_fields,
provider.wkbType(),
layer.wkbType(),
layer.crs())
valid_count = 0
invalid_ouput = self.getOutputFromName(self.INVALID_OUTPUT)
invalid_fields = layer.pendingFields().toList() + [
invalid_fields = layer.fields().toList() + [
QgsField(name='_errors',
type=QVariant.String,
len=255)]
invalid_writer = invalid_ouput.getVectorWriter(
invalid_fields,
provider.wkbType(),
layer.wkbType(),
layer.crs())
invalid_count = 0

View File

@ -111,7 +111,7 @@ class ConcaveHull(GeoAlgorithm):
feat = QgsFeature()
dissolved_layer.getFeatures(QgsFeatureRequest().setFilterFid(0)).nextFeature(feat)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
layer.pendingFields().toList(), QgsWkbTypes.Polygon, layer.crs())
layer.fields().toList(), QgsWkbTypes.Polygon, layer.crs())
geom = feat.geometry()
if no_multigeom and geom.isMultipart():
# Only singlepart geometries are allowed

View File

@ -97,7 +97,7 @@ class ConvexHull(GeoAlgorithm):
]
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, QgsWkbTypes.Polygon, layer.dataProvider().crs())
fields, QgsWkbTypes.Polygon, layer.crs())
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -68,11 +68,11 @@ class Difference(GeoAlgorithm):
self.getParameterValue(Difference.OVERLAY))
ignoreInvalid = self.getParameterValue(Difference.IGNORE_INVALID)
geomType = layerA.dataProvider().wkbType()
geomType = layerA.wkbType()
writer = self.getOutputFromName(
Difference.OUTPUT).getVectorWriter(layerA.pendingFields(),
geomType,
layerA.dataProvider().crs())
layerA.crs())
outFeat = QgsFeature()
index = vector.spatialindex(layerB)

View File

@ -71,12 +71,11 @@ class Dissolve(GeoAlgorithm):
field_names = self.getParameterValue(Dissolve.FIELD)
vlayerA = dataobjects.getObjectFromUri(
self.getParameterValue(Dissolve.INPUT))
vproviderA = vlayerA.dataProvider()
writer = self.getOutputFromName(
Dissolve.OUTPUT).getVectorWriter(
vlayerA.fields().toList(),
vproviderA.wkbType(),
vlayerA.wkbType(),
vlayerA.crs())
outFeat = QgsFeature()

View File

@ -315,10 +315,9 @@ class Eliminate(GeoAlgorithm):
# End while
# Create output
provider = processLayer.dataProvider()
output = self.getOutputFromName(self.OUTPUT)
writer = output.getVectorWriter(provider.fields(),
provider.wkbType(), processLayer.crs())
writer = output.getVectorWriter(processLayer.fields(),
processLayer.wkbType(), processLayer.crs())
# Write all features that are left over to output layer
iterator = processLayer.getFeatures()

View File

@ -54,11 +54,10 @@ class EquivalentNumField(GeoAlgorithm):
output = self.getOutputFromName(self.OUTPUT)
vlayer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT))
vprovider = vlayer.dataProvider()
fieldindex = vlayer.fieldNameIndex(fieldname)
fields = vprovider.fields()
fields = vlayer.fields()
fields.append(QgsField('NUM_FIELD', QVariant.Int))
writer = output.getVectorWriter(fields, vprovider.wkbType(),
writer = output.getVectorWriter(fields, vlayer.wkbType(),
vlayer.crs())
outFeat = QgsFeature()
classes = {}

View File

@ -48,8 +48,7 @@ class Explode(GeoAlgorithm):
vlayer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT))
output = self.getOutputFromName(self.OUTPUT)
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
fields = vlayer.fields()
writer = output.getVectorWriter(fields, QgsWkbTypes.LineString,
vlayer.crs())
outFeat = QgsFeature()

View File

@ -89,7 +89,7 @@ class ExportGeometryInfo(GeoAlgorithm):
fields.append(QgsField(yName, QVariant.Double))
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields.toList(), layer.dataProvider().wkbType(), layer.crs())
fields.toList(), layer.wkbType(), layer.crs())
ellips = None
crs = None

View File

@ -71,7 +71,7 @@ class ExtractByLocation(GeoAlgorithm):
output = self.getOutputFromName(self.OUTPUT)
writer = output.getVectorWriter(layer.pendingFields(),
layer.dataProvider().wkbType(), layer.crs())
layer.wkbType(), layer.crs())
if 'disjoint' in predicates:
disjoinSet = []

View File

@ -88,11 +88,10 @@ class FieldsPyculator(GeoAlgorithm):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT_LAYER))
provider = layer.dataProvider()
fields = provider.fields()
fields = layer.fields()
fields.append(QgsField(fieldName, self.TYPES[fieldType], '',
fieldLength, fieldPrecision))
writer = output.getVectorWriter(fields, provider.wkbType(),
writer = output.getVectorWriter(fields, layer.wkbType(),
layer.crs())
outFeat = QgsFeature()
new_ns = {}
@ -107,7 +106,7 @@ class FieldsPyculator(GeoAlgorithm):
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])))
# Replace all fields tags
fields = provider.fields()
fields = layer.fields()
num = 0
for field in fields:
field_name = unicode(field.name())

View File

@ -94,12 +94,11 @@ class FieldsCalculator(GeoAlgorithm):
output.value = system.getTempFilenameInTempFolder(
output.name + '.' + ext)
provider = layer.dataProvider()
fields = layer.pendingFields()
fields = layer.fields()
if newField:
fields.append(QgsField(fieldName, fieldType, '', width, precision))
writer = output.getVectorWriter(fields, provider.wkbType(),
writer = output.getVectorWriter(fields, layer.wkbType(),
layer.crs())
exp = QgsExpression(formula)

View File

@ -68,7 +68,6 @@ class FieldsMapper(GeoAlgorithm):
output = self.getOutputFromName(self.OUTPUT_LAYER)
layer = dataobjects.getObjectFromUri(layer)
provider = layer.dataProvider()
fields = []
expressions = []
@ -109,7 +108,7 @@ class FieldsMapper(GeoAlgorithm):
expressions.append(expression)
writer = output.getVectorWriter(fields,
provider.wkbType(),
layer.wkbType(),
layer.crs())
# Create output vector layer with new attributes

View File

@ -73,12 +73,11 @@ class Intersection(GeoAlgorithm):
self.getParameterValue(self.INPUT))
vlayerB = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT2))
vproviderA = vlayerA.dataProvider()
geomType = vproviderA.wkbType()
geomType = vlayerA.wkbType()
fields = vector.combineVectorFields(vlayerA, vlayerB)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
geomType, vproviderA.crs())
geomType, vlayerA.crs())
outFeat = QgsFeature()
index = vector.spatialindex(vlayerB)
selectionA = vector.features(vlayerA)

View File

@ -69,14 +69,13 @@ class JoinAttributes(GeoAlgorithm):
field2 = self.getParameterValue(self.TABLE_FIELD_2)
layer = dataobjects.getObjectFromUri(input)
provider = layer.dataProvider()
joinField1Index = layer.fieldNameIndex(field)
layer2 = dataobjects.getObjectFromUri(input2)
joinField2Index = layer2.fieldNameIndex(field2)
outFields = vector.combineVectorFields(layer, layer2)
writer = output.getVectorWriter(outFields, provider.wkbType(),
writer = output.getVectorWriter(outFields, layer.wkbType(),
layer.crs())
# Cache attributes of Layer 2

View File

@ -86,7 +86,7 @@ class LinesIntersection(GeoAlgorithm):
layerB.pendingFields()[idxB]]
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
QgsWkbTypes.Point, layerA.dataProvider().crs())
QgsWkbTypes.Point, layerA.crs())
spatialIndex = vector.spatialindex(layerB)

View File

@ -66,14 +66,14 @@ class Merge(GeoAlgorithm):
layer = QgsVectorLayer(paths[x], unicode(x), 'ogr')
if (len(layers) > 0):
if (layer.dataProvider().wkbType() != layers[0].dataProvider().wkbType()):
if (layer.wkbType() != layers[0].wkbType()):
raise GeoAlgorithmExecutionException(
self.tr('All layers must have same geometry type!'))
layers.append(layer)
totalFeatureCount += layer.featureCount()
for sindex, sfield in enumerate(layer.dataProvider().fields()):
for sindex, sfield in enumerate(layer.fields()):
found = None
for dfield in fields:
if (dfield.name().upper() == sfield.name().upper()):
@ -88,12 +88,12 @@ class Merge(GeoAlgorithm):
total = 100.0 / totalFeatureCount
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields.toList(), layers[0].dataProvider().wkbType(),
fields.toList(), layers[0].wkbType(),
layers[0].crs())
featureCount = 0
for layer in layers:
for feature in layer.dataProvider().getFeatures():
for feature in layer.getFeatures():
sattributes = feature.attributes()
dattributes = []
for dindex, dfield in enumerate(fields):
@ -104,7 +104,7 @@ class Merge(GeoAlgorithm):
else:
dattribute = ''
for sindex, sfield in enumerate(layer.dataProvider().fields()):
for sindex, sfield in enumerate(layer.fields()):
if (sfield.name().upper() == dfield.name().upper()):
if (sfield.type() != dfield.type()):
raise GeoAlgorithmExecutionException(

View File

@ -59,12 +59,11 @@ class MergeLines(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT_LAYER))
provider = layer.dataProvider()
writer = self.getOutputFromName(
self.OUTPUT_LAYER).getVectorWriter(
layer.fields().toList(),
provider.wkbType(),
layer.wkbType(),
layer.crs())
features = vector.features(layer)

View File

@ -58,7 +58,7 @@ class MultipartToSingleparts(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
geomType = self.multiToSingleGeom(layer.dataProvider().wkbType())
geomType = self.multiToSingleGeom(layer.wkbType())
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
layer.pendingFields().toList(), geomType, layer.crs())
@ -87,41 +87,41 @@ class MultipartToSingleparts(GeoAlgorithm):
def multiToSingleGeom(self, wkbType):
try:
if wkbType in (QgsWkbTypes.Point, QgsWkbTypes.MultiPoint,
QgsWkbTypes.Point25D, QgsWkbTypes.MultiPoint25D):
return QgsWkbTypes.Point
elif wkbType in (QgsWkbTypes.LineString, QgsWkbTypes.MultiLineString,
QgsWkbTypes.MultiLineString25D,
QgsWkbTypes.LineString25D):
if wkbType in (Qgis.WKBPoint, Qgis.WKBMultiPoint,
Qgis.WKBPoint25D, Qgis.WKBMultiPoint25D):
return Qgis.WKBPoint
elif wkbType in (Qgis.WKBLineString, Qgis.WKBMultiLineString,
Qgis.WKBMultiLineString25D,
Qgis.WKBLineString25D):
return QgsWkbTypes.LineString
elif wkbType in (QgsWkbTypes.Polygon, QgsWkbTypes.MultiPolygon,
QgsWkbTypes.MultiPolygon25D, QgsWkbTypes.Polygon25D):
return Qgis.WKBLineString
elif wkbType in (Qgis.WKBPolygon, Qgis.WKBMultiPolygon,
Qgis.WKBMultiPolygon25D, Qgis.WKBPolygon25D):
return QgsWkbTypes.Polygon
return Qgis.WKBPolygon
else:
return QgsWkbTypes.Unknown
return Qgis.WKBUnknown
except Exception as err:
raise GeoAlgorithmExecutionException(unicode(err))
def extractAsSingle(self, geom):
multiGeom = QgsGeometry()
geometries = []
if geom.type() == QgsWkbTypes.PointGeometry:
if geom.type() == Qgis.Point:
if geom.isMultipart():
multiGeom = geom.asMultiPoint()
for i in multiGeom:
geometries.append(QgsGeometry().fromPoint(i))
else:
geometries.append(geom)
elif geom.type() == QgsWkbTypes.LineGeometry:
elif geom.type() == Qgis.Line:
if geom.isMultipart():
multiGeom = geom.asMultiPolyline()
for i in multiGeom:
geometries.append(QgsGeometry().fromPolyline(i))
else:
geometries.append(geom)
elif geom.type() == QgsWkbTypes.PolygonGeometry:
elif geom.type() == Qgis.Polygon:
if geom.isMultipart():
multiGeom = geom.asMultiPolygon()
for i in multiGeom:

View File

@ -82,11 +82,10 @@ class OrientedMinimumBoundingBox(GeoAlgorithm):
def layerOmmb(self, layer, writer, progress):
current = 0
vprovider = layer.dataProvider()
fit = vprovider.getFeatures()
fit = layer.getFeatures()
inFeat = QgsFeature()
total = 100.0 / vprovider.featureCount()
total = 100.0 / layer.featureCount()
newgeometry = QgsGeometry()
first = True
while fit.nextFeature(inFeat):

View File

@ -62,9 +62,8 @@ class PointsDisplacement(GeoAlgorithm):
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
provider = layer.dataProvider()
writer = output.getVectorWriter(provider.fields(),
provider.wkbType(), provider.crs())
writer = output.getVectorWriter(layer.fields(),
layer.wkbType(), layer.crs())
features = vector.features(layer)

View File

@ -68,15 +68,14 @@ class PointsInPolygon(GeoAlgorithm):
pointLayer = dataobjects.getObjectFromUri(self.getParameterValue(self.POINTS))
fieldName = self.getParameterValue(self.FIELD)
polyProvider = polyLayer.dataProvider()
fields = polyProvider.fields()
fields = polyLayer.fields()
fields.append(QgsField(fieldName, QVariant.Int))
(idxCount, fieldList) = vector.findOrCreateField(polyLayer,
polyLayer.pendingFields(), fieldName)
polyLayer.fields(), fieldName)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields.toList(), polyProvider.geometryType(), polyProvider.crs())
fields.toList(), polyLayer.wkbType(), polyLayer.crs())
spatialIndex = vector.spatialindex(pointLayer)

View File

@ -62,8 +62,7 @@ class PointsInPolygonUnique(GeoAlgorithm):
fieldName = self.getParameterValue(self.FIELD)
classFieldName = self.getParameterValue(self.CLASSFIELD)
polyProvider = polyLayer.dataProvider()
fields = polyProvider.fields()
fields = polyLayer.fields()
fields.append(QgsField(fieldName, QVariant.Int))
classFieldIndex = pointLayer.fieldNameIndex(classFieldName)
@ -71,7 +70,7 @@ class PointsInPolygonUnique(GeoAlgorithm):
polyLayer.pendingFields(), fieldName)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields.toList(), polyProvider.geometryType(), polyProvider.crs())
fields.toList(), polyLayer.wkbType(), polyLayer.crs())
spatialIndex = vector.spatialindex(pointLayer)

View File

@ -69,15 +69,14 @@ class PointsInPolygonWeighted(GeoAlgorithm):
fieldName = self.getParameterValue(self.FIELD)
fieldIdx = pointLayer.fieldNameIndex(self.getParameterValue(self.WEIGHT))
polyProvider = polyLayer.dataProvider()
fields = polyProvider.fields()
fields = polyLayer.fields()
fields.append(QgsField(fieldName, QVariant.Int))
(idxCount, fieldList) = vector.findOrCreateField(polyLayer,
polyLayer.pendingFields(), fieldName)
polyLayer.fields(), fieldName)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields.toList(), polyProvider.geometryType(), polyProvider.crs())
fields.toList(), polyLayer.wkbType(), polyLayer.crs())
spatialIndex = vector.spatialindex(pointLayer)

View File

@ -63,8 +63,7 @@ class PointsLayerFromTable(GeoAlgorithm):
source = self.getParameterValue(self.INPUT)
vlayer = dataobjects.getObjectFromUri(source)
output = self.getOutputFromName(self.OUTPUT)
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
fields = vlayer.fields()
writer = output.getVectorWriter(fields, QgsWkbTypes.Point, self.crs)
xfieldindex = vlayer.fieldNameIndex(self.getParameterValue(self.XFIELD))
yfieldindex = vlayer.fieldNameIndex(self.getParameterValue(self.YFIELD))

View File

@ -81,7 +81,7 @@ class PointsToPaths(GeoAlgorithm):
fields.append(QgsField('begin', QVariant.String, '', 254, 0))
fields.append(QgsField('end', QVariant.String, '', 254, 0))
writer = self.getOutputFromName(self.OUTPUT_LINES).getVectorWriter(
fields, QgsWkbTypes.LineString, layer.dataProvider().crs())
fields, QgsWkbTypes.LineString, layer.crs())
points = dict()
features = vector.features(layer)

View File

@ -60,9 +60,8 @@ class Polygonize(GeoAlgorithm):
def processAlgorithm(self, progress):
vlayer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
output = self.getOutputFromName(self.OUTPUT)
vprovider = vlayer.dataProvider()
if self.getParameterValue(self.FIELDS):
fields = vprovider.fields()
fields = vlayer.fields()
else:
fields = QgsFields()
if self.getParameterValue(self.GEOMETRY):

View File

@ -68,7 +68,7 @@ class RandomPointsAlongLines(GeoAlgorithm):
fields = QgsFields()
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, QgsWkbTypes.Point, layer.dataProvider().crs())
fields, QgsWkbTypes.Point, layer.crs())
nPoints = 0
nIterations = 0

View File

@ -77,7 +77,7 @@ class RandomPointsLayer(GeoAlgorithm):
fields = QgsFields()
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, QgsWkbTypes.Point, layer.dataProvider().crs())
fields, QgsWkbTypes.Point, layer.crs())
nPoints = 0
nIterations = 0

View File

@ -83,7 +83,7 @@ class RandomPointsPolygonsFixed(GeoAlgorithm):
fields = QgsFields()
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, QgsWkbTypes.Point, layer.dataProvider().crs())
fields, QgsWkbTypes.Point, layer.crs())
da = QgsDistanceArea()

View File

@ -84,7 +84,7 @@ class RandomPointsPolygonsVariable(GeoAlgorithm):
fields = QgsFields()
fields.append(QgsField('id', QVariant.Int, '', 10, 0))
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, QgsWkbTypes.Point, layer.dataProvider().crs())
fields, QgsWkbTypes.Point, layer.crs())
da = QgsDistanceArea()

View File

@ -49,12 +49,11 @@ class ReverseLineDirection(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT_LAYER))
provider = layer.dataProvider()
writer = self.getOutputFromName(
self.OUTPUT_LAYER).getVectorWriter(
layer.fields().toList(),
provider.wkbType(),
layer.wkbType(),
layer.crs())
outFeat = QgsFeature()

View File

@ -52,9 +52,8 @@ class SaveSelectedFeatures(GeoAlgorithm):
vectorLayer = dataobjects.getObjectFromUri(inputFilename)
provider = vectorLayer.dataProvider()
writer = output.getVectorWriter(provider.fields(),
provider.wkbType(), vectorLayer.crs())
writer = output.getVectorWriter(vectorLayer.fields(),
vectorLayer.wkbType(), vectorLayer.crs())
features = vector.features(vectorLayer)
total = 100.0 / len(features)

View File

@ -64,7 +64,7 @@ class SinglePartsToMultiparts(GeoAlgorithm):
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
fieldName = self.getParameterValue(self.FIELD)
geomType = self.singleToMultiGeom(layer.dataProvider().wkbType())
geomType = self.singleToMultiGeom(layer.wkbType())
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
layer.pendingFields().toList(), geomType, layer.crs())

View File

@ -55,14 +55,13 @@ class Smooth(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT_LAYER))
provider = layer.dataProvider()
iterations = self.getParameterValue(self.ITERATIONS)
offset = self.getParameterValue(self.OFFSET)
writer = self.getOutputFromName(
self.OUTPUT_LAYER).getVectorWriter(
layer.fields().toList(),
provider.wkbType(),
layer.wkbType(),
layer.crs())
outFeat = QgsFeature()

View File

@ -108,11 +108,8 @@ class SpatialJoin(GeoAlgorithm):
sumList = self.getParameterValue(self.STATS).lower().split(',')
targetProvider = target.dataProvider()
joinProvider = join.dataProvider()
targetFields = targetProvider.fields()
joinFields = joinProvider.fields()
targetFields = target.fields()
joinFields = join.fields()
fieldList = QgsFields()
@ -141,7 +138,7 @@ class SpatialJoin(GeoAlgorithm):
fields.append(f)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, targetProvider.geometryType(), targetProvider.crs())
fields, target.wkbType(), target.crs())
outFeat = QgsFeature()
inFeatB = QgsFeature()

View File

@ -60,7 +60,7 @@ class SplitLinesWithLines(GeoAlgorithm):
fieldList = layerA.pendingFields()
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
QgsWkbTypes.LineString, layerA.dataProvider().crs())
QgsWkbTypes.LineString, layerA.crs())
spatialIndex = vector.spatialindex(layerB)

View File

@ -72,15 +72,13 @@ class SumLines(GeoAlgorithm):
lengthFieldName = self.getParameterValue(self.LEN_FIELD)
countFieldName = self.getParameterValue(self.COUNT_FIELD)
polyProvider = polyLayer.dataProvider()
(idxLength, fieldList) = vector.findOrCreateField(polyLayer,
polyLayer.pendingFields(), lengthFieldName)
polyLayer.fields(), lengthFieldName)
(idxCount, fieldList) = vector.findOrCreateField(polyLayer, fieldList,
countFieldName)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fieldList.toList(), polyProvider.geometryType(), polyProvider.crs())
fieldList.toList(), polyLayer.wkbType(), polyLayer.crs())
spatialIndex = vector.spatialindex(lineLayer)

View File

@ -65,13 +65,10 @@ class SymmetricalDifference(GeoAlgorithm):
layerB = dataobjects.getObjectFromUri(
self.getParameterValue(self.OVERLAY))
providerA = layerA.dataProvider()
providerB = layerB.dataProvider()
geomType = providerA.geometryType()
geomType = layerA.wkbType()
fields = vector.combineVectorFields(layerA, layerB)
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(
fields, geomType, providerA.crs())
fields, geomType, layerA.crs())
featB = QgsFeature()
outFeat = QgsFeature()
@ -92,7 +89,7 @@ class SymmetricalDifference(GeoAlgorithm):
attrs = featA.attributes()
intersects = indexA.intersects(geom.boundingBox())
for i in intersects:
providerB.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
layerB.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
tmpGeom = featB.geometry()
if diffGeom.intersects(tmpGeom):
diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))
@ -117,7 +114,7 @@ class SymmetricalDifference(GeoAlgorithm):
count += 1
progress.setPercentage(int(count * total))
length = len(providerA.fields())
length = len(layerA.fields())
for featA in featuresB:
add = True
@ -127,7 +124,7 @@ class SymmetricalDifference(GeoAlgorithm):
attrs = [NULL] * length + attrs
intersects = indexB.intersects(geom.boundingBox())
for i in intersects:
providerA.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
layerA.getFeatures(QgsFeatureRequest().setFilterFid(i)).nextFeature(featB)
tmpGeom = featB.geometry()
if diffGeom.intersects(tmpGeom):
diffGeom = QgsGeometry(diffGeom.difference(tmpGeom))

View File

@ -72,12 +72,10 @@ class Union(GeoAlgorithm):
vlayerA = dataobjects.getObjectFromUri(self.getParameterValue(Union.INPUT))
vlayerB = dataobjects.getObjectFromUri(self.getParameterValue(Union.INPUT2))
vproviderA = vlayerA.dataProvider()
geomType = vproviderA.wkbType()
geomType = vlayerA.wkbType()
fields = vector.combineVectorFields(vlayerA, vlayerB)
writer = self.getOutputFromName(Union.OUTPUT).getVectorWriter(fields,
geomType, vproviderA.crs())
geomType, vlayerA.crs())
inFeatA = QgsFeature()
inFeatB = QgsFeature()
outFeat = QgsFeature()
@ -175,7 +173,7 @@ class Union(GeoAlgorithm):
ProcessingLog.addToLog(ProcessingLog.LOG_INFO,
self.tr('Feature geometry error: One or more output features ignored due to invalid geometry.'))
length = len(vproviderA.fields())
length = len(vlayerA.fields())
atMapA = [None] * length
featuresA = vector.features(vlayerB)

View File

@ -71,7 +71,7 @@ class VectorSplit(GeoAlgorithm):
baseName = os.path.join(directory, '{0}_{1}'.format(layer.name(), fieldName))
fields = layer.pendingFields()
crs = layer.dataProvider().crs()
crs = layer.crs()
geomType = layer.wkbType()
total = 100.0 / len(uniqueValues)

View File

@ -158,7 +158,7 @@ class ZonalStatistics(GeoAlgorithm):
columnPrefix + 'mode', 21, 6)
writer = self.getOutputFromName(self.OUTPUT_LAYER).getVectorWriter(
fields.toList(), layer.dataProvider().wkbType(), layer.crs())
fields.toList(), layer.wkbType(), layer.crs())
outFeat = QgsFeature()