42 changes: 27 additions & 15 deletions python/plugins/sextante/algs/AddTableField.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,29 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.outputs.OutputVector import OutputVector
from sextante.parameters.ParameterVector import ParameterVector
from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from sextante.parameters.ParameterString import ParameterString
from sextante.parameters.ParameterSelection import ParameterSelection

from qgis.core import *

from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.core.QGisLayers import QGisLayers

from sextante.parameters.ParameterVector import ParameterVector
from sextante.parameters.ParameterString import ParameterString
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.outputs.OutputVector import OutputVector

class AddTableField(GeoAlgorithm):

OUTPUT_LAYER = "OUTPUT_LAYER"
INPUT_LAYER = "INPUT_LAYER"
FIELD_NAME = "FIELD_NAME"
FIELD_TYPE = "FIELD_TYPE"
FIELD_LENGTH = "FIELD_LENGTH"
FIELD_PRECISION = "FIELD_PRECISION"

TYPE_NAMES = ["Integer", "Float", "String"]
TYPES = [QVariant.Int, QVariant.Double, QVariant.String]

Expand All @@ -51,24 +57,31 @@ class AddTableField(GeoAlgorithm):
def defineCharacteristics(self):
self.name = "Add field to attributes table"
self.group = "Vector table tools"

self.addParameter(ParameterVector(self.INPUT_LAYER, "Input layer", ParameterVector.VECTOR_TYPE_ANY, False))
self.addParameter(ParameterString(self.FIELD_NAME, "Field name"))
self.addParameter(ParameterSelection(self.FIELD_TYPE, "Field type", self.TYPE_NAMES))
self.addParameter(ParameterNumber(self.FIELD_LENGTH, "Field lenght", 1, 255, 10))
self.addParameter(ParameterNumber(self.FIELD_PRECISION, "Field precision", 0, 10, 0))
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer"))

def processAlgorithm(self, progress):
fieldtype = self.getParameterValue(self.FIELD_TYPE)
fieldname = self.getParameterValue(self.FIELD_NAME)
fieldType = self.getParameterValue(self.FIELD_TYPE)
fieldName = self.getParameterValue(self.FIELD_NAME)
fieldLength = self.getParameterValue(self.FIELD_LENGTH)
fieldPrecision = self.getParameterValue(self.FIELD_PRECISION)
output = self.getOutputFromName(self.OUTPUT_LAYER)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
vprovider = vlayer.dataProvider()
fields = vprovider.fields()
fields.append(QgsField(fieldname, self.TYPES[fieldtype]))
writer = output.getVectorWriter(fields, vprovider.geometryType(), vlayer.crs() )

layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))

provider = layer.dataProvider()
fields = provider.fields()
fields.append(QgsField(fieldName, self.TYPES[fieldType], "", fieldLength, fieldPrecision))
writer = output.getVectorWriter(fields, provider.geometryType(), layer.crs())
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0
features = QGisLayers.features(vlayer)
features = QGisLayers.features(layer)
nFeat = len(features)
for inFeat in features:
progress.setPercentage(int((100 * nElement)/nFeat))
Expand All @@ -80,4 +93,3 @@ def processAlgorithm(self, progress):
outFeat.setAttributes(atMap)
writer.addFeature( outFeat )
del writer

20 changes: 16 additions & 4 deletions python/plugins/sextante/gdal/GdalUtils.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,20 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import os
import subprocess

from PyQt4.QtCore import *

from sextante.core.SextanteLog import SextanteLog
import os

try:
from osgeo import gdal
gdalAvailable = True
except:
gdalAvailable = False

class GdalUtils():
class GdalUtils:

supportedRasters = None

Expand Down Expand Up @@ -108,3 +109,14 @@ def getFormatShortNameFromFilename(filename):
if ext in exts:
return name
return "GTiff"

@staticmethod
def escapeAndJoin(strList):
joined = QString()
for s in strList:
if " " in s:
escaped = '"' + s.replace('\\', '\\\\').replace('"', '\\"') + '"'
else:
escaped = s
joined += escaped + " "
return joined.trimmed()
17 changes: 10 additions & 7 deletions python/plugins/sextante/gdal/gdaladdo.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,14 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os

