[processing] add Clip raster by extent algorithm (fix #8602)

This commit is contained in:
Alexander Bruy 2013-09-12 21:28:27 +03:00
parent dfe32bad39
commit 9ce316dbd3
2 changed files with 100 additions and 7 deletions

View File

@ -0,0 +1,86 @@
# -*- coding: utf-8 -*-
"""
***************************************************************************
ClipByExtent.py
---------------------
Date : September 2013
Copyright : (C) 2012 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.ParameterExtent import ParameterExtent
from processing.parameters.ParameterString import ParameterString
from processing.outputs.OutputRaster import OutputRaster
from processing.gdal.GdalUtils import GdalUtils
class ClipByExtent(GeoAlgorithm):
INPUT = "INPUT"
OUTPUT = "OUTPUT"
NO_DATA = "NO_DATA"
PROJWIN = "PROJWIN"
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 extent"
self.group = "[GDAL] Extraction"
self.addParameter(ParameterRaster(self.INPUT, "Input layer", False))
self.addParameter(ParameterString(self.NO_DATA, "Nodata value, leave as none to take the nodata value from input", "none"))
self.addParameter(ParameterExtent(self.PROJWIN, "Clipping extent"))
self.addParameter(ParameterString(self.EXTRA, "Additional creation parameters", ""))
self.addOutput(OutputRaster(self.OUTPUT, "Output layer"))
def processAlgorithm(self, progress):
out = self.getOutputValue(self.OUTPUT)
noData = str(self.getParameterValue(self.NO_DATA))
projwin = str(self.getParameterValue(self.PROJWIN))
extra = str(self.getParameterValue(self.EXTRA))
arguments = []
arguments.append("-of")
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append("-a_nodata")
arguments.append(noData)
regionCoords = projwin.split(",")
arguments.append("-projwin")
arguments.append(regionCoords[0])
arguments.append(regionCoords[3])
arguments.append(regionCoords[1])
arguments.append(regionCoords[2])
if len(extra) > 0:
arguments.append(extra)
arguments.append(self.getParameterValue(self.INPUT))
arguments.append(out)
GdalUtils.runGdal(["gdal_translate", GdalUtils.escapeAndJoin(arguments)], progress)

View File

@ -16,10 +16,6 @@
* *
***************************************************************************
"""
from processing.gdal.gdaladdo import gdaladdo
from processing.gdal.ogr2ogr import Ogr2Ogr
from processing.gdal.ogrinfo import OgrInfo
from processing.gdal.ogrsql import OgrSql
__author__ = 'Victor Olaya'
__date__ = 'August 2012'
@ -30,19 +26,29 @@ __revision__ = '$Format:%H$'
import os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from processing.core.AlgorithmProvider import AlgorithmProvider
from processing.script.WrongScriptException import WrongScriptException
from processing.core.ProcessingLog import ProcessingLog
from processing.script.WrongScriptException import WrongScriptException
from processing.gdal.GdalAlgorithm import GdalAlgorithm
from processing.gdal.GdalUtils import GdalUtils
from processing.gdal.nearblack import nearblack
from processing.gdal.information import information
from processing.gdal.GdalUtils import GdalUtils
from processing.gdal.warp import warp
from processing.gdal.rgb2pct import rgb2pct
from processing.gdal.translate import translate
from processing.gdal.pct2rgb import pct2rgb
from processing.gdal.merge import merge
from processing.gdal.polygonize import polygonize
from processing.gdal.gdaladdo import gdaladdo
from processing.gdal.ClipByExtent import ClipByExtent
from processing.gdal.ogr2ogr import Ogr2Ogr
from processing.gdal.ogrinfo import OgrInfo
from processing.gdal.ogrsql import OgrSql
class GdalOgrAlgorithmProvider(AlgorithmProvider):
@ -85,7 +91,8 @@ class GdalOgrAlgorithmProvider(AlgorithmProvider):
#GeoAlgorithm directly (those that execute GDAL using the console)
self.preloadedAlgs = [nearblack(), information(), warp(), translate(),
rgb2pct(), pct2rgb(), merge(), polygonize(), gdaladdo(),
rgb2pct(), pct2rgb(), merge(), polygonize(),
gdaladdo(), ClipByExtent(),
OgrInfo(), Ogr2Ogr(), OgrSql()]
#And then we add those that are created as python scripts