11 changes: 2 additions & 9 deletions src/sextante/ftools/SimplifyGeometries.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,10 @@ def getIcon(self):
def processAlgorithm(self, progress):
self.processedFeatures = 0
self.progress = progress
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(SimplifyGeometries.OUTPUT)
tolerance =self.getParameterValue(SimplifyGeometries.TOLERANCE)
useSelection = self.getParameterValue(SimplifyGeometries.USE_SELECTION)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(SimplifyGeometries.INPUT))
self.generalize(vlayer, useSelection, tolerance, output, systemEncoding)
self.generalize(vlayer, useSelection, tolerance)


def defineCharacteristics(self):
Expand Down Expand Up @@ -60,12 +57,8 @@ def generalize( self, inputLayer, useSelection, tolerance, shapePath, shapeEncod
self.inputLayer = inputLayer
self.useSelection = useSelection
self.tolerance = tolerance
self.outputFileName = shapePath
self.outputEncoding = shapeEncoding
self.shapeFileWriter = None
self.pointsBefore = 0
self.pointsAfter = 0
shapeFileWriter = None
vProvider = self.inputLayer.dataProvider()
allAttrs = vProvider.attributeIndexes()
vProvider.select( allAttrs )
Expand All @@ -74,7 +67,7 @@ def generalize( self, inputLayer, useSelection, tolerance, shapePath, shapeEncod
wkbType = self.inputLayer.wkbType()
if not crs.isValid():
crs = None
shapeFileWriter = QgsVectorFileWriter( self.outputFileName, self.outputEncoding, shapeFields, wkbType, crs )
shapeFileWriter = self.getOutputFromName(SimplifyGeometries.OUTPUT).getVectorWriter(shapeFields, wkbType, crs )
featureId = 0
if self.useSelection:
selection = self.inputLayer.selectedFeatures()
Expand Down
7 changes: 1 addition & 6 deletions src/sextante/ftools/SinglePartsToMultiparts.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,13 @@ def getIcon(self):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/single_to_multi.png")

def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(SinglePartsToMultiparts.INPUT))
output = self.getOutputValue(SinglePartsToMultiparts.OUTPUT)
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
geomType = self.singleToMultiGeom(vprovider.geometryType())
writer = QgsVectorFileWriter( output, systemEncoding,
fields, geomType, vprovider.crs() )
writer = self.getOutputFromName(SinglePartsToMultiparts.OUTPUT).getVectorWriter(fields, geomType, vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
Expand Down Expand Up @@ -60,7 +56,6 @@ def processAlgorithm(self, progress):
feature_list = self.extractAsMulti( inGeom )
multi_feature.extend( feature_list )
nElement += 1
#self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
outFeat.setAttributeMap( atts )
outGeom = QgsGeometry( self.convertGeometry(multi_feature, vType) )
outFeat.setGeometry(outGeom)
Expand Down
10 changes: 1 addition & 9 deletions src/sextante/ftools/SumLines.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@ def getIcon(self):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/sum_lines.png")

def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(SumLines.OUTPUT)
inField = self.getParameterValue(SumLines.FIELD)
lineLayer = QGisLayers.getObjectFromUri(self.getParameterValue(SumLines.LINES))
polyLayer = QGisLayers.getObjectFromUri(self.getParameterValue(SumLines.POLYGONS))
Expand Down Expand Up @@ -54,12 +51,7 @@ def processAlgorithm(self, progress):
lineProvider.rewind()
start = 15.00
add = 85.00 / polyProvider.featureCount()
check = QFile(output)
if check.exists():
if not QgsVectorFileWriter.deleteShapeFile(output):
raise GeoAlgorithmExecutionException("Could not delete existing output file")
writer = QgsVectorFileWriter(output, systemEncoding, fieldList, polyProvider.geometryType(), sRs)
#writer = QgsVectorFileWriter(outPath, "UTF-8", fieldList, polyProvider.geometryType(), sRs)
writer = self.getOutputFromName(SumLines.OUTPUT).getVectorWriter(fieldList, polyProvider.geometryType(), sRs)
spatialIndex = ftools_utils.createIndex( lineProvider )
while polyProvider.nextFeature(inFeat):
inGeom = QgsGeometry(inFeat.geometry())
Expand Down
5 changes: 1 addition & 4 deletions src/sextante/ftools/Union.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ def getIcon(self):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/union.png")

def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(Union.OUTPUT)
vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(Union.INPUT))
vlayerB = QGisLayers.getObjectFromUri(self.getParameterValue(Union.INPUT2))
GEOS_EXCEPT = True
Expand All @@ -47,7 +44,7 @@ def processAlgorithm(self, progress):
longNames = ftools_utils.checkFieldNameLength( fields )
if not longNames.isEmpty():
raise GeoAlgorithmExecutionException("Following field names are longer than 10 characters:\n" + longNames.join('\n') )
writer = QgsVectorFileWriter( output, systemEncoding, fields, vproviderA.geometryType(), vproviderA.crs() )
writer = self.getOutputFromName(Union.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() )
inFeatA = QgsFeature()
inFeatB = QgsFeature()
outFeat = QgsFeature()
Expand Down
8 changes: 6 additions & 2 deletions src/sextante/ftools/VariableDistanceBuffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,17 @@ def getIcon(self):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/buffer.png")

def processAlgorithm(self, progress):
output = self.getOutputValue(VariableDistanceBuffer.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(VariableDistanceBuffer.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select(allAttrs)
writer = self.getOutputFromName(VariableDistanceBuffer.OUTPUT).getVectorWriter(vprovider.fields(), QGis.WKBPolygon, vprovider.crs() )
useSelection = self.getParameterValue(VariableDistanceBuffer.USE_SELECTED)
dissolve = self.getParameterValue(VariableDistanceBuffer.DISSOLVE)
field = self.getParameterValue(VariableDistanceBuffer.FIELD)
segments = int(self.getParameterValue(VariableDistanceBuffer.SEGMENTS))
layer = QGisLayers.getObjectFromUri(self.getParameterValue(VariableDistanceBuffer.INPUT))
buff.buffering(progress, output, 0, field, useSelection, True, layer, dissolve, segments)
buff.buffering(progress, writer, 0, field, useSelection, True, layer, dissolve, segments)

def defineCharacteristics(self):
self.name = "Variable distance buffer"
Expand Down
5 changes: 1 addition & 4 deletions src/sextante/ftools/VoronoiPolygons.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,11 @@ class VoronoiPolygons(GeoAlgorithm):
OUTPUT = "OUTPUT"

def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(VoronoiPolygons.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(VoronoiPolygons.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
writer = QgsVectorFileWriter( output, systemEncoding, vprovider.fields(), QGis.WKBPolygon, vprovider.crs() )
writer = self.getOutputFromName(VoronoiPolygons.OUTPUT).getVectorWriter(vprovider.fields(), QGis.WKBPolygon, vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
extent = vlayer.extent()
Expand Down
22 changes: 16 additions & 6 deletions src/sextante/outputs/OutputVector.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from sextante.outputs.Output import Output
from qgis.core import *
from PyQt4.QtCore import *
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException

class OutputVector(Output):

Expand All @@ -19,7 +20,7 @@ def getVectorWriter(self, fields, geomType, crs, options=None):
'''Returns a suitable writer to which features can be added as a result of the algorithm.
Use this to transparently handle output values instead of creating your own method.
Parameters:
-field: an array with the fields of the attributes table
-field: an array with the fields of the attributes table or dict of int-QgsField
-geomType: A suitable geometry type, as it would be passed to a QgsVectorFileWriter constructor
-crs: the crs of the layer to create.
Executing this method might modify the object, adding additional information to it, so the writer
Expand All @@ -28,6 +29,8 @@ def getVectorWriter(self, fields, geomType, crs, options=None):
thus rendering a previously obtained writer useless'''

if self.value.startswith(self.MEMORY_LAYER_PREFIX):
if isinstance(fields, dict):
fields = fields.values()
types = { QGis.WKBPoint : "Point", QGis.WKBLineString : "Point", QGis.WKBPolygon : "Polygon",
QGis.WKBMultiPoint : "MultiPoint", QGis.WKBMultiLineString : "MultiLineString", QGis.WKBMultiPolygon : "MultiPolygon",}
v = QgsVectorLayer(types[geomType], self.description, "memory")
Expand All @@ -38,18 +41,25 @@ def getVectorWriter(self, fields, geomType, crs, options=None):
return v
else: #outputChannel is a file path
#TODO: Add support for encodings
check = QFile(self.value)
if check.exists():
if not QgsVectorFileWriter.deleteShapeFile(self.value):
raise GeoAlgorithmExecutionException("Could not delete existing output file")
formats = QgsVectorFileWriter.supportedFiltersAndFormats()
OGRCodes = {}
for key,value in formats.items():
extension = str(key)
extension = extension[extension.find('*.') + 2:]
extension = extension[:extension.find(" ")]
OGRCodes[extension] = value
fieldsDict = {}
i = 0
for field in fields:
fieldsDict[i] = field
i += 1
if isinstance(fields, dict):
fieldsDict = fields
else:
fieldsDict = {}
i = 0
for field in fields:
fieldsDict[i] = field
i += 1
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
extension = self.value[self.value.find(".")+1:]
Expand Down