[sextante]Replaced provider.crs() by layer.crs(). Fixed memory layer usage

This commit is contained in:
Victor Olaya 2013-02-24 16:40:01 +01:00
parent ce8d79cc0f
commit 3e6c803f9d
28 changed files with 41 additions and 43 deletions

View File

@ -64,7 +64,7 @@ class AddTableField(GeoAlgorithm):
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
fields.append(QgsField(fieldname, self.TYPES[fieldtype]))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
writer = output.getVectorWriter(fields, vprovider.geometryType(), vlayer.crs() )
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0

View File

@ -46,7 +46,7 @@ class AutoincrementalField(GeoAlgorithm):
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
fields[len(fields)] = QgsField("AUTO", QVariant.Int)
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
writer = output.getVectorWriter(fields, vprovider.geometryType(), vlayer.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -50,7 +50,7 @@ class EquivalentNumField(GeoAlgorithm):
fieldindex = vlayer.fieldNameIndex(fieldname)
fields = vprovider.fields()
fields.append(QgsField("NUM_FIELD", QVariant.Int))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
writer = output.getVectorWriter(fields, vprovider.geometryType(), vlayer.crs() )
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0

View File

@ -46,7 +46,7 @@ class Explode(GeoAlgorithm):
output = self.getOutputFromName(self.OUTPUT)
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
writer = output.getVectorWriter(fields, QGis.WKBLineString, vprovider.crs() )
writer = output.getVectorWriter(fields, QGis.WKBLineString, vlayer.crs() )
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0

View File

@ -69,7 +69,7 @@ class FieldsPyculator(GeoAlgorithm):
vprovider = layer.dataProvider()
fields = vprovider.fields()
fields.append(QgsField(fieldname, QVariant.Double))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
writer = output.getVectorWriter(fields, vprovider.geometryType(), layer.crs() )
outFeat = QgsFeature()
new_ns = {}

View File

@ -61,7 +61,7 @@ class FieldsCalculator(GeoAlgorithm):
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
fields.append(QgsField(fieldname, QVariant.Double))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs())
writer = output.getVectorWriter(fields, vprovider.geometryType(), vlayer.crs())
outFeat = QgsFeature()
inGeom = QgsGeometry()
nFeat = vprovider.featureCount()

View File

@ -72,7 +72,7 @@ class JoinAttributes(GeoAlgorithm):
outFields.extend(provider.fields())
outFields.extend(provider2.fields())
writer = output.getVectorWriter(outFields, provider.geometryType(), provider.crs())
writer = output.getVectorWriter(outFields, provider.geometryType(), layer.crs())
inFeat = QgsFeature()
inFeat2 = QgsFeature()

View File

@ -85,7 +85,7 @@ class SaveSelectedFeatures(GeoAlgorithm):
#To do so, we call the getVectorWriter method in the Output object.
#That will give as a SextanteVectorWriter, that we can later use to add features.
provider = vectorLayer.dataProvider()
writer = output.getVectorWriter( provider.fields(), provider.geometryType(), provider.crs() )
writer = output.getVectorWriter( provider.fields(), provider.geometryType(), vectorLayer.crs() )
#Now we take the selected features and add them to the output layer
features = QGisLayers.features(vectorLayer)

View File

@ -56,7 +56,7 @@ class Centroids(GeoAlgorithm):
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
writer = self.getOutputFromName(self.OUTPUT_LAYER).getVectorWriter(layer.pendingFields(),
QGis.WKBPoint, layer.dataProvider().crs())
QGis.WKBPoint, layer.crs())
#layer.select(layer.pendingAllAttributesList())

View File

@ -63,7 +63,7 @@ class Delaunay(GeoAlgorithm):
]
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
QGis.WKBPolygon, layer.dataProvider().crs())
QGis.WKBPolygon, layer.crs())
pts = []
ptDict = {}

View File

@ -78,7 +78,7 @@ class ExportGeometryInfo(GeoAlgorithm):
fields.append(QgsField(QString("ycoords"), QVariant.Double))
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
provider.geometryType(), provider.crs())
provider.geometryType(), layer.crs())
ellips = None
crs = None

View File

@ -56,7 +56,7 @@ class ExtractNodes(GeoAlgorithm):
provider = layer.dataProvider()
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
QGis.WKBPoint, provider.crs())
QGis.WKBPoint, layer.crs())
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -70,7 +70,7 @@ class FixedDistanceBuffer(GeoAlgorithm):
provider = layer.dataProvider()
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
QGis.WKBPolygon, provider.crs())
QGis.WKBPolygon, layer.crs())
buff.buffering(progress, writer, distance, None, False,
layer, dissolve, segments)

View File

