2 changes: 1 addition & 1 deletion python/plugins/processing/gdal/ClipByExtent.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
ClipByExtent.py
---------------------
Date : September 2013
Copyright : (C) 2012 by Alexander Bruy
Copyright : (C) 2013 by Alexander Bruy
Email : alexander bruy at gmail dot com
***************************************************************************
* *
Expand Down
91 changes: 91 additions & 0 deletions python/plugins/processing/gdal/ClipByMask.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
ClipByMask.py
---------------------
Date : September 2013
Copyright : (C) 2013 by Alexander Bruy
Email : alexander bruy at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""

__author__ = 'Alexander Bruy'
__date__ = 'September 2013'
__copyright__ = '(C) 2013, Alexander Bruy'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os
from PyQt4 import QtGui
from qgis.core import *

from processing.core.GeoAlgorithm import GeoAlgorithm

from processing.parameters.ParameterRaster import ParameterRaster
from processing.parameters.ParameterVector import ParameterVector
from processing.parameters.ParameterBoolean import ParameterBoolean
from processing.parameters.ParameterString import ParameterString

from processing.outputs.OutputRaster import OutputRaster

from processing.gdal.GdalUtils import GdalUtils

class ClipByMask(GeoAlgorithm):

INPUT = "INPUT"
OUTPUT = "OUTPUT"
NO_DATA = "NO_DATA"
MASK = "MASK"
ALPHA_BAND = "ALPHA_BAND"
EXTRA = "EXTRA"

def getIcon(self):
filepath = os.path.dirname(__file__) + "/icons/raster-clip.png"
return QtGui.QIcon(filepath)

def defineCharacteristics(self):
self.name = "Clip raster by mask layer"
self.group = "[GDAL] Extraction"
self.addParameter(ParameterRaster(self.INPUT, "Input layer", False))
self.addParameter(ParameterVector(self.MASK, "Mask layer", [ParameterVector.VECTOR_TYPE_POLYGON]))
self.addParameter(ParameterString(self.NO_DATA, "Nodata value, leave as none to take the nodata value from input", "none"))
self.addParameter(ParameterBoolean(self.ALPHA_BAND, "Create and output alpha band", False))
self.addParameter(ParameterString(self.EXTRA, "Additional creation parameters", ""))
self.addOutput(OutputRaster(self.OUTPUT, "Output layer"))

def processAlgorithm(self, progress):
out = self.getOutputValue(self.OUTPUT)
mask = self.getParameterValue(self.MASK)
noData = str(self.getParameterValue(self.NO_DATA))
addAlphaBand = self.getParameterValue(self.ALPHA_BAND)
extra = str(self.getParameterValue(self.EXTRA))

arguments = []
arguments.append("-q")
arguments.append("-of")
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append("-dstnodata")
arguments.append(noData)

arguments.append("-cutline")
arguments.append(mask)
arguments.append("-crop_to_cutline")

if addAlphaBand:
arguments.append("-dstalpha")

if len(extra) > 0:
arguments.append(extra)

arguments.append(self.getParameterValue(self.INPUT))
arguments.append(out)

GdalUtils.runGdal(["gdalwarp", GdalUtils.escapeAndJoin(arguments)], progress)
6 changes: 5 additions & 1 deletion python/plugins/processing/gdal/GdalOgrAlgorithmProvider.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@
from processing.gdal.polygonize import polygonize
from processing.gdal.gdaladdo import gdaladdo
from processing.gdal.ClipByExtent import ClipByExtent
from processing.gdal.ClipByMask import ClipByMask
from processing.gdal.contour import contour
from processing.gdal.rasterize import rasterize

from processing.gdal.ogr2ogr import Ogr2Ogr
from processing.gdal.ogrinfo import OgrInfo
Expand Down Expand Up @@ -92,7 +95,8 @@ def createAlgsList(self):

self.preloadedAlgs = [nearblack(), information(), warp(), translate(),
rgb2pct(), pct2rgb(), merge(), polygonize(),
gdaladdo(), ClipByExtent(),
gdaladdo(), ClipByExtent(), ClipByMask(),
contour(), rasterize(),
OgrInfo(), Ogr2Ogr(), OgrSql()]

