[sextante] escape filenames, passed to GDAL tools (fix #5923)

This commit is contained in:
Alexander Bruy 2013-04-10 12:15:55 +04:00
parent 5f9eca25b7
commit dc15292f91
13 changed files with 196 additions and 149 deletions

View File

@ -23,11 +23,12 @@ __copyright__ = '(C) 2012, Victor Olaya'
# 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 subprocess
from sextante.core.SextanteLog import SextanteLog
import os
import subprocess
from PyQt4.QtCore import *
from sextante.core.SextanteLog import SextanteLog
try:
from osgeo import gdal
@ -35,7 +36,7 @@ try:
except:
gdalAvailable = False
class GdalUtils():
class GdalUtils:
supportedRasters = None
@ -108,3 +109,14 @@ class GdalUtils():
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()

View File

@ -24,11 +24,14 @@ __copyright__ = '(C) 2012, Victor Olaya'
# 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):
@ -50,10 +53,10 @@ class gdaladdo(GeoAlgorithm):
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.append(self.getParameterValue(gdaladdo.LEVELS))
self.setOutputValue(gdaladdo.OUTPUT, inFile)
GdalUtils.runGdal(commands, progress)
GdalUtils.runGdal(["gdaladdo", GdalUtils.escapeAndJoin(arguments)], progress)

View File

@ -23,14 +23,19 @@ __copyright__ = '(C) 2012, Victor Olaya'
# 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"
@ -51,13 +56,13 @@ class information(GeoAlgorithm):
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:]:

View File

@ -23,15 +23,19 @@ __copyright__ = '(C) 2012, Victor Olaya'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
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 PyQt4 import QtGui
from sextante.core.GeoAlgorithm import GeoAlgorithm
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"
@ -52,20 +56,22 @@ class merge(GeoAlgorithm):
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)

View File

@ -23,13 +23,15 @@ __copyright__ = '(C) 2012, Victor Olaya'
# 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):
@ -52,12 +54,12 @@ class nearblack(GeoAlgorithm):
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)

View File

@ -23,23 +23,29 @@ __copyright__ = '(C) 2012, Victor Olaya'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
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.gdal.OgrAlgorithm import OgrAlgorithm
from sextante.gdal.pyogr.ogr2ogr import *
from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import os
import re
import string
from string import Template
import re
import os
import tempfile
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
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 sextante.gdal.GdalUtils import GdalUtils
try:
from osgeo import gdal, ogr, osr
gdalAvailable = True

View File

@ -23,15 +23,18 @@ __copyright__ = '(C) 2012, Victor Olaya'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
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
from sextante.parameters.ParameterSelection import ParameterSelection
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
from sextante.gdal.GdalUtils import GdalUtils
class pct2rgb(GeoAlgorithm):
INPUT = "INPUT"
@ -53,16 +56,19 @@ class pct2rgb(GeoAlgorithm):
self.addOutput(OutputRaster(pct2rgb.OUTPUT, "Output layer"))
def processAlgorithm(self, progress):
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "pct2rgb.bat"]
else:
commands = ["pct2rgb.py"]
commands.append("-b")
commands.append(str(self.getParameterValue(pct2rgb.NBAND) + 1))
commands.append("-of")
arguments = []
arguments.append("-b")
arguments.append(str(self.getParameterValue(pct2rgb.NBAND) + 1))
arguments.append("-of")
out = self.getOutputValue(pct2rgb.OUTPUT)
commands.append(GdalUtils.getFormatShortNameFromFilename(out))
commands.append(self.getParameterValue(pct2rgb.INPUT))
commands.append(out)
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append(self.getParameterValue(pct2rgb.INPUT))
arguments.append(out)
commands = []
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "pct2rgb.bat", GdalUtils.escapeAndJoin(arguments)]
else:
commands = ["pct2rgb.py", GdalUtils.escapeAndJoin(arguments)]
GdalUtils.runGdal(commands, progress)

View File

