mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
190 lines
8.0 KiB
Python
190 lines
8.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
***************************************************************************
|
|
retile.py
|
|
---------------------
|
|
Date : January 2016
|
|
Copyright : (C) 2016 by Médéric Ribreux
|
|
Email : mederic dot ribreux at medspx dot fr
|
|
***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
***************************************************************************
|
|
"""
|
|
from builtins import str
|
|
|
|
__author__ = 'Médéric Ribreux'
|
|
__date__ = 'January 2016'
|
|
__copyright__ = '(C) 2016, Médéric Ribreux'
|
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
|
|
__revision__ = '$Format:%H$'
|
|
|
|
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
|
|
from processing.core.parameters import ParameterString
|
|
from processing.core.parameters import ParameterSelection
|
|
from processing.core.parameters import ParameterNumber
|
|
from processing.core.parameters import ParameterMultipleInput
|
|
from processing.core.parameters import ParameterCrs
|
|
from processing.core.parameters import ParameterBoolean
|
|
from processing.core.outputs import OutputDirectory
|
|
from processing.tools.system import isWindows
|
|
from processing.tools import dataobjects
|
|
from processing.algs.gdal.GdalUtils import GdalUtils
|
|
import re
|
|
|
|
|
|
class retile(GdalAlgorithm):
|
|
|
|
INPUT = 'INPUT'
|
|
RTYPE = 'RTYPE'
|
|
ONLYPYRAMIDS = 'ONLYPYRAMIDS'
|
|
PYRAMIDLEVELS = 'PYRAMIDLEVELS'
|
|
PIXELSIZE = 'PIXELSIZE'
|
|
ALGORITHM = 'ALGORITHM'
|
|
USEDIRFOREACHROW = 'USEDIRFOREACHROW'
|
|
S_SRS = 'S_SRS'
|
|
TARGETDIR = 'TARGETDIR'
|
|
CSVFILE = 'CSVFILE'
|
|
CSVDELIM = 'CSVDELIM'
|
|
TILEINDEX = 'TILEINDEX'
|
|
TILEINDEXFIELD = 'TILEINDEXFIELD'
|
|
FORMAT = 'FORMAT'
|
|
|
|
TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64']
|
|
ALGO = ['near', 'bilinear', 'cubic', 'cubicspline', 'lanczos']
|
|
|
|
def commandLineName(self):
|
|
return "gdal:retile"
|
|
|
|
def commandName(self):
|
|
return "gdal_retile"
|
|
|
|
def defineCharacteristics(self):
|
|
self.name, self.i18n_name = self.trAlgorithm('Retile')
|
|
self.group, self.i18n_group = self.trAlgorithm('Raster miscellaneous')
|
|
|
|
# Required parameters
|
|
self.addParameter(ParameterMultipleInput(self.INPUT,
|
|
self.tr('Input layers'),
|
|
dataobjects.TYPE_RASTER))
|
|
# Advanced parameters
|
|
params = []
|
|
params.append(ParameterString(self.PIXELSIZE,
|
|
self.tr('Pixel size to be used for the output file (XSIZE YSIZE like 512 512)'),
|
|
None, False, True))
|
|
params.append(ParameterSelection(self.ALGORITHM,
|
|
self.tr('Resampling algorithm'), self.ALGO, 0, False, optional=True))
|
|
params.append(ParameterCrs(self.S_SRS,
|
|
self.tr('Override source CRS'), None, True))
|
|
params.append(ParameterNumber(self.PYRAMIDLEVELS,
|
|
self.tr('Number of pyramids levels to build'),
|
|
None, None, None, True))
|
|
params.append(ParameterBoolean(self.ONLYPYRAMIDS,
|
|
self.tr('Build only the pyramids'),
|
|
False, True))
|
|
params.append(ParameterSelection(self.RTYPE,
|
|
self.tr('Output raster type'),
|
|
self.TYPE, 5, False, optional=True))
|
|
params.append(ParameterSelection(self.FORMAT,
|
|
self.tr('Output raster format'),
|
|
list(GdalUtils.getSupportedRasters().keys()), 0, False, optional=True))
|
|
params.append(ParameterBoolean(self.USEDIRFOREACHROW,
|
|
self.tr('Use a directory for each row'),
|
|
False, True))
|
|
params.append(ParameterString(self.CSVFILE,
|
|
self.tr('Name of the csv file containing the tile(s) georeferencing information'),
|
|
None, False, True))
|
|
params.append(ParameterString(self.CSVDELIM,
|
|
self.tr('Column delimiter used in the CSV file'),
|
|
None, False, True))
|
|
params.append(ParameterString(self.TILEINDEX,
|
|
self.tr('name of shape file containing the result tile(s) index'),
|
|
None, False, True))
|
|
params.append(ParameterString(self.TILEINDEXFIELD,
|
|
self.tr('name of the attribute containing the tile name in the result shape file'),
|
|
None, False, True))
|
|
|
|
for param in params:
|
|
param.isAdvanced = True
|
|
self.addParameter(param)
|
|
|
|
self.addOutput(OutputDirectory(self.TARGETDIR,
|
|
self.tr('The directory where the tile result is created')))
|
|
|
|
def getConsoleCommands(self):
|
|
|
|
arguments = []
|
|
|
|
if self.getParameterValue(self.RTYPE):
|
|
arguments.append('-ot')
|
|
arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)])
|
|
|
|
arguments.append('-of')
|
|
arguments.append(list(GdalUtils.getSupportedRasters().keys())[self.getParameterValue(self.FORMAT)])
|
|
|
|
if self.getParameterValue(self.PIXELSIZE):
|
|
pixelSize = self.getParameterValue(self.PIXELSIZE)
|
|
if re.match(r'\d+ \d+', pixelSize):
|
|
xsize, ysize = pixelSize.split(' ')
|
|
arguments.append('-ps')
|
|
arguments.append(xsize)
|
|
arguments.append(ysize)
|
|
|
|
if self.getParameterValue(self.ONLYPYRAMIDS):
|
|
arguments.append('-pyramidOnly')
|
|
|
|
if self.getParameterValue(self.USEDIRFOREACHROW):
|
|
arguments.append('-useDirForEachRow')
|
|
|
|
ssrs = str(self.getParameterValue(self.S_SRS))
|
|
if len(ssrs) > 0:
|
|
arguments.append('-s_srs')
|
|
arguments.append(ssrs)
|
|
|
|
if self.getParameterValue(self.PYRAMIDLEVELS):
|
|
arguments.append('-levels')
|
|
arguments.append(str(self.getParameterValue(self.PYRAMIDLEVELS)))
|
|
|
|
arguments.append('-r')
|
|
arguments.append(self.ALGO[self.getParameterValue(self.ALGORITHM)])
|
|
|
|
# Handle CSV
|
|
if self.getParameterValue(self.CSVFILE):
|
|
arguments.append('-csv')
|
|
arguments.append(self.getParameterValue(self.CSVFILE))
|
|
|
|
if self.getParameterValue(self.CSVFILE) and self.getParameterValue(self.CSVDELIM):
|
|
arguments.append('-csvDelim')
|
|
arguments.append(self.getParameterValue(self.CSVDELIM))
|
|
|
|
# Handle Shp
|
|
if self.getParameterValue(self.TILEINDEX):
|
|
arguments.append('-tileIndex')
|
|
arguments.append(self.getParameterValue(self.TILEINDEX))
|
|
|
|
if self.getParameterValue(self.TILEINDEX) and self.getParameterValue(self.TILEINDEXFIELD):
|
|
arguments.append('-tileIndexField')
|
|
arguments.append(self.getParameterValue(self.TILEINDEXFIELD))
|
|
|
|
arguments.append('-targetDir')
|
|
arguments.append(self.getOutputValue(self.TARGETDIR))
|
|
|
|
arguments.extend(self.getParameterValue(self.INPUT).split(';'))
|
|
|
|
commands = []
|
|
if isWindows():
|
|
commands = ['cmd.exe', '/C ', 'gdal_retile.bat',
|
|
GdalUtils.escapeAndJoin(arguments)]
|
|
else:
|
|
commands = ['gdal_retile.py',
|
|
GdalUtils.escapeAndJoin(arguments)]
|
|
|
|
return commands
|