16
16
* *
17
17
***************************************************************************
18
18
"""
19
- from builtins import str
20
19
21
20
__author__ = 'Médéric Ribreux'
22
21
__date__ = 'January 2016'
26
25
27
26
__revision__ = '$Format:%H$'
28
27
29
- from qgis .core import QgsProcessingParameterDefinition
30
28
29
+ from qgis .core import (QgsProcessingParameterDefinition ,
30
+ QgsProcessingParameterRasterLayer ,
31
+ QgsProcessingParameterCrs ,
32
+ QgsProcessingParameterEnum ,
33
+ QgsProcessingParameterString ,
34
+ QgsProcessingParameterNumber ,
35
+ QgsProcessingParameterBoolean ,
36
+ QgsProcessingOutputFolder ,
37
+ QgsProcessingParameterFolderDestination )
31
38
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
39
39
from processing .algs .gdal .GdalUtils import GdalUtils
40
+ from processing .tools .system import isWindows
40
41
41
42
42
43
class gdal2tiles (GdalAlgorithm ):
@@ -45,81 +46,103 @@ class gdal2tiles(GdalAlgorithm):
45
46
PROFILE = 'PROFILE'
46
47
RESAMPLING = 'RESAMPLING'
47
48
ZOOM = 'ZOOM'
48
- S_SRS = 'S_SRS'
49
- OUTPUTDIR = 'OUTPUTDIR'
50
- RESUME = 'RESUME'
49
+ SOURCE_CRS = 'SOURCE_CRS'
51
50
NODATA = 'NODATA'
52
- FORCEKML = 'FORCEKML '
53
- NOKML = 'NOKML '
51
+ KML = 'KML '
52
+ NO_KML = 'NO_KML '
54
53
URL = 'URL'
55
- WEBVIEWER = 'WEBVIEWER '
54
+ VIEWER = 'VIEWER '
56
55
TITLE = 'TITLE'
57
56
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'
64
61
65
62
def __init__ (self ):
66
63
super ().__init__ ()
67
64
68
65
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 ))
71
105
72
- # Advanced parameters
73
106
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 ))
117
138
for param in params :
118
139
param .setFlags (param .flags () | QgsProcessingParameterDefinition .FlagAdvanced )
119
140
self .addParameter (param )
120
141
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' )))
123
146
124
147
def name (self ):
125
148
return 'gdal2tiles'
@@ -131,58 +154,69 @@ def group(self):
131
154
return self .tr ('Raster miscellaneous' )
132
155
133
156
def getConsoleCommands (self , parameters , context , feedback ):
134
-
135
157
arguments = []
136
158
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 ])
140
161
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 ))
144
166
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 ])
149
169
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 )
153
174
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 ())
156
187
157
- if self .getParameterValue (self .NODATA ):
188
+ nodata = self .parameterAsDouble (parameters , self .NODATA , context )
189
+ if nodata :
158
190
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 )
160
197
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 ):
163
212
arguments .append ('-k' )
164
213
165
- if self .getParameterValue ( self .NOKML ):
214
+ if self .parameterAsBool ( parameters , self .NO_KML , context ):
166
215
arguments .append ('-n' )
167
216
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 ))
186
220
187
221
commands = []
188
222
if isWindows ():
0 commit comments