@ -23,14 +23,17 @@ __copyright__ = '(C) 2012, Victor Olaya'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
from PyQt4 import QtGui, QtCore
from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.parameters.ParameterRaster import ParameterRaster
import os
from sextante.gdal.GdalUtils import GdalUtils
from PyQt4 import QtGui, QtCore
from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.core.SextanteUtils import SextanteUtils
from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.parameters.ParameterString import ParameterString
from sextante.outputs.OutputVector import OutputVector
from sextante.core.SextanteUtils import SextanteUtils
from sextante.gdal.GdalUtils import GdalUtils
class polygonize(GeoAlgorithm):
@ -50,16 +53,19 @@ class polygonize(GeoAlgorithm):
self.addOutput(OutputVector(polygonize.OUTPUT, "Output layer"))
def processAlgorithm(self, progress):
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "gdal_polygonize.bat"]
else:
commands = ["gdal_polygonize.py"]
commands.append(self.getParameterValue(polygonize.INPUT))
commands.append('-f')
commands.append('"ESRI Shapefile"')
arguments = []
arguments.append(self.getParameterValue(polygonize.INPUT))
arguments.append('-f')
arguments.append('"ESRI Shapefile"')
output = self.getOutputValue(polygonize.OUTPUT)
commands.append(output)
commands.append(QtCore.QFileInfo(output).baseName())
commands.append(self.getParameterValue(polygonize.FIELD))
arguments.append(output)
arguments.append(QtCore.QFileInfo(output).baseName())
arguments.append(self.getParameterValue(polygonize.FIELD))
commands = []
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "gdal_polygonize.bat", GdalUtils.escapeAndJoin(arguments)]
else:
commands = ["gdal_polygonize.py", GdalUtils.escapeAndJoin(arguments)]
GdalUtils.runGdal(commands, progress)

View File

@ -23,15 +23,18 @@ __copyright__ = '(C) 2012, Victor Olaya'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
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
from sextante.parameters.ParameterNumber import ParameterNumber
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.ParameterNumber import ParameterNumber
from sextante.outputs.OutputRaster import OutputRaster
from sextante.gdal.GdalUtils import GdalUtils
class rgb2pct(GeoAlgorithm):
INPUT = "INPUT"
@ -50,16 +53,18 @@ class rgb2pct(GeoAlgorithm):
self.addOutput(OutputRaster(rgb2pct.OUTPUT, "Output layer"))
def processAlgorithm(self, progress):
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "rgb2pct.bat"]
else:
commands = ["rgb2pct.py"]
commands.append("-n")
commands.append(str(self.getParameterValue(rgb2pct.NCOLORS)))
commands.append("-of")
arguments = []
arguments.append("-n")
arguments.append(str(self.getParameterValue(rgb2pct.NCOLORS)))
arguments.append("-of")
out = self.getOutputValue(rgb2pct.OUTPUT)
commands.append(GdalUtils.getFormatShortNameFromFilename(out))
commands.append(self.getParameterValue(rgb2pct.INPUT))
commands.append(out)
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append(self.getParameterValue(rgb2pct.INPUT))
arguments.append(out)
if SextanteUtils.isWindows():
commands = ["cmd.exe", "/C ", "rgb2pct.bat", GdalUtils.escapeAndJoin(arguments)]
else:
commands = ["rgb2pct.py", GdalUtils.escapeAndJoin(arguments)]
GdalUtils.runGdal(commands, progress)

View File

@ -96,8 +96,3 @@ srcband = None
dstband = None
src_ds = None
dst_ds = None

View File

