2012-09-15 18:25:25 +03:00
|
|
|
from sextante.core.GeoAlgorithm import GeoAlgorithm
|
|
|
|
import os.path
|
|
|
|
from PyQt4 import QtGui
|
|
|
|
from PyQt4.QtCore import *
|
|
|
|
from PyQt4.QtGui import *
|
|
|
|
from qgis.core import *
|
|
|
|
from sextante.parameters.ParameterVector import ParameterVector
|
|
|
|
from sextante.core.QGisLayers import QGisLayers
|
|
|
|
from sextante.outputs.OutputVector import OutputVector
|
|
|
|
from sextante.parameters.ParameterBoolean import ParameterBoolean
|
|
|
|
from sextante.parameters.ParameterNumber import ParameterNumber
|
|
|
|
from sextante.ftools import Buffer as buff
|
|
|
|
from sextante.parameters.ParameterTableField import ParameterTableField
|
|
|
|
|
|
|
|
class VariableDistanceBuffer(GeoAlgorithm):
|
|
|
|
|
|
|
|
INPUT = "INPUT"
|
|
|
|
OUTPUT = "OUTPUT"
|
|
|
|
FIELD = "FIELD"
|
|
|
|
USE_SELECTED = "USE_SELECTED"
|
|
|
|
SEGMENTS = "SEGMENTS"
|
|
|
|
DISSOLVE = "DISSOLVE"
|
|
|
|
|
|
|
|
def getIcon(self):
|
|
|
|
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/buffer.png")
|
|
|
|
|
|
|
|
def processAlgorithm(self, progress):
|
|
|
|
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, writer, 0, field, useSelection, True, layer, dissolve, segments)
|
|
|
|
|
|
|
|
def defineCharacteristics(self):
|
|
|
|
self.name = "Variable distance buffer"
|
|
|
|
self.group = "Geoprocessing tools"
|
|
|
|
self.addParameter(ParameterVector(VariableDistanceBuffer.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY))
|
|
|
|
self.addParameter(ParameterBoolean(VariableDistanceBuffer.USE_SELECTED, "Use selected features", False))
|
|
|
|
self.addParameter(ParameterTableField(VariableDistanceBuffer.FIELD, "Distance field",VariableDistanceBuffer.INPUT ))
|
|
|
|
self.addParameter(ParameterNumber(VariableDistanceBuffer.SEGMENTS, "Segments", 1, default=10 ))
|
|
|
|
self.addParameter(ParameterBoolean(VariableDistanceBuffer.DISSOLVE, "Dissolve result", True))
|
|
|
|
self.addOutput(OutputVector(VariableDistanceBuffer.OUTPUT, "Buffer"))
|
|
|
|
|
|
|
|
#=========================================================
|