@ -52,7 +52,7 @@ class LinesToPolygons(GeoAlgorithm):
provider = layer.dataProvider()
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
QGis.WKBPolygon, provider.crs())
QGis.WKBPolygon, layer.crs())
outFeat = QgsFeature()

View File

@ -78,7 +78,7 @@ class MeanCoords(GeoAlgorithm):
]
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
QGis.WKBPoint, provider.crs())
QGis.WKBPoint, layer.crs())
current = 0
total = 100.0 / float(provider.featureCount() * len(uniqueValues))

View File

@ -60,7 +60,7 @@ class MultipartToSingleparts(GeoAlgorithm):
geomType = self.multiToSingleGeom(provider.geometryType())
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
geomType, provider.crs())
geomType, layer.crs())
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -65,7 +65,7 @@ class SimplifyGeometries(GeoAlgorithm):
provider = layer.dataProvider()
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
layer.wkbType(), provider.crs())
layer.wkbType(), layer.crs())
current = 0
selection = QGisLayers.features(layer)

View File

@ -65,7 +65,7 @@ class SinglePartsToMultiparts(GeoAlgorithm):
geomType = self.singleToMultiGeom(provider.geometryType())
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
geomType, provider.crs())
geomType, layer.crs())
inFeat = QgsFeature()
outFeat = QgsFeature()

View File

@ -54,10 +54,7 @@ class Union(GeoAlgorithm):
fields = utils.combineVectorFields(vlayerA, vlayerB )
names = [field.name() for field in fields]
SextanteLog.addToLog(SextanteLog.LOG_INFO, str(names))
#longNames = ftools_utils.checkFieldNameLength( fields )
#if not longNames.isEmpty():
#raise GeoAlgorithmExecutionException("Following field names are longer than 10 characters:\n" + longNames.join('\n') )
SextanteLog.addToLog(SextanteLog.LOG_INFO, str(names))
writer = self.getOutputFromName(Union.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() )
inFeatA = QgsFeature()
inFeatB = QgsFeature()

View File

@ -803,7 +803,7 @@ class mmqgisx_hub_distance_algorithm(GeoAlgorithm):
for feature in features:
source = feature.geometry().boundingBox().center()
distance = QgsDistanceArea()
distance.setSourceCrs(layersource.dataProvider().crs().srsid())
distance.setSourceCrs(layersource.crs().srsid())
distance.setEllipsoidalMode(True)
closest = hubs[0]

View File

@ -198,7 +198,7 @@ class GeoAlgorithm:
if layer is None: # for the case of memory layer, if the getCompatible method has been called
continue
provider = layer.dataProvider()
writer = out.getVectorWriter( provider.fields(), provider.geometryType(), provider.crs())
writer = out.getVectorWriter( provider.fields(), provider.geometryType(), layer.crs())
features = QGisLayers.features(layer)
for feature in features:
writer.addFeature(feature)

View File

@ -52,7 +52,7 @@ class LayerExporter():
provider = layer.dataProvider()
useSelection = SextanteConfig.getSetting(SextanteConfig.USE_SELECTED)
if useSelection and layer.selectedFeatureCount() != 0:
writer = QgsVectorFileWriter(output, systemEncoding, layer.pendingFields(), provider.geometryType(), provider.crs())
writer = QgsVectorFileWriter(output, systemEncoding, layer.pendingFields(), provider.geometryType(), layer.crs())
selection = layer.selectedFeatures()
for feat in selection:
writer.addFeature(feat)
@ -65,7 +65,7 @@ class LayerExporter():
except UnicodeEncodeError:
isASCII=False
if (not unicode(layer.source()).endswith("shp") or not isASCII):
writer = QgsVectorFileWriter( output, systemEncoding, layer.pendingFields(), provider.geometryType(), provider.crs() )
writer = QgsVectorFileWriter( output, systemEncoding, layer.pendingFields(), provider.geometryType(), layer.crs() )
for feat in layer.getFeatures():
writer.addFeature(feat)
del writer
@ -108,7 +108,7 @@ class LayerExporter():
isASCII=False
isDbf = unicode(table.source()).endswith("dbf") or unicode(table.source()).endswith("shp")
if (not isDbf or not isASCII):
writer = QgsVectorFileWriter( output, systemEncoding, provider.fields(), QGis.WKBNoGeometry, provider.crs() )
writer = QgsVectorFileWriter( output, systemEncoding, provider.fields(), QGis.WKBNoGeometry, layer.crs() )
for feat in table.getFeatures():
writer.addFeature(feat)
del writer

View File