@ -65,9 +65,3 @@ result = gdal.SieveFilter( srcband, maskband, dstband,
src_ds = None
dst_ds = None
mask_ds = None

View File

@ -24,8 +24,12 @@ __copyright__ = '(C) 2012, Victor Olaya'
# 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
@ -33,7 +37,7 @@ from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.parameters.ParameterExtent import ParameterExtent
from sextante.parameters.ParameterCrs import ParameterCrs
from sextante.outputs.OutputRaster import OutputRaster
import os
from sextante.gdal.GdalUtils import GdalUtils
class translate(GeoAlgorithm):
@ -79,26 +83,25 @@ class translate(GeoAlgorithm):
sds = self.getParameterValue(translate.SDS)
extra = str(self.getParameterValue(translate.EXTRA))
commands = ["gdal_translate"]
commands.append("-of")
commands.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments = []
arguments.append("-of")
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
if outsizePerc == "True":
outsizeStr = "-outsize "+outsize+"% "+outsize+"%"
outsizeStr = "-outsize " + outsize + "% " + outsize + "%"
else:
outsizeStr = "-outsize "+outsize+" "+outsize
commands.append(outsizeStr)
commands.append("-a_nodata "+noData)
outsizeStr = "-outsize " + outsize + " " + outsize
arguments.append(outsizeStr)
arguments.append("-a_nodata " + noData)
if expand != "none":
commands.append("-expand "+expand)
arguments.append("-expand " + expand)
regionCoords = projwin.split(",")
commands.append("-projwin "+regionCoords[0]+" "+regionCoords[3]+" "+regionCoords[1]+" "+regionCoords[2])
arguments.append("-projwin " + regionCoords[0] + " " + regionCoords[3] + " " + regionCoords[1] + " " + regionCoords[2])
if srs is not None:
commands.append("-a_srs "+str(srs))
arguments.append("-a_srs " + str(srs))
if sds:
commands.append("-sds")
commands.append(extra)
commands.append(self.getParameterValue(translate.INPUT))
commands.append(out)
arguments.append("-sds")
arguments.append(extra)
arguments.append(self.getParameterValue(translate.INPUT))
arguments.append(out)
GdalUtils.runGdal(commands, progress)
GdalUtils.runGdal(["gdal_translate", GdalUtils.escapeAndJoin(arguments)], progress)

View File

@ -24,16 +24,20 @@ __copyright__ = '(C) 2012, Victor Olaya'
__revision__ = '$Format:%H$'
import os
from qgis.core import *
from PyQt4 import QtGui
from qgis.core import *
from sextante.core.GeoAlgorithm import GeoAlgorithm
from sextante.parameters.ParameterRaster import ParameterRaster
from sextante.outputs.OutputRaster import OutputRaster
from sextante.parameters.ParameterSelection import ParameterSelection
from sextante.parameters.ParameterCrs import ParameterCrs
from sextante.gdal.GdalUtils import GdalUtils
from sextante.parameters.ParameterNumber import ParameterNumber
from sextante.parameters.ParameterString import ParameterString
from sextante.outputs.OutputRaster import OutputRaster
from sextante.gdal.GdalUtils import GdalUtils
class warp(GeoAlgorithm):
@ -64,21 +68,21 @@ class warp(GeoAlgorithm):
def processAlgorithm(self, progress):
srs = self.getParameterValue(warp.DEST_SRS)
self.crs = QgsCoordinateReferenceSystem(srs)
commands = ["gdalwarp"]
commands.append("-s_srs")
commands.append(str(self.getParameterValue(warp.SOURCE_SRS)))
commands.append("-t_srs")
commands.append(str(srs))
commands.append("-r")
commands.append(warp.METHOD_OPTIONS[self.getParameterValue(warp.METHOD)])
commands.append("-of")
arguments = []
arguments.append("-s_srs")
arguments.append(str(self.getParameterValue(warp.SOURCE_SRS)))
arguments.append("-t_srs")
arguments.append(str(srs))
arguments.append("-r")
arguments.append(warp.METHOD_OPTIONS[self.getParameterValue(warp.METHOD)])
arguments.append("-of")
out = self.getOutputValue(warp.OUTPUT)
commands.append(GdalUtils.getFormatShortNameFromFilename(out))
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
if self.getParameterValue(warp.TR) != 0:
trStr = "-tr "+str(self.getParameterValue(warp.TR))+" "+str(self.getParameterValue(warp.TR))
commands.append(trStr)
commands.append(str(self.getParameterValue(warp.EXTRA)))
commands.append(self.getParameterValue(warp.INPUT))
commands.append(out)
trStr = "-tr " + str(self.getParameterValue(warp.TR)) + " " + str(self.getParameterValue(warp.TR))
arguments.append(trStr)
arguments.append(str(self.getParameterValue(warp.EXTRA)))
arguments.append(self.getParameterValue(warp.INPUT))
arguments.append(out)
GdalUtils.runGdal(commands, progress)
GdalUtils.runGdal(["gdalwarp", GdalUtils.escapeAndJoin(arguments)], progress)