from PyQt4 import QtGui

from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.outputs.OutputRaster import OutputRaster
import os

from sextante.gdal.GdalUtils import GdalUtils

class gdaladdo(GeoAlgorithm):
Expand All @@ -50,10 +53,10 @@ def defineCharacteristics(self):
self.addOutput(OutputRaster(gdaladdo.OUTPUT, "Output layer", True))

def processAlgorithm(self, progress):
commands = ["gdaladdo"]
input = self.getParameterValue(gdaladdo.INPUT)
self.setOutputValue(gdaladdo.OUTPUT, input)
commands.append(input)
commands.append(self.getParameterValue(gdaladdo.LEVELS))
arguments = []
inFile = self.getParameterValue(gdaladdo.INPUT)
arguments.append(inFile)
arguments.extend(self.getParameterValue(gdaladdo.LEVELS).split(" "))
self.setOutputValue(gdaladdo.OUTPUT, inFile)

GdalUtils.runGdal(commands, progress)
GdalUtils.runGdal(["gdaladdo", GdalUtils.escapeAndJoin(arguments)], progress)
19 changes: 12 additions & 7 deletions python/plugins/sextante/gdal/information.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,19 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os

from PyQt4 import QtGui

from sextante.core.GeoAlgorithm import GeoAlgorithm

from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.parameters.ParameterBoolean import ParameterBoolean
import os
from sextante.gdal.GdalUtils import GdalUtils

from sextante.outputs.OutputHTML import OutputHTML

from sextante.gdal.GdalUtils import GdalUtils

class information(GeoAlgorithm):

INPUT = "INPUT"
Expand All @@ -51,13 +56,13 @@ def defineCharacteristics(self):
self.addOutput(OutputHTML(information.OUTPUT, "Layer information"))

def processAlgorithm(self, progress):
commands = ["gdalinfo"]
arguments = []
if self.getParameterValue(information.NOGCP):
commands.append("-nogcp")
arguments.append("-nogcp")
if self.getParameterValue(information.NOMETADATA):
commands.append("-nomd")
commands.append(self.getParameterValue(information.INPUT))
GdalUtils.runGdal(commands, progress)
arguments.append("-nomd")
arguments.append(self.getParameterValue(information.INPUT))
GdalUtils.runGdal(["gdalinfo", GdalUtils.escapeAndJoin(arguments)], progress)
output = self.getOutputValue(information.OUTPUT)
f = open(output, "w")
for s in GdalUtils.getConsoleOutput()[1:]:
Expand Down
34 changes: 20 additions & 14 deletions python/plugins/sextante/gdal/merge.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,19 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os

from PyQt4 import QtGui

from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.outputs.OutputRaster import OutputRaster
import os
from sextante.gdal.GdalUtils import GdalUtils
from sextante.core.SextanteUtils import SextanteUtils

from sextante.outputs.OutputRaster import OutputRaster
from sextante.parameters.ParameterBoolean import ParameterBoolean
from sextante.parameters.ParameterMultipleInput import ParameterMultipleInput

from sextante.gdal.GdalUtils import GdalUtils

class merge(GeoAlgorithm):

INPUT = "INPUT"
Expand All @@ -52,20 +56,22 @@ def defineCharacteristics(self):
self.addOutput(OutputRaster(merge.OUTPUT, "Output layer"))

def processAlgorithm(self, progress):
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "gdal_merge.bat"]
else:
commands = ["gdal_merge.py"]
arguments = []
if self.getParameterValue(merge.SEPARATE):
commands.append("-separate")
arguments.append("-separate")
if self.getParameterValue(merge.PCT):
commands.append("-pct")
commands.append("-o")
arguments.append("-pct")
arguments.append("-o")
out = self.getOutputValue(merge.OUTPUT)
commands.append(out)
commands.append("-of")
commands.append(GdalUtils.getFormatShortNameFromFilename(out))
commands.append(self.getParameterValue(merge.INPUT).replace(";", " "))
arguments.append(out)
arguments.append("-of")
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append(self.getParameterValue(merge.INPUT).replace(";", " "))

commands = []
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "gdal_merge.bat", GdalUtils.escapeAndJoin(arguments)]
else:
commands = ["gdal_merge.py", GdalUtils.escapeAndJoin(arguments)]

GdalUtils.runGdal(commands, progress)
20 changes: 11 additions & 9 deletions python/plugins/sextante/gdal/nearblack.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,15 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os
from PyQt4 import QtGui

from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.parameters.ParameterBoolean import ParameterBoolean
from sextante.outputs.OutputRaster import OutputRaster
import os

from sextante.gdal.GdalUtils import GdalUtils

class nearblack(GeoAlgorithm):
Expand All @@ -52,12 +54,12 @@ def defineCharacteristics(self):
self.addOutput(OutputRaster(nearblack.OUTPUT, "Output layer"))

def processAlgorithm(self, progress):
commands = ["nearblack"]
commands.append("-o")
commands.append(self.getOutputValue(nearblack.OUTPUT))
commands.append("-near")
commands.append(str(self.getParameterValue(nearblack.NEAR)))
arguments = []
arguments.append("-o")
arguments.append(self.getOutputValue(nearblack.OUTPUT))
arguments.append("-near")
arguments.append(str(self.getParameterValue(nearblack.NEAR)))
if self.getParameterValue(nearblack.WHITE):
commands.append("-white")
commands.append(self.getParameterValue(nearblack.INPUT))
GdalUtils.runGdal(commands, progress)
arguments.append("-white")
arguments.append(self.getParameterValue(nearblack.INPUT))
GdalUtils.runGdal(["nearblack", GdalUtils.escapeAndJoin(arguments)], progress)
28 changes: 17 additions & 11 deletions python/plugins/sextante/gdal/ogr2ogr.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,28 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os
import re
import string
from string import Template
import tempfile

from PyQt4.QtCore import *
from PyQt4.QtGui import *

from qgis.core import *

from sextante.outputs.OutputVector import OutputVector
from sextante.parameters.ParameterVector import ParameterVector
from sextante.parameters.ParameterString import ParameterString
from sextante.core.SextanteLog import SextanteLog
from sextante.core.QGisLayers import QGisLayers

from sextante.parameters.ParameterVector import ParameterVector
from sextante.parameters.ParameterString import ParameterString
from sextante.outputs.OutputVector import OutputVector

from sextante.gdal.OgrAlgorithm import OgrAlgorithm
from sextante.gdal.pyogr.ogr2ogr import *
from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import string
from string import Template
import re
import os
import tempfile

from sextante.gdal.GdalUtils import GdalUtils

try:
from osgeo import gdal, ogr, osr
Expand Down
30 changes: 18 additions & 12 deletions python/plugins/sextante/gdal/pct2rgb.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,17 @@
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os
from PyQt4 import QtGui

from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.core.SextanteUtils import SextanteUtils

from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.outputs.OutputRaster import OutputRaster
import os

from sextante.gdal.GdalUtils import GdalUtils
from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.core.SextanteUtils import SextanteUtils

class pct2rgb(GeoAlgorithm):

Expand All @@ -53,16 +56,19 @@ def defineCharacteristics(self):
self.addOutput(OutputRaster(pct2rgb.OUTPUT, "Output layer"))

def processAlgorithm(self, progress):
arguments = []
arguments.append("-b")
arguments.append(str(self.getParameterValue(pct2rgb.NBAND) + 1))
arguments.append("-of")
out = self.getOutputValue(pct2rgb.OUTPUT)
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append(self.getParameterValue(pct2rgb.INPUT))
arguments.append(out)

commands = []
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "pct2rgb.bat"]
commands = ["cmd.exe", "/C ", "pct2rgb.bat", GdalUtils.escapeAndJoin(arguments)]
else:
commands = ["pct2rgb.py"]
commands.append("-b")
commands.append(str(self.getParameterValue(pct2rgb.NBAND) + 1))
commands.append("-of")
out = self.getOutputValue(pct2rgb.OUTPUT)
commands.append(GdalUtils.getFormatShortNameFromFilename(out))
commands.append(self.getParameterValue(pct2rgb.INPUT))
commands.append(out)
commands = ["pct2rgb.py", GdalUtils.escapeAndJoin(arguments)]

GdalUtils.runGdal(commands, progress)
Loading