@ -54,12 +54,13 @@ class SextanteVectorWriter:
uri = self.TYPE_MAP[geometryType]
if crs.isValid():
uri += "?crs=" + crs.authid()
uri += "?crs=" + crs.authid() + "&"
fieldsdesc = ["field=" + str(f.name()) for f in fields]
#+ ":" + str(f.typeName())
fieldsstring = "&".join(fieldsdesc)
uri += fieldsstring
self.memLayer = QgsVectorLayer(uri, self.fileName, "memory")
self.writer = self.memLayer.dataProvider()
# FIXME: addAttributes was deprecated and removed
self.writer.addAttributes(fields.values())
self.memLayer.updateFieldMap()
self.writer = self.memLayer.dataProvider()
else:
formats = QgsVectorFileWriter.supportedFiltersAndFormats()
OGRCodes = {}

View File

@ -81,7 +81,7 @@ class AlgorithmExecutor(QThread):
while provider.nextFeature(feat):
output = SextanteUtils.getTempFilename("shp")
self.filelist.append(output)
writer = QgsVectorFileWriter(output, systemEncoding,provider.fields(), provider.geometryType(), provider.crs() )
writer = QgsVectorFileWriter(output, systemEncoding,provider.fields(), provider.geometryType(), layer.crs() )
writer.addFeature(feat)
del writer
else:

View File

@ -64,7 +64,7 @@ class UnthreadedAlgorithmExecutor:
while provider.nextFeature(feat):
output = SextanteUtils.getTempFilename("shp")
filelist.append(output)
writer = QgsVectorFileWriter(output, systemEncoding,provider.fields(), provider.geometryType(), provider.crs() )
writer = QgsVectorFileWriter(output, systemEncoding,provider.fields(), provider.geometryType(), layer.crs() )
writer.addFeature(feat)
del writer

View File

@ -39,11 +39,11 @@ from sextante.core.SextanteVectorWriter import SextanteVectorWriter
# "input" contains the location of the selected layer.
# We get the actual object, so we can get its bounds
layer = getobject(input)
layer = sextante.getobject(input)
provider = layer.dataProvider()
fields = provider.fields()
fields.append(QgsField("UNIQ_COUNT", QVariant.Int))
writer = SextanteVectorWriter(output, None, fields, provider.geometryType(), provider.crs() )
writer = SextanteVectorWriter(output, None, fields, provider.geometryType(), layer.crs() )
# Fields are defined by their names, but QGIS needs the index for the attributes map
class_field_index = layer.fieldNameIndex(class_field)
@ -57,8 +57,8 @@ classes = {}
#Iterate over input layer to count unique values in each class
feats = getfeatures(layer)
nFeat = len(feates)
feats = sextante.getfeatures(layer)
nFeat = len(feats)
for inFeat in feats:
progress.setPercentage(int((100 * nElement)/nFeat))
nElement += 1
@ -71,7 +71,7 @@ for inFeat in feats:
classes[clazz].append(value)
# Create output vector layer with additional attribute
feats = getfeatures(layer)
feats = sextante.getfeatures(layer)
nElement = 0
for inFeat in feats:
progress.setPercentage(int((100 * nElement)/nFeat))

View File

@ -54,7 +54,7 @@ vectorLayer = QGisLayers.getObjectFromUri(input)
#First we create the output layer.
#To do so, we create a SextanteVectorWriter, that we can later use to add features.
provider = vectorLayer.dataProvider()
writer = SextanteVectorWriter(output, None, provider.fields(), provider.geometryType(), provider.crs() )
writer = SextanteVectorWriter(output, None, provider.fields(), provider.geometryType(), layer.crs() )
#Now we take the selected features and add them to the output layer
selection = vectorLayer.selectedFeatures()

View File

@ -38,7 +38,7 @@ from sextante.core.SextanteVectorWriter import SextanteVectorWriter
# "input" contains the location of the selected layer.
# We get the actual object,
layer = getobject(input)
layer = sextante.getobject(input)
provider = layer.dataProvider()
allAttrs = provider.attributeIndexes()
provider.select( allAttrs )
@ -54,7 +54,7 @@ inGeom = QgsGeometry()
nElement = 0
writers = {}
feats = getfeatures(layer)
feats = sextante.getfeatures(layer)
nFeat = len(feats)
for inFeat in feats:
progress.setPercentage(int((100 * nElement)/nFeat))
@ -63,7 +63,7 @@ for inFeat in feats:
clazz = atMap[class_field_index].toString()
if clazz not in writers:
outputFile = output + "_" + str(len(writers)) + ".shp"
writers[clazz] = SextanteVectorWriter(outputFile, None, fields, provider.geometryType(), provider.crs() )
writers[clazz] = SextanteVectorWriter(outputFile, None, fields, provider.geometryType(), layer.crs() )
inGeom = inFeat.geometry()
outFeat.setGeometry(inGeom)
outFeat.setAttributes(atMap)