updated remaining ftools algorithms to new architecture

git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@348 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
This commit is contained in:
volayaf 2012-08-15 12:21:03 +00:00
parent 0a29cc0a72
commit 8c42295ae4
24 changed files with 52 additions and 125 deletions

View File

@ -4,9 +4,7 @@ from qgis.core import *
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from sextante.core.SextanteLog import SextanteLog
def buffering(progress, output, distance, field, useSelection, useField, layer, dissolve, segments ):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
def buffering(progress, writer, distance, field, useSelection, useField, layer, dissolve, segments ):
GEOS_EXCEPT = True
FEATURE_EXCEPT = True
vproviderA = layer.dataProvider()
@ -15,10 +13,6 @@ def buffering(progress, output, distance, field, useSelection, useField, layer,
fields = vproviderA.fields()
if useField:
field = vproviderA.fieldNameIndex(field)
writer = QgsVectorFileWriter(output, systemEncoding, fields, QGis.WKBPolygon, vproviderA.crs() )
# check if writer was created properly, if not, return with error
if writer.hasError():
raise GeoAlgorithmExecutionException("Could not create output file");
outFeat = QgsFeature()
inFeat = QgsFeature()
inGeom = QgsGeometry()
@ -64,9 +58,9 @@ def buffering(progress, output, distance, field, useSelection, useField, layer,
for inFeat in selectionA:
atMap = inFeat.attributeMap()
if useField:
value = atMap[ self.myParam ].toDouble()[ 0 ]
value = atMap[ field ].toDouble()[ 0 ]
else:
value = self.myParam
value = distance
inGeom = QgsGeometry( inFeat.geometry() )
try:
outGeom = inGeom.buffer( float( value ), segments )

View File

@ -28,14 +28,9 @@ class Centroids(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = QGisLayers.getObjectFromUri(self.getParameterValue(Centroids.INPUT_LAYER))
outFileName = self.getOutputValue(Centroids.OUTPUT_LAYER)
provider = layer.dataProvider()
settings = QSettings()
encoding = settings.value( "/UI/encoding", "System" ).toString()
writer = QgsVectorFileWriter(outFileName, encoding, provider.fields(),
writer = self.getOutputFromName(Centroids.OUTPUT_LAYER).getVectorWriter(provider.fields(),
QGis.WKBPoint, provider.crs())
allAttrs = provider.attributeIndexes()

View File

@ -19,9 +19,6 @@ class Delaunay(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/delaunay.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(Delaunay.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(Delaunay.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
@ -30,7 +27,7 @@ class Delaunay(GeoAlgorithm):
0 : QgsField( "POINTA", QVariant.Double ),
1 : QgsField( "POINTB", QVariant.Double ),
2 : QgsField( "POINTC", QVariant.Double ) }
writer = QgsVectorFileWriter( output, systemEncoding, fields, QGis.WKBPolygon, vprovider.crs() )
writer = self.getOutputFromName(Delaunay.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vprovider.crs() )
inFeat = QgsFeature()
c = voronoi.Context()
pts = []

View File

@ -24,9 +24,6 @@ class Difference(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/difference.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(Difference.OUTPUT)
useSelection = self.getParameterValue(Difference.USE_SELECTED)
useSelection2 = self.getParameterValue(Difference.USE_SELECTED2)
vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(Difference.INPUT))
@ -48,7 +45,7 @@ class Difference(GeoAlgorithm):
else:
if not crsA != crsB:
SextanteLog.addToLog(SextanteLog.LOG_WARNING, "Difference. Non-matching CRSs. Results might be unexpected")
writer = QgsVectorFileWriter(output, systemEncoding, fields, vproviderA.geometryType(), vproviderA.crs() )
writer = self.getOutputFromName(Difference.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() )
inFeatA = QgsFeature()
inFeatB = QgsFeature()
outFeat = QgsFeature()

View File

@ -24,9 +24,6 @@ class Dissolve(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/dissolve.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(Dissolve.OUTPUT)
useSelection = self.getParameterValue(Dissolve.USE_SELECTED)
useField = not self.getParameterValue(Dissolve.USE_SELECTED)
fieldname = self.getParameterValue(Dissolve.FIELD)
@ -37,7 +34,7 @@ class Dissolve(GeoAlgorithm):
vproviderA = vlayerA.dataProvider()
allAttrsA = vproviderA.attributeIndexes()
fields = vproviderA.fields()
writer = QgsVectorFileWriter( output, systemEncoding, fields, vproviderA.geometryType(), vproviderA.crs() )
writer = self.getOutputFromName(Dissolve.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() )
if writer.hasError():
raise GeoAlgorithmExecutionException("Could not create output file");
inFeat = QgsFeature()

View File

@ -17,15 +17,12 @@ class ExportGeometryInfo(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/export_geometry.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(ExportGeometryInfo.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(ExportGeometryInfo.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
( fields, index1, index2 ) = self.checkGeometryFields(vlayer)
writer = QgsVectorFileWriter( output, systemEncoding,fields, vprovider.geometryType(), vprovider.crs() )
writer = self.getOutputFromName(ExportGeometryInfo.OUTPUT).getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -17,9 +17,6 @@ class ExtentFromLayer(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/layer_extent.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(ExtentFromLayer.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(ExtentFromLayer.INPUT))
fields = {
0 : QgsField( "MINX", QVariant.Double ),
@ -33,7 +30,7 @@ class ExtentFromLayer(GeoAlgorithm):
8 : QgsField( "HEIGHT", QVariant.Double ),
9 : QgsField( "WIDTH", QVariant.Double ) }
writer = QgsVectorFileWriter(output, systemEncoding, fields, QGis.WKBPolygon, vlayer.crs() )
writer = self.getOutputFromName(ExtentFromLayer.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vlayer.crs() )
rect = vlayer.extent()
minx = rect.xMinimum()
miny = rect.yMinimum()

View File

@ -18,15 +18,12 @@ class ExtractNodes(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/extract_nodes.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(ExtractNodes.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(ExtractNodes.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
writer = QgsVectorFileWriter( output, systemEncoding, fields, QGis.WKBPoint, vprovider.crs() )
writer = self.getOutputFromName(ExtractNodes.OUTPUT).getVectorWriter(fields, QGis.WKBPoint, vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -25,13 +25,17 @@ class FixedDistanceBuffer(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/buffer.png")
def processAlgorithm(self, progress):
output = self.getOutputValue(FixedDistanceBuffer.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(FixedDistanceBuffer.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select(allAttrs)
writer = self.getOutputFromName(FixedDistanceBuffer.OUTPUT).getVectorWriter(vprovider.fields(), QGis.WKBPolygon, vprovider.crs() )
useSelection = self.getParameterValue(FixedDistanceBuffer.USE_SELECTED)
distance = self.getParameterValue(FixedDistanceBuffer.DISTANCE)
dissolve = self.getParameterValue(FixedDistanceBuffer.DISSOLVE)
segments = int(self.getParameterValue(FixedDistanceBuffer.SEGMENTS))
layer = QGisLayers.getObjectFromUri(self.getParameterValue(FixedDistanceBuffer.INPUT))
buff.buffering(progress, output, distance, None, useSelection, False, layer, dissolve, segments)
buff.buffering(progress, writer, distance, None, useSelection, False, layer, dissolve, segments)
def defineCharacteristics(self):
self.name = "Fixed distance buffer"

View File

@ -24,9 +24,6 @@ class Intersection(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/intersect.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(Intersection.OUTPUT)
useSelection = self.getParameterValue(Intersection.USE_SELECTED)
useSelection2 = self.getParameterValue(Intersection.USE_SELECTED2)
vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(Intersection.INPUT))
@ -51,7 +48,7 @@ class Intersection(GeoAlgorithm):
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(Intersection.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() )
inFeatA = QgsFeature()
inFeatB = QgsFeature()
outFeat = QgsFeature()

View File

@ -18,9 +18,6 @@ class LayerFromExtent(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/layer_extent.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(LayerFromExtent.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(LayerFromExtent.INPUT))
fields = {
0 : QgsField( "MINX", QVariant.Double ),
@ -34,7 +31,7 @@ class LayerFromExtent(GeoAlgorithm):
8 : QgsField( "HEIGHT", QVariant.Double ),
9 : QgsField( "WIDTH", QVariant.Double ) }
writer = QgsVectorFileWriter( output, systemEncoding, fields, QGis.WKBPolygon, self.vlayer.crs() )
writer = self.getOutputFromName(LayerFromExtent.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, self.vlayer.crs() )
rect = vlayer.extent()
minx = rect.xMinimum()
miny = rect.yMinimum()

View File

@ -23,9 +23,6 @@ class LinesIntersection(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/intersections.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(LinesIntersection.OUTPUT)
layer1 = QGisLayers.getObjectFromUri(self.getParameterValue(LinesIntersection.INPUT1))
layer2 = QGisLayers.getObjectFromUri(self.getParameterValue(LinesIntersection.INPUT2))
field1 = self.getParameterValue(LinesIntersection.FIELD1)
@ -46,11 +43,7 @@ class LinesIntersection(GeoAlgorithm):
field2.setName(unicode(field2.name()) + "_2")
fieldList = {0:field1, 1:field2}
sRs = provider1.crs()
check = QFile(output)
if check.exists():
if not QgsVectorFileWriter.deleteShapeFile(output):
raise GeoAlgorithmExecutionException("Could not delete existing output file")
writer = QgsVectorFileWriter(output, systemEncoding, fieldList, QGis.WKBPoint, sRs)
writer = self.getOutputFromName(LinesIntersection.OUTPUT).getVectorWriter(fieldList, QGis.WKBPoint, sRs)
#writer = QgsVectorFileWriter(outPath, "UTF-8", fieldList, QGis.WKBPoint, sRs)
inFeat = QgsFeature()
inFeatB = QgsFeature()

View File

@ -17,15 +17,12 @@ class LinesToPolygons(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/to_lines.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(LinesToPolygons.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(LinesToPolygons.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
writer = QgsVectorFileWriter( output, systemEncoding, fields, QGis.WKBPolygon, vprovider.crs() )
writer = self.getOutputFromName(LinesToPolygons.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -22,9 +22,6 @@ class MeanCoords(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/mean.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(MeanCoords.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(MeanCoords.POINTS))
weightField = self.getParameterValue(MeanCoords.WEIGHT)
uniqueField = self.getParameterValue(MeanCoords.UID)
@ -42,7 +39,7 @@ class MeanCoords(GeoAlgorithm):
uniqueValues = [QVariant(1)]
single = True
fieldList = { 0 : QgsField("MEAN_X", QVariant.Double), 1 : QgsField("MEAN_Y", QVariant.Double), 2 : QgsField("UID", QVariant.String) }
writer = QgsVectorFileWriter(output, systemEncoding, fieldList, QGis.WKBPoint, sRs)
writer = self.getOutputFromName(MeanCoords.OUTPUT).getVectorWriter(fieldList, QGis.WKBPoint, sRs)
outfeat = QgsFeature()
points = []
weights = []

View File

@ -18,17 +18,13 @@ class MultipartToSingleparts(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/multi_to_single.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
output = self.getOutputValue(self.OUTPUT)
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
geomType = self.multiToSingleGeom(vprovider.geometryType())
writer = QgsVectorFileWriter( output, systemEncoding,
fields, geomType, vprovider.crs() )
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, geomType, vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()

View File

@ -23,9 +23,6 @@ class PointsInPolygon(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/sum_points.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(PointsInPolygon.OUTPUT)
inField = self.getParameterValue(PointsInPolygon.FIELD)
polyLayer = QGisLayers.getObjectFromUri(self.getParameterValue(PointsInPolygon.POLYGONS))
pointLayer = QGisLayers.getObjectFromUri(self.getParameterValue(PointsInPolygon.POINTS))
@ -45,11 +42,7 @@ class PointsInPolygon(GeoAlgorithm):
field = QgsField(unicode(inField), QVariant.Double, "real", 24, 15, "point count field")
fieldList[index] = field
sRs = polyProvider.crs()
check = QFile(output)
if check.exists():
if not QgsVectorFileWriter.deleteShapeFile(output):
raise GeoAlgorithmExecutionException("could not delete file: " + output)
writer = QgsVectorFileWriter(output, systemEncoding, fieldList, polyProvider.geometryType(), sRs)
writer = self.getOutputFromName(PointsInPolygon.OUTPUT).getVectorWriter(fieldList, polyProvider.geometryType(), sRs)
inFeat = QgsFeature()
inFeatB = QgsFeature()
outFeat = QgsFeature()

View File

@ -18,28 +18,22 @@ class PolygonsToLines(GeoAlgorithm):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/to_lines.png")
def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(PolygonsToLines.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(PolygonsToLines.INPUT))
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
writer = QgsVectorFileWriter( output, systemEncoding,fields, QGis.WKBLineString, vprovider.crs() )
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, QGis.WKBLineString, vprovider.crs() )
inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
outGeom = QgsGeometry()
nFeat = vprovider.featureCount()
nElement = 0
#self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0)
#self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
while vprovider.nextFeature(inFeat):
multi = False
nElement += 1
progress.setPercentage(int(nElement/nFeat * 100))
#self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
inGeom = inFeat.geometry()
if inGeom.isMultipart():
multi = True

View File

@ -24,13 +24,10 @@ class SimplifyGeometries(GeoAlgorithm):
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):
@ -60,12 +57,8 @@ class SimplifyGeometries(GeoAlgorithm):
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 )
@ -74,7 +67,7 @@ class SimplifyGeometries(GeoAlgorithm):
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()

View File

@ -21,17 +21,13 @@ class SinglePartsToMultiparts(GeoAlgorithm):
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()
@ -60,7 +56,6 @@ class SinglePartsToMultiparts(GeoAlgorithm):
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)

View File

@ -23,9 +23,6 @@ class SumLines(GeoAlgorithm):
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))
@ -54,12 +51,7 @@ class SumLines(GeoAlgorithm):
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())

View File

@ -21,9 +21,6 @@ class Union(GeoAlgorithm):
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
@ -47,7 +44,7 @@ class Union(GeoAlgorithm):
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()

View File

@ -25,13 +25,17 @@ class VariableDistanceBuffer(GeoAlgorithm):
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"

View File

@ -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()

View File

@ -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):
@ -19,7 +20,7 @@ class OutputVector(Output):
'''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
@ -28,6 +29,8 @@ class OutputVector(Output):
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")
@ -38,6 +41,10 @@ class OutputVector(Output):
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():
@ -45,11 +52,14 @@ class OutputVector(Output):
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:]