Skip to content

Commit 6a1b68e

Browse files
committedOct 11, 2017
[processing] restore gdal2tiles algorithm
1 parent 0f22664 commit 6a1b68e

File tree

2 files changed

+144
-110
lines changed

2 files changed

+144
-110
lines changed
 

‎python/plugins/processing/algs/gdal/GdalAlgorithmProvider.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
from .ColorRelief import ColorRelief
4242
from .contour import contour
4343
from .fillnodata import fillnodata
44+
from .gdal2tiles import gdal2tiles
4445
from .gdaltindex import gdaltindex
4546
from .GridAverage import GridAverage
4647
from .GridDataMetrics import GridDataMetrics
@@ -71,7 +72,6 @@
7172
# from .gdalcalc import gdalcalc
7273
# from .rasterize_over import rasterize_over
7374
# from .retile import retile
74-
# from .gdal2tiles import gdal2tiles
7575

7676
from .ogr2ogrpointsonlines import Ogr2OgrPointsOnLines
7777
from .ogr2ogrtopostgis import Ogr2OgrToPostGis
@@ -144,6 +144,7 @@ def loadAlgorithms(self):
144144
ColorRelief(),
145145
contour(),
146146
fillnodata(),
147+
gdal2tiles(),
147148
gdaltindex(),
148149
GridAverage(),
149150
GridDataMetrics(),
@@ -173,7 +174,6 @@ def loadAlgorithms(self):
173174
# gdalcalc(),
174175
# rasterize_over(),
175176
# retile(),
176-
# gdal2tiles(),
177177
# ----- OGR tools -----
178178
Ogr2OgrPointsOnLines(),
179179
Ogr2OgrToPostGis(),

‎python/plugins/processing/algs/gdal/gdal2tiles.py

