mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-10-31 00:06:02 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			172 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| """
 | |
| ***************************************************************************
 | |
|     translate.py
 | |
|     ---------------------
 | |
|     Date                 : August 2012
 | |
|     Copyright            : (C) 2012 by Victor Olaya
 | |
|     Email                : volayaf 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.                                   *
 | |
| *                                                                         *
 | |
| ***************************************************************************
 | |
| """
 | |
| from builtins import str
 | |
| 
 | |
| __author__ = 'Victor Olaya'
 | |
| __date__ = 'August 2012'
 | |
| __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 qgis.PyQt.QtGui import QIcon
 | |
| 
 | |
| from qgis.core import (QgsProcessingParameterRasterLayer,
 | |
|                        QgsProcessingParameterNumber,
 | |
|                        QgsProcessingParameterBoolean,
 | |
|                        QgsProcessingParameterString,
 | |
|                        QgsProcessingParameterEnum,
 | |
|                        QgsProcessingParameterCrs,
 | |
|                        QgsProcessingParameterExtent,
 | |
|                        QgsProcessingParameterRasterDestination,
 | |
|                        QgsProcessingUtils)
 | |
| from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
 | |
| 
 | |
| from processing.algs.gdal.GdalUtils import GdalUtils
 | |
| 
 | |
| pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
 | |
| 
 | |
| 
 | |
| class translate(GdalAlgorithm):
 | |
| 
 | |
|     INPUT = 'INPUT'
 | |
|     OUTPUT = 'OUTPUT'
 | |
|     OUTSIZE = 'OUTSIZE'
 | |
|     OUTSIZE_PERC = 'OUTSIZE_PERC'
 | |
|     NO_DATA = 'NO_DATA'
 | |
|     EXPAND = 'EXPAND'
 | |
|     PROJWIN = 'PROJWIN'
 | |
|     SRS = 'SRS'
 | |
|     SDS = 'SDS'
 | |
|     RTYPE = 'RTYPE'
 | |
|     OPTIONS = 'OPTIONS'
 | |
|     TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64']
 | |
| 
 | |
|     def icon(self):
 | |
|         return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'translate.png'))
 | |
| 
 | |
|     def __init__(self):
 | |
|         super().__init__()
 | |
| 
 | |
|     def initAlgorithm(self, config=None):
 | |
|         self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer')))
 | |
|         self.addParameter(QgsProcessingParameterNumber(self.OUTSIZE,
 | |
|                                                        self.tr('Set the size of the output file (In pixels or %)'),
 | |
|                                                        minValue=1, defaultValue=100))
 | |
|         self.addParameter(QgsProcessingParameterBoolean(self.OUTSIZE_PERC,
 | |
|                                                         self.tr('Output size is a percentage of input size'), defaultValue=True))
 | |
|         self.addParameter(QgsProcessingParameterString(self.NO_DATA,
 | |
|                                                        self.tr("Nodata value, leave blank to take the nodata value from input"),
 | |
|                                                        defaultValue='', optional=True))
 | |
|         self.addParameter(QgsProcessingParameterEnum(self.EXPAND,
 | |
|                                                      self.tr('Expand'), options=['none', 'gray', 'rgb', 'rgba'], defaultValue=0))
 | |
|         self.addParameter(QgsProcessingParameterCrs(self.SRS,
 | |
|                                                     self.tr('Output projection for output file [leave blank to use input projection]'), defaultValue=None, optional=True))
 | |
|         self.addParameter(QgsProcessingParameterExtent(self.PROJWIN,
 | |
|                                                        self.tr('Subset based on georeferenced coordinates'), optional=True))
 | |
|         self.addParameter(QgsProcessingParameterBoolean(self.SDS,
 | |
|                                                         self.tr('Copy all subdatasets of this file to individual output files'),
 | |
|                                                         defaultValue=False))
 | |
| 
 | |
