mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-16 00:05:45 -04:00
[processing] restore gdal2tiles algorithm
This commit is contained in:
parent
0f226645fa
commit
6a1b68edd6
@ -41,6 +41,7 @@ from .ClipByMask import ClipByMask
|
||||
from .ColorRelief import ColorRelief
|
||||
from .contour import contour
|
||||
from .fillnodata import fillnodata
|
||||
from .gdal2tiles import gdal2tiles
|
||||
from .gdaltindex import gdaltindex
|
||||
from .GridAverage import GridAverage
|
||||
from .GridDataMetrics import GridDataMetrics
|
||||
@ -71,7 +72,6 @@ from .warp import warp
|
||||
# from .gdalcalc import gdalcalc
|
||||
# from .rasterize_over import rasterize_over
|
||||
# from .retile import retile
|
||||
# from .gdal2tiles import gdal2tiles
|
||||
|
||||
from .ogr2ogrpointsonlines import Ogr2OgrPointsOnLines
|
||||
from .ogr2ogrtopostgis import Ogr2OgrToPostGis
|
||||
@ -144,6 +144,7 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
||||
ColorRelief(),
|
||||
contour(),
|
||||
fillnodata(),
|
||||
gdal2tiles(),
|
||||
gdaltindex(),
|
||||
GridAverage(),
|
||||
GridDataMetrics(),
|
||||
@ -173,7 +174,6 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
||||
# gdalcalc(),
|
||||
# rasterize_over(),
|
||||
# retile(),
|
||||
# gdal2tiles(),
|
||||
# ----- OGR tools -----
|
||||
Ogr2OgrPointsOnLines(),
|
||||
Ogr2OgrToPostGis(),
|
||||
|
@ -16,7 +16,6 @@
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
from builtins import str
|
||||
|
||||
__author__ = 'Médéric Ribreux'
|
||||
__date__ = 'January 2016'
|
||||
@ -26,17 +25,19 @@ __copyright__ = '(C) 2016, Médéric Ribreux'
|
||||
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from qgis.core import QgsProcessingParameterDefinition
|
||||
|
||||
from qgis.core import (QgsProcessingParameterDefinition,
|
||||
QgsProcessingParameterRasterLayer,
|
||||
QgsProcessingParameterCrs,
|
||||
QgsProcessingParameterEnum,
|
||||
QgsProcessingParameterString,
|
||||
QgsProcessingParameterNumber,
|
||||
QgsProcessingParameterBoolean,
|
||||
QgsProcessingOutputFolder,
|
||||
QgsProcessingParameterFolderDestination)
|
||||
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
|
||||
from processing.core.parameters import ParameterRaster
|
||||
from processing.core.parameters import ParameterString
|
||||
from processing.core.parameters import ParameterSelection
|
||||
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.algs.gdal.GdalUtils import GdalUtils
|
||||
from processing.tools.system import isWindows
|
||||
|
||||
|
||||
class gdal2tiles(GdalAlgorithm):
|
||||
@ -45,81 +46,103 @@ class gdal2tiles(GdalAlgorithm):
|
||||
PROFILE = 'PROFILE'
|
||||
RESAMPLING = 'RESAMPLING'
|
||||
ZOOM = 'ZOOM'
|
||||
S_SRS = 'S_SRS'
|
||||
OUTPUTDIR = 'OUTPUTDIR'
|
||||
RESUME = 'RESUME'
|
||||
SOURCE_CRS = 'SOURCE_CRS'
|
||||
NODATA = 'NODATA'
|
||||
FORCEKML = 'FORCEKML'
|
||||
NOKML = 'NOKML'
|
||||
KML = 'KML'
|
||||
NO_KML = 'NO_KML'
|
||||
URL = 'URL'
|
||||
WEBVIEWER = 'WEBVIEWER'
|
||||
VIEWER = 'VIEWER'
|
||||
TITLE = 'TITLE'
|
||||
COPYRIGHT = 'COPYRIGHT'
|
||||
GOOGLEKEY = 'GOOGLEKEY'
|
||||
BINGKEY = 'BINGKEY'
|
||||
|
||||
PROFILES = ['mercator', 'geodetic', 'raster']
|
||||
RESAMPLINGS = ['average', 'near', 'bilinear', 'cubic', 'cubicspline', 'lanczos', 'antialias']
|
||||
WEBVIEWERS = ['all', 'google', 'openlayers', 'leaflet', 'none']
|
||||
GOOGLE_KEY = 'GOOGLE_KEY'
|
||||
BING_KEY = 'BING_KEY'
|
||||
RESUME = 'RESUME'
|
||||
OUTPUT = 'OUTPUT'
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
# Required parameters
|
||||
self.addParameter(ParameterRaster(self.INPUT, self.tr('Input layer')))
|
||||
self.profiles = ((self.tr('Mercator'), 'mercator'),
|
||||
(self.tr('Geodetic'), 'geodetic'),
|
||||
(self.tr('Raster'), 'raster'))
|
||||
|
||||
self.methods = ((self.tr('Average'), 'average'),
|
||||
(self.tr('Nearest neighbour'), 'near'),
|
||||
(self.tr('Bilinear'), 'bilinear'),
|
||||
(self.tr('Cubic'), 'cubic'),
|
||||
(self.tr('Cubic spline'), 'cubicspline'),
|
||||
(self.tr('Lanczos windowed sinc'), 'lanczos'),
|
||||
(self.tr('Antialias'), 'antialias'))
|
||||
|
||||
self.viewers = ((self.tr('All'), 'all'),
|
||||
(self.tr('GoogleMaps'), 'google'),
|
||||
(self.tr('OpenLayers'), 'openlayers'),
|
||||
(self.tr('Leaflet'), 'leaflet'),
|
||||
(self.tr('None'), 'none'))
|
||||
|
||||
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer')))
|
||||
self.addParameter(QgsProcessingParameterEnum(self.PROFILE,
|
||||
self.tr('Tile cutting profile'),
|
||||
options=[i[0] for i in self.profiles],
|
||||
allowMultiple=False,
|
||||
defaultValue=0))
|
||||
self.addParameter(QgsProcessingParameterString(self.ZOOM,
|
||||
self.tr('Zoom levels to render'),
|
||||
defaultValue='',
|
||||
optional=True))
|
||||
self.addParameter(QgsProcessingParameterEnum(self.VIEWER,
|
||||
self.tr('Web viewer to generate'),
|
||||
options=[i[0] for i in self.viewers],
|
||||
allowMultiple=False,
|
||||
defaultValue=0))
|
||||
self.addParameter(QgsProcessingParameterString(self.TITLE,
|
||||
self.tr('Title of the map'),
|
||||
optional=True))
|
||||
self.addParameter(QgsProcessingParameterString(self.COPYRIGHT,
|
||||
self.tr('Copyright of the map'),
|
||||
optional=True))
|
||||
|
||||
# Advanced parameters
|
||||
params = []
|
||||
params.append(ParameterSelection(self.PROFILE,
|
||||
self.tr('Tile cutting profile'),
|
||||
self.PROFILES, 0, False, optional=True))
|
||||
params.append(ParameterSelection(self.RESAMPLING,
|
||||
self.tr('Resampling method'),
|
||||
self.RESAMPLINGS, 0, False, optional=True))
|
||||
params.append(ParameterCrs(self.S_SRS,
|
||||
self.tr('The spatial reference system used for the source input data'),
|
||||
None, True))
|
||||
params.append(ParameterString(self.ZOOM,
|
||||
self.tr('Zoom levels to render'),
|
||||
None, False, True))
|
||||
params.append(ParameterBoolean(self.RESUME,
|
||||
self.tr('Resume mode, generate only missing files'),
|
||||
False, True))
|
||||
params.append(ParameterString(self.NODATA,
|
||||
self.tr('NODATA transparency value to assign to the input data'),
|
||||
None, False, True))
|
||||
params.append(ParameterBoolean(self.FORCEKML,
|
||||
self.tr('Generate KML for Google Earth - default for "geodetic" profile and "raster" in EPSG:4326'),
|
||||
False, True))
|
||||
params.append(ParameterBoolean(self.NOKML,
|
||||
self.tr('Avoid automatic generation of KML files for EPSG:4326'),
|
||||
False, True))
|
||||
params.append(ParameterString(self.URL,
|
||||
self.tr('URL address where the generated tiles are going to be published'),
|
||||
None, False, True))
|
||||
params.append(ParameterSelection(self.WEBVIEWER,
|
||||
self.tr('Web viewer to generate'),
|
||||
self.WEBVIEWERS, 0, False, optional=True))
|
||||
params.append(ParameterString(self.TITLE,
|
||||
self.tr('Title of the map'),
|
||||
None, False, True))
|
||||
params.append(ParameterString(self.COPYRIGHT,
|
||||
self.tr('Copyright for the map'),
|
||||
None, False, True))
|
||||
params.append(ParameterString(self.GOOGLEKEY,
|
||||
self.tr('Google Maps API key from http://code.google.com/apis/maps/signup.html'),
|
||||
None, False, True))
|
||||
params.append(ParameterString(self.BINGKEY,
|
||||
self.tr('Bing Maps API key from https://www.bingmapsportal.com/'),
|
||||
None, False, True))
|
||||
|
||||
params.append(QgsProcessingParameterEnum(self.RESAMPLING,
|
||||
self.tr('Resampling method'),
|
||||
options=[i[0] for i in self.methods],
|
||||
allowMultiple=False,
|
||||
defaultValue=0))
|
||||
params.append(QgsProcessingParameterCrs(self.SOURCE_CRS,
|
||||
self.tr('The spatial reference system used for the source input data'),
|
||||
optional=True))
|
||||
params.append(QgsProcessingParameterNumber(self.NODATA,
|
||||
self.tr('Transparency value to assign to the input data'),
|
||||
type=QgsProcessingParameterNumber.Double,
|
||||
defaultValue=0,
|
||||
optional=True))
|
||||
params.append(QgsProcessingParameterString(self.URL,
|
||||
self.tr('URL address where the generated tiles are going to be published'),
|
||||
optional=True))
|
||||
params.append(QgsProcessingParameterString(self.GOOGLE_KEY,
|
||||
self.tr('Google Maps API key (http://code.google.com/apis/maps/signup.html)'),
|
||||
optional=True))
|
||||
params.append(QgsProcessingParameterString(self.BING_KEY,
|
||||
self.tr('Bing Maps API key (https://www.bingmapsportal.com/)'),
|
||||
optional=True))
|
||||
params.append(QgsProcessingParameterBoolean(self.RESUME,
|
||||
self.tr('Generate only missing files'),
|
||||
defaultValue=False))
|
||||
params.append(QgsProcessingParameterBoolean(self.KML,
|
||||
self.tr('Generate KML for Google Earth'),
|
||||
defaultValue=False))
|
||||
params.append(QgsProcessingParameterBoolean(self.NO_KML,
|
||||
self.tr('Avoid automatic generation of KML files for EPSG:4326'),
|
||||
defaultValue=False))
|
||||
for param in params:
|
||||
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
|
||||
self.addParameter(param)
|
||||
|
||||
self.addOutput(OutputDirectory(self.OUTPUTDIR,
|
||||
self.tr('The directory where the tile result is created')))
|
||||
self.addParameter(QgsProcessingParameterFolderDestination(self.OUTPUT,
|
||||
self.tr('Output directory')))
|
||||
|
||||
self.addOutput(QgsProcessingOutputFolder(self.OUTPUT, self.tr('Output directory')))
|
||||
|
||||
def name(self):
|
||||
return 'gdal2tiles'
|
||||
@ -131,58 +154,69 @@ class gdal2tiles(GdalAlgorithm):
|
||||
return self.tr('Raster miscellaneous')
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback):
|
||||
|
||||
arguments = []
|
||||
|
||||
if self.getParameterValue(self.PROFILE):
|
||||
arguments.append('-p')
|
||||
arguments.append(self.PROFILES[self.getParameterValue(self.PROFILE)])
|
||||
arguments.append('-p')
|
||||
arguments.append(self.profiles[self.parameterAsEnum(parameters, self.PROFILE, context)][1])
|
||||
|
||||
if self.getParameterValue(self.RESAMPLING):
|
||||
arguments.append('-r')
|
||||
arguments.append(self.RESAMPLINGS[self.getParameterValue(self.RESAMPLING)])
|
||||
|
||||
ssrs = str(self.getParameterValue(self.S_SRS))
|
||||
if len(ssrs) > 0:
|
||||
arguments.append('-s')
|
||||
arguments.append(ssrs)
|
||||
|
||||
if self.getParameterValue(self.ZOOM):
|
||||
zoom = self.parameterAsString(parameters, self.ZOOM, context)
|
||||
if zoom:
|
||||
arguments.append('-z')
|
||||
arguments.append(str(self.getParameterValue(self.ZOOM)))
|
||||
arguments.append(str(zoom))
|
||||
|
||||
if self.getParameterValue(self.RESUME):
|
||||
arguments.append('-w')
|
||||
arguments.append(self.viewers[self.parameterAsEnum(parameters, self.VIEWER, context)][1])
|
||||
|
||||
title = self.parameterAsString(parameters, self.TITLE, context)
|
||||
if title:
|
||||
arguments.append('-t')
|
||||
arguments.append(title)
|
||||
|
||||
copying = self.parameterAsString(parameters, self.COPYRIGHT, context)
|
||||
if copying:
|
||||
arguments.append('-c')
|
||||
arguments.append(copying)
|
||||
|
||||
arguments.append('-r')
|
||||
arguments.append(self.methods[self.parameterAsEnum(parameters, self.RESAMPLING, context)][1])
|
||||
|
||||
crs = self.parameterAsCrs(parameters, self.SOURCE_CRS, context)
|
||||
if crs.isValid():
|
||||
arguments.append('-s')
|
||||
arguments.append(crs.authid())
|
||||
|
||||
nodata = self.parameterAsDouble(parameters, self.NODATA, context)
|
||||
if nodata:
|
||||
arguments.append('-a')
|
||||
arguments.append(str(nodata))
|
||||
|
||||
url = self.parameterAsString(parameters, self.URL, context)
|
||||
if url:
|
||||
arguments.append('-u')
|
||||
arguments.append(url)
|
||||
|
||||
key = self.parameterAsString(parameters, self.GOOGLE_KEY, context)
|
||||
if key:
|
||||
arguments.append('-g')
|
||||
arguments.append(key)
|
||||
|
||||
key = self.parameterAsString(parameters, self.BING_KEY, context)
|
||||
if key:
|
||||
arguments.append('-b')
|
||||
arguments.append(key)
|
||||
|
||||
if self.parameterAsBool(parameters, self.RESUME, context):
|
||||
arguments.append('-e')
|
||||
|
||||
if self.getParameterValue(self.NODATA):
|
||||
arguments.append('-a')
|
||||
arguments.append(str(self.getParameterValue(self.NODATA)))
|
||||
|
||||
# KML arguments
|
||||
if self.getParameterValue(self.FORCEKML):
|
||||
if self.parameterAsBool(parameters, self.KML, context):
|
||||
arguments.append('-k')
|
||||
|
||||
if self.getParameterValue(self.NOKML):
|
||||
if self.parameterAsBool(parameters, self.NO_KML, context):
|
||||
arguments.append('-n')
|
||||
|
||||
if self.getParameterValue(self.URL):
|
||||
arguments.append('-u')
|
||||
arguments.append(str(self.getParameterValue(self.URL)))
|
||||
|
||||
# Web viewer arguments
|
||||
if self.getParameterValue(self.WEBVIEWER):
|
||||
arguments.append('-w')
|
||||
arguments.append(self.WEBVIEWERS[self.getParameterValue(self.WEBVIEWER)])
|
||||
|
||||
parameters = {self.TITLE: '-t', self.COPYRIGHT: '-c',
|
||||
self.GOOGLEKEY: '-g', self.BINGKEY: '-b'}
|
||||
for arg, parameter in list(parameters.items()):
|
||||
if self.getParameterValue(arg):
|
||||
arguments.append(parameter)
|
||||
arguments.append(self.getParameterValue(arg))
|
||||
|
||||
arguments.append(self.getParameterValue(self.INPUT))
|
||||
arguments.append(self.getOutputValue(self.OUTPUTDIR))
|
||||
inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context)
|
||||
arguments.append(inLayer.source())
|
||||
arguments.append(self.parameterAsString(parameters, self.OUTPUT, context))
|
||||
|
||||
commands = []
|
||||
if isWindows():
|
||||
|
Loading…
x
Reference in New Issue
Block a user