Lines changed: 142 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
* *
1717
***************************************************************************
1818
"""
19-
from builtins import str
2019

2120
__author__ = 'Médéric Ribreux'
2221
__date__ = 'January 2016'
@@ -26,17 +25,19 @@
2625

2726
__revision__ = '$Format:%H$'
2827

29-
from qgis.core import QgsProcessingParameterDefinition
3028

29+
from qgis.core import (QgsProcessingParameterDefinition,
30+
QgsProcessingParameterRasterLayer,
31+
QgsProcessingParameterCrs,
32+
QgsProcessingParameterEnum,
33+
QgsProcessingParameterString,
34+
QgsProcessingParameterNumber,
35+
QgsProcessingParameterBoolean,
36+
QgsProcessingOutputFolder,
37+
QgsProcessingParameterFolderDestination)
3138
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
32-
from processing.core.parameters import ParameterRaster
33-
from processing.core.parameters import ParameterString
34-
from processing.core.parameters import ParameterSelection
35-
from processing.core.parameters import ParameterCrs
36-
from processing.core.parameters import ParameterBoolean
37-
from processing.core.outputs import OutputDirectory
38-
from processing.tools.system import isWindows
3939
from processing.algs.gdal.GdalUtils import GdalUtils
40+
from processing.tools.system import isWindows
4041

4142

4243
class gdal2tiles(GdalAlgorithm):
@@ -45,81 +46,103 @@ class gdal2tiles(GdalAlgorithm):
4546
PROFILE = 'PROFILE'
4647
RESAMPLING = 'RESAMPLING'
4748
ZOOM = 'ZOOM'
48-
S_SRS = 'S_SRS'
49-
OUTPUTDIR = 'OUTPUTDIR'
50-
RESUME = 'RESUME'
49+
SOURCE_CRS = 'SOURCE_CRS'
5150
NODATA = 'NODATA'
52-
FORCEKML = 'FORCEKML'
53-
NOKML = 'NOKML'
51+
KML = 'KML'
52+
NO_KML = 'NO_KML'
5453
URL = 'URL'
55-
WEBVIEWER = 'WEBVIEWER'
54+
VIEWER = 'VIEWER'
5655
TITLE = 'TITLE'
5756
COPYRIGHT = 'COPYRIGHT'
58-
GOOGLEKEY = 'GOOGLEKEY'
59-
BINGKEY = 'BINGKEY'
60-
61-
PROFILES = ['mercator', 'geodetic', 'raster']
62-
RESAMPLINGS = ['average', 'near', 'bilinear', 'cubic', 'cubicspline', 'lanczos', 'antialias']
63-
WEBVIEWERS = ['all', 'google', 'openlayers', 'leaflet', 'none']
57+
GOOGLE_KEY = 'GOOGLE_KEY'
58+
BING_KEY = 'BING_KEY'
59+
RESUME = 'RESUME'
60+
OUTPUT = 'OUTPUT'
6461

6562
def __init__(self):
6663
super().__init__()
6764

6865
def initAlgorithm(self, config=None):
69-
# Required parameters
70-
self.addParameter(ParameterRaster(self.INPUT, self.tr('Input layer')))
66+
self.profiles = ((self.tr('Mercator'), 'mercator'),
67+
(self.tr('Geodetic'), 'geodetic'),
68+
(self.tr('Raster'), 'raster'))
69+
70+
self.methods = ((self.tr('Average'), 'average'),
71+
(self.tr('Nearest neighbour'), 'near'),
72+
(self.tr('Bilinear'), 'bilinear'),
73+
(self.tr('Cubic'), 'cubic'),
74+
(self.tr('Cubic spline'), 'cubicspline'),
75+
(self.tr('Lanczos windowed sinc'), 'lanczos'),
76+
(self.tr('Antialias'), 'antialias'))
77+
78+
self.viewers = ((self.tr('All'), 'all'),
79+
(self.tr('GoogleMaps'), 'google'),
80+
(self.tr('OpenLayers'), 'openlayers'),
81+
(self.tr('Leaflet'), 'leaflet'),
82+
(self.tr('None'), 'none'))
83+
84+
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer')))
85+
self.addParameter(QgsProcessingParameterEnum(self.PROFILE,
86+
self.tr('Tile cutting profile'),
87+
options=[i[0] for i in self.profiles],
88+
allowMultiple=False,
89+
defaultValue=0))
90+
self.addParameter(QgsProcessingParameterString(self.ZOOM,
91+
self.tr('Zoom levels to render'),
92+
defaultValue='',
93+
optional=True))
94+
self.addParameter(QgsProcessingParameterEnum(self.VIEWER,
95+
self.tr('Web viewer to generate'),
96+
options=[i[0] for i in self.viewers],
97+
allowMultiple=False,
98+
defaultValue=0))
99+
self.addParameter(QgsProcessingParameterString(self.TITLE,
100+
self.tr('Title of the map'),
101+
optional=True))
102+
self.addParameter(QgsProcessingParameterString(self.COPYRIGHT,
103+
self.tr('Copyright of the map'),
104+
optional=True))
71105

72-
# Advanced parameters
73106
params = []
74-
params.append(ParameterSelection(self.PROFILE,
75-
self.tr('Tile cutting profile'),
76-
self.PROFILES, 0, False, optional=True))
77-
params.append(ParameterSelection(self.RESAMPLING,
78-
self.tr('Resampling method'),
79-
self.RESAMPLINGS, 0, False, optional=True))
80-
params.append(ParameterCrs(self.S_SRS,
81-
self.tr('The spatial reference system used for the source input data'),
82-
None, True))
83-
params.append(ParameterString(self.ZOOM,
84-
self.tr('Zoom levels to render'),
85-
None, False, True))
86-
params.append(ParameterBoolean(self.RESUME,
87-
self.tr('Resume mode, generate only missing files'),
88-
False, True))
89-
params.append(ParameterString(self.NODATA,
90-
self.tr('NODATA transparency value to assign to the input data'),
91-
None, False, True))
92-
params.append(ParameterBoolean(self.FORCEKML,
93-
self.tr('Generate KML for Google Earth - default for "geodetic" profile and "raster" in EPSG:4326'),
94-
False, True))
95-
params.append(ParameterBoolean(self.NOKML,
96-
self.tr('Avoid automatic generation of KML files for EPSG:4326'),
97-
False, True))
98-
params.append(ParameterString(self.URL,
99-
self.tr('URL address where the generated tiles are going to be published'),
100-
None, False, True))
101-
params.append(ParameterSelection(self.WEBVIEWER,
102-
self.tr('Web viewer to generate'),
103-
self.WEBVIEWERS, 0, False, optional=True))
104-
params.append(ParameterString(self.TITLE,
105-
self.tr('Title of the map'),
106-
None, False, True))
107-
params.append(ParameterString(self.COPYRIGHT,
108-
self.tr('Copyright for the map'),
109-
None, False, True))
110-
params.append(ParameterString(self.GOOGLEKEY,
111-
self.tr('Google Maps API key from http://code.google.com/apis/maps/signup.html'),
112-
None, False, True))
113-
params.append(ParameterString(self.BINGKEY,
114-
self.tr('Bing Maps API key from https://www.bingmapsportal.com/'),
115-
None, False, True))
116-
107+
params.append(QgsProcessingParameterEnum(self.RESAMPLING,
108+
self.tr('Resampling method'),
109+
options=[i[0] for i in self.methods],
110+
allowMultiple=False,
111+
defaultValue=0))
112+
params.append(QgsProcessingParameterCrs(self.SOURCE_CRS,
113+
self.tr('The spatial reference system used for the source input data'),
114+
optional=True))
115+
params.append(QgsProcessingParameterNumber(self.NODATA,
116+
self.tr('Transparency value to assign to the input data'),
117+
type=QgsProcessingParameterNumber.Double,
118+
defaultValue=0,
119+
optional=True))
120+
params.append(QgsProcessingParameterString(self.URL,
121+
self.tr('URL address where the generated tiles are going to be published'),
122+
optional=True))
123+
params.append(QgsProcessingParameterString(self.GOOGLE_KEY,
124+
self.tr('Google Maps API key (http://code.google.com/apis/maps/signup.html)'),
125+
optional=True))
126+
params.append(QgsProcessingParameterString(self.BING_KEY,
127+
self.tr('Bing Maps API key (https://www.bingmapsportal.com/)'),
128+
optional=True))
129+
params.append(QgsProcessingParameterBoolean(self.RESUME,
130+
self.tr('Generate only missing files'),
131+
defaultValue=False))
132+
params.append(QgsProcessingParameterBoolean(self.KML,
133+
self.tr('Generate KML for Google Earth'),
134+
defaultValue=False))
135+
params.append(QgsProcessingParameterBoolean(self.NO_KML,
136+
self.tr('Avoid automatic generation of KML files for EPSG:4326'),
137+
defaultValue=False))
117138
for param in params:
118139
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
119140
self.addParameter(param)
120141

121-
self.addOutput(OutputDirectory(self.OUTPUTDIR,
122-
self.tr('The directory where the tile result is created')))
142+
self.addParameter(QgsProcessingParameterFolderDestination(self.OUTPUT,
143+
self.tr('Output directory')))
144+
145+
self.addOutput(QgsProcessingOutputFolder(self.OUTPUT, self.tr('Output directory')))
123146

124147
def name(self):
125148
return 'gdal2tiles'
@@ -131,58 +154,69 @@ def group(self):
131154
return self.tr('Raster miscellaneous')
132155

133156
def getConsoleCommands(self, parameters, context, feedback):
134-
135157
arguments = []
136158

137-
if self.getParameterValue(self.PROFILE):
138-
arguments.append('-p')
139-
arguments.append(self.PROFILES[self.getParameterValue(self.PROFILE)])
159+
arguments.append('-p')
160+
arguments.append(self.profiles[self.parameterAsEnum(parameters, self.PROFILE, context)][1])
140161

141-
if self.getParameterValue(self.RESAMPLING):
142-
arguments.append('-r')
143-
arguments.append(self.RESAMPLINGS[self.getParameterValue(self.RESAMPLING)])
162+
zoom = self.parameterAsString(parameters, self.ZOOM, context)
163+
if zoom:
164+
arguments.append('-z')
165+
arguments.append(str(zoom))
144166

145-
ssrs = str(self.getParameterValue(self.S_SRS))
146-
if len(ssrs) > 0:
147-
arguments.append('-s')
148-
arguments.append(ssrs)
167+
arguments.append('-w')
168+
arguments.append(self.viewers[self.parameterAsEnum(parameters, self.VIEWER, context)][1])
149169

150-
if self.getParameterValue(self.ZOOM):
151-
arguments.append('-z')
152-
arguments.append(str(self.getParameterValue(self.ZOOM)))
170+
title = self.parameterAsString(parameters, self.TITLE, context)
171+
if title:
172+
arguments.append('-t')
173+
arguments.append(title)
153174

154-
if self.getParameterValue(self.RESUME):
155-
arguments.append('-e')
175+
copying = self.parameterAsString(parameters, self.COPYRIGHT, context)
176+
if copying:
177+
arguments.append('-c')
178+
arguments.append(copying)
179+
180+
arguments.append('-r')
181+
arguments.append(self.methods[self.parameterAsEnum(parameters, self.RESAMPLING, context)][1])
182+
183+
crs = self.parameterAsCrs(parameters, self.SOURCE_CRS, context)
184+
if crs.isValid():
185+
arguments.append('-s')
186+
arguments.append(crs.authid())
156187

157-
if self.getParameterValue(self.NODATA):
188+
nodata = self.parameterAsDouble(parameters, self.NODATA, context)
189+
if nodata:
158190
arguments.append('-a')
159-
arguments.append(str(self.getParameterValue(self.NODATA)))
191+
arguments.append(str(nodata))
192+
193+
url = self.parameterAsString(parameters, self.URL, context)
194+
if url:
195+
arguments.append('-u')
196+
arguments.append(url)
160197

161-
# KML arguments
162-
if self.getParameterValue(self.FORCEKML):
198+
key = self.parameterAsString(parameters, self.GOOGLE_KEY, context)
199+
if key:
200+
arguments.append('-g')
201+
arguments.append(key)
202+
203+
key = self.parameterAsString(parameters, self.BING_KEY, context)
204+
if key:
205+
arguments.append('-b')
206+
arguments.append(key)
207+
208+
if self.parameterAsBool(parameters, self.RESUME, context):
209+
arguments.append('-e')
210+
211+
if self.parameterAsBool(parameters, self.KML, context):
163212
arguments.append('-k')
164213

165-
if self.getParameterValue(self.NOKML):
214+
if self.parameterAsBool(parameters, self.NO_KML, context):
166215
arguments.append('-n')
167216

168-
if self.getParameterValue(self.URL):
169-
arguments.append('-u')
170-
arguments.append(str(self.getParameterValue(self.URL)))
171-
172-
# Web viewer arguments
173-
if self.getParameterValue(self.WEBVIEWER):
174-
arguments.append('-w')
175-
arguments.append(self.WEBVIEWERS[self.getParameterValue(self.WEBVIEWER)])
176-
177-
parameters = {self.TITLE: '-t', self.COPYRIGHT: '-c',
178-
self.GOOGLEKEY: '-g', self.BINGKEY: '-b'}
179-
for arg, parameter in list(parameters.items()):
180-
if self.getParameterValue(arg):
181-
arguments.append(parameter)
182-
arguments.append(self.getParameterValue(arg))
183-
184-
arguments.append(self.getParameterValue(self.INPUT))
185-
arguments.append(self.getOutputValue(self.OUTPUTDIR))
217+
inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context)
218+
arguments.append(inLayer.source())
219+
arguments.append(self.parameterAsString(parameters, self.OUTPUT, context))
186220

187221
commands = []
188222
if isWindows():

0 commit comments

Comments
 (0)
Please sign in to comment.