|         create_options_param = QgsProcessingParameterString(self.OPTIONS,
 | |
|                                                             self.tr('Additional creation options'),
 | |
|                                                             optional=True)
 | |
|         create_options_param.setMetadata({'widget_wrapper': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'})
 | |
|         self.addParameter(create_options_param)
 | |
|         self.addParameter(QgsProcessingParameterEnum(self.RTYPE,
 | |
|                                                      self.tr('Output raster type'),
 | |
|                                                      options=self.TYPE, defaultValue=5))
 | |
| 
 | |
|         self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Converted')))
 | |
| 
 | |
|     def name(self):
 | |
|         return 'translate'
 | |
| 
 | |
|     def displayName(self):
 | |
|         return self.tr('Translate (convert format)')
 | |
| 
 | |
|     def group(self):
 | |
|         return self.tr('Raster conversion')
 | |
| 
 | |
|     def getConsoleCommands(self, parameters, context, feedback):
 | |
|         inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context)
 | |
|         out = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
 | |
|         outsize = str(self.parameterAsInt(parameters, self.OUTSIZE, context))
 | |
|         outsizePerc = self.parameterAsBool(parameters, self.OUTSIZE_PERC, context)
 | |
|         noData = self.parameterAsString(parameters, self.NO_DATA, context)
 | |
|         expand = self.parameterDefinition(self.EXPAND).options()[self.parameterAsEnum(parameters, self.EXPAND, context)]
 | |
| 
 | |
|         proj_extent = self.parameterAsExtent(parameters, self.PROJWIN, context)
 | |
|         if proj_extent.isNull():
 | |
|             proj_extent = QgsProcessingUtils.combineLayerExtents([inLayer])
 | |
|         crsId = self.parameterAsCrs(parameters, self.SRS, context).authid()
 | |
|         sds = self.parameterAsBool(parameters, self.SDS, context)
 | |
|         opts = self.parameterAsString(parameters, self.OPTIONS, context)
 | |
| 
 | |
|         if noData is not None:
 | |
|             noData = str(noData)
 | |
| 
 | |
|         arguments = []
 | |
|         arguments.append('-of')
 | |
|         arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
 | |
|         arguments.append('-ot')
 | |
|         arguments.append(self.TYPE[self.parameterAsEnum(parameters, self.RTYPE, context)])
 | |
|         if outsizePerc:
 | |
|             arguments.append('-outsize')
 | |
|             arguments.append(outsize + '%')
 | |
|             arguments.append(outsize + '%')
 | |
|         else:
 | |
|             arguments.append('-outsize')
 | |
|             arguments.append(outsize)
 | |
|             arguments.append(outsize)
 | |
|         if noData and len(noData) > 0:
 | |
|             arguments.append('-a_nodata')
 | |
|             arguments.append(noData)
 | |
|         if expand != 'none':
 | |
|             arguments.append('-expand')
 | |
|             arguments.append(expand)
 | |
|         try:
 | |
|             projwin = []
 | |
|             projwin.append('-projwin')
 | |
|             projwin.append(proj_extent.xMinimum())
 | |
|             projwin.append(proj_extent.yMaximum())
 | |
|             projwin.append(proj_extent.xMaximum())
 | |
|             projwin.append(proj_extent.yMinimum())
 | |
|         except IndexError:
 | |
|             projwin = []
 | |
|         if projwin:
 | |
|             arguments.extend(projwin)
 | |
|         if crsId:
 | |
|             arguments.append('-a_srs')
 | |
|             arguments.append(str(crsId))
 | |
|         if sds:
 | |
|             arguments.append('-sds')
 | |
| 
 | |
|         if opts:
 | |
|             arguments.append('-co')
 | |
|             arguments.append(opts)
 | |
| 
 | |
|         arguments.append(inLayer.source())
 | |
|         arguments.append(out)
 | |
| 
 | |
|         return ['gdal_translate', GdalUtils.escapeAndJoin(arguments)]
 |