#And then we add those that are created as python scripts
Expand Down
80 changes: 80 additions & 0 deletions python/plugins/processing/gdal/contour.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
contour.py
---------------------
Date : September 2013
Copyright : (C) 2013 by Alexander Bruy
Email : alexander bruy at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""

__author__ = 'Alexander Bruy'
__date__ = 'September 2013'
__copyright__ = '(C) 2013, Alexander Bruy'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os
from PyQt4 import QtGui
from qgis.core import *

from processing.core.GeoAlgorithm import GeoAlgorithm

from processing.parameters.ParameterRaster import ParameterRaster
from processing.parameters.ParameterNumber import ParameterNumber
from processing.parameters.ParameterString import ParameterString

from processing.outputs.OutputVector import OutputVector

from processing.gdal.GdalUtils import GdalUtils

class contour(GeoAlgorithm):

INPUT_RASTER = "INPUT_RASTER"
OUTPUT_VECTOR = "OUTPUT_VECTOR"
INTERVAL = "INTERVAL"
FIELD_NAME = "FIELD_NAME"
EXTRA = "EXTRA"

def getIcon(self):
filepath = os.path.dirname(__file__) + "/icons/contour.png"
return QtGui.QIcon(filepath)

def defineCharacteristics(self):
self.name = "Contour"
self.group = "[GDAL] Extraction"
self.addParameter(ParameterRaster(self.INPUT_RASTER, "Input layer", False))
self.addParameter(ParameterNumber(self.INTERVAL, "Interval between contour lines", 0.0, 99999999.999999, 10.0))
self.addParameter(ParameterString(self.FIELD_NAME, "Attribute name (if not provided, no elecation attribute is attached)", "ELEV", optional=True))
self.addParameter(ParameterString(self.EXTRA, "Additional creation parameters", ""))

self.addOutput(OutputVector(self.OUTPUT_VECTOR, "Output file for contour lines (vector)"))

def processAlgorithm(self, progress):
interval = str(self.getParameterValue(self.INTERVAL))
fieldName = str(self.getParameterValue(self.FIELD_NAME))
extra = str(self.getParameterValue(self.EXTRA))

arguments = []
if len(fieldName) > 0:
arguments.append("-a")
arguments.append(fieldName)
arguments.append("-i")
arguments.append(interval)

if len(extra) > 0:
arguments.append(extra)

arguments.append(self.getParameterValue(self.INPUT_RASTER))
arguments.append(self.getOutputValue(self.OUTPUT_VECTOR))

GdalUtils.runGdal(["gdal_contour", GdalUtils.escapeAndJoin(arguments)], progress)
43 changes: 37 additions & 6 deletions python/plugins/processing/gdal/gdaladdo.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.parameters.ParameterRaster import ParameterRaster
from processing.parameters.ParameterBoolean import ParameterBoolean
from processing.parameters.ParameterSelection import ParameterSelection
from processing.outputs.OutputRaster import OutputRaster

from processing.gdal.GdalUtils import GdalUtils
Expand All @@ -38,8 +40,19 @@ class gdaladdo(GeoAlgorithm):

INPUT = "INPUT"
LEVELS = "LEVELS"
CLEAN = "CLEAN"
RESAMPLING_METHOD = "RESAMPLING_METHOD"
FORMAT = "FORMAT"
OUTPUT = "OUTPUT"

METHODS = ["nearest", "average", "gauss", "cubic", "average_mp",
"average_magphase", "mode"
]

FORMATS = ["Internal (if possible)",
"External (GTiff .ovr)",
"External (ERDAS Imagine .aux)"
]

def getIcon(self):
filepath = os.path.dirname(__file__) + "/icons/raster-overview.png"
Expand All @@ -48,15 +61,33 @@ def getIcon(self):
def defineCharacteristics(self):
self.name = "Build pyramids (overviews)"
self.group = "[GDAL] Miscellaneous"
self.addParameter(ParameterRaster(gdaladdo.INPUT, "Input layer", False))
self.addParameter(ParameterString(gdaladdo.LEVELS, "Overview levels", "2 4 8 16"))
self.addOutput(OutputRaster(gdaladdo.OUTPUT, "Output layer", True))
self.addParameter(ParameterRaster(self.INPUT, "Input layer", False))
self.addParameter(ParameterString(self.LEVELS, "Overview levels", "2 4 8 16"))
self.addParameter(ParameterBoolean(self.CLEAN, "Remove all existing overviews", False))
self.addParameter(ParameterSelection(self.RESAMPLING_METHOD, "Resampling method", self.METHODS, 0))
self.addParameter(ParameterSelection(self.FORMAT, "Overview format", self.FORMATS, 0))
self.addOutput(OutputRaster(self.OUTPUT, "Output layer", True))

def processAlgorithm(self, progress):
inFile = self.getParameterValue(self.INPUT)
clearOverviews = self.getParameterValue(self.CLEAN)
ovrFormat = self.getParameterValue(self.FORMAT)

arguments = []
inFile = self.getParameterValue(gdaladdo.INPUT)
arguments.append(inFile)
arguments.extend(self.getParameterValue(gdaladdo.LEVELS).split(" "))
self.setOutputValue(gdaladdo.OUTPUT, inFile)
if clearOverviews:
arguments.append("-clean")
arguments.append("-r")
arguments.append(self.METHODS[self.getParameterValue(self.RESAMPLING_METHOD)])

if ovrFormat == 1:
# external .ovr
arguments.append("-ro")
elif ovrFormat == 2:
# external .aux
arguments.extend("--config USE_RRD YES".split(" "))

arguments.extend(self.getParameterValue(self.LEVELS).split(" "))
self.setOutputValue(self.OUTPUT, inFile)

GdalUtils.runGdal(["gdaladdo", GdalUtils.escapeAndJoin(arguments)], progress)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
88 changes: 88 additions & 0 deletions python/plugins/processing/gdal/rasterize.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
rasterize.py
---------------------
Date : September 2013
Copyright : (C) 2013 by Alexander Bruy
Email : alexander dot bruy at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""

__author__ = 'Alexander Bruy'
__date__ = 'September 2013'
__copyright__ = '(C) 2013, Alexander Bruy'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'

import os
from PyQt4 import QtGui, QtCore

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.tools.system import *

from processing.parameters.ParameterVector import ParameterVector
from processing.parameters.ParameterTableField import ParameterTableField
from processing.parameters.ParameterSelection import ParameterSelection
from processing.parameters.ParameterNumber import ParameterNumber

from processing.outputs.OutputRaster import OutputRaster

from processing.gdal.GdalUtils import GdalUtils

class rasterize(GeoAlgorithm):

INPUT = "INPUT"
FIELD = "FIELD"
DIMENSIONS = "DIMENSIONS"
WIDTH = "WIDTH"
HEIGHT = "HEIGHT"
OUTPUT = "OUTPUT"



def getIcon(self):
filepath = os.path.dirname(__file__) + "/icons/rasterize.png"
return QtGui.QIcon(filepath)

def defineCharacteristics(self):
self.name = "Rasterize"
self.group = "[GDAL] Conversion"
self.addParameter(ParameterVector(self.INPUT, "Input layer"))
self.addParameter(ParameterTableField(self.FIELD, "Attribute field", self.INPUT))
self.addParameter(ParameterSelection(self.DIMENSIONS, "Set output raster size", ["Output size in pixels", "Output resolution in map units per pixel"], 0))
self.addParameter(ParameterNumber(self.WIDTH, "Horizontal", 0.0, 99999999.999999, 3000.0))
self.addParameter(ParameterNumber(self.HEIGHT, "Vertical", 0.0, 99999999.999999, 3000.0))

self.addOutput(OutputRaster(self.OUTPUT, "Output layer"))

def processAlgorithm(self, progress):
arguments = []
arguments.append("-a")
arguments.append(str(self.getParameterValue(self.FIELD)))

dimType = self.getParameterValue(self.DIMENSIONS)
if dimType == 0:
# size in pixels
arguments.append("-ts")
else:
# resolution in map units per pixel
arguments.append("-tr")
arguments.append(str(self.getParameterValue(self.WIDTH)))
arguments.append(str(self.getParameterValue(self.HEIGHT)))

arguments.append("-l")
arguments.append(os.path.basename(os.path.splitext(unicode(self.getParameterValue(self.INPUT)))[0]))
arguments.append(unicode(self.getParameterValue(self.INPUT)))

arguments.append(unicode(self.getOutputValue(self.OUTPUT)))

GdalUtils.runGdal(["gdal_rasterize", GdalUtils.escapeAndJoin(arguments)], progress)
Loading