@@ -133,7 +133,7 @@ def writeTile(self, tile, image):
133
133
return path
134
134
135
135
def close (self ):
136
- return self . folder
136
+ pass
137
137
138
138
139
139
class MBTilesWriter :
@@ -212,18 +212,17 @@ def close(self):
212
212
bounds = ',' .join (map (str , self .extent ))
213
213
ds .ExecuteSQL ("UPDATE metadata SET value='{}' WHERE name='bounds'" .format (bounds ))
214
214
ds = None
215
- return self .filename
216
215
217
216
218
217
class TilesXYZ (QgisAlgorithm ):
219
- NAME = 'NAME'
220
218
EXTENT = 'EXTENT'
221
219
ZOOM_MIN = 'ZOOM_MIN'
222
220
ZOOM_MAX = 'ZOOM_MAX'
223
221
TILE_FORMAT = 'TILE_FORMAT'
224
222
DPI = 'DPI'
225
223
OUTPUT_FORMAT = 'OUTPUT_FORMAT'
226
224
OUTPUT_DIRECTORY = 'OUTPUT_DIRECTORY'
225
+ OUTPUT_FILE = 'OUTPUT_FILE'
227
226
228
227
def group (self ):
229
228
return self .tr ('Raster tools' )
@@ -232,9 +231,6 @@ def groupId(self):
232
231
return 'rastertools'
233
232
234
233
def initAlgorithm (self , config = None ):
235
- self .addParameter (QgsProcessingParameterString (self .NAME ,
236
- self .tr ('Name' ),
237
- defaultValue = 'Tiles' ))
238
234
self .addParameter (QgsProcessingParameterExtent (self .EXTENT , self .tr ('Extent' )))
239
235
self .addParameter (QgsProcessingParameterNumber (self .ZOOM_MIN ,
240
236
self .tr ('Minimum zoom' ),
@@ -262,7 +258,12 @@ def initAlgorithm(self, config=None):
262
258
self .outputs ,
263
259
defaultValue = 0 ))
264
260
self .addParameter (QgsProcessingParameterFolderDestination (self .OUTPUT_DIRECTORY ,
265
- self .tr ('Output directory' )))
261
+ self .tr ('Output directory' ),
262
+ optional = True ))
263
+ self .addParameter (QgsProcessingParameterFileDestination (self .OUTPUT_FILE ,
264
+ self .tr ('Output file (for MBTiles)' ),
265
+ self .tr ('MBTiles files (*.mbtiles)' ),
266
+ optional = True ))
266
267
267
268
def name (self ):
268
269
return 'tilesxyz'
@@ -279,14 +280,16 @@ def prepareAlgorithm(self, parameters, context, feedback):
279
280
def processAlgorithm (self , parameters , context , feedback ):
280
281
feedback .setProgress (1 )
281
282
282
- name = self .parameterAsString (parameters , self .NAME , context )
283
- output_dir = self .parameterAsString (parameters , self .OUTPUT_DIRECTORY , context )
284
283
extent = self .parameterAsExtent (parameters , self .EXTENT , context )
285
284
min_zoom = self .parameterAsInt (parameters , self .ZOOM_MIN , context )
286
285
max_zoom = self .parameterAsInt (parameters , self .ZOOM_MAX , context )
287
286
dpi = self .parameterAsInt (parameters , self .DPI , context )
288
287
tile_format = self .formats [self .parameterAsEnum (parameters , self .TILE_FORMAT , context )]
289
288
output_format = self .outputs [self .parameterAsEnum (parameters , self .OUTPUT_FORMAT , context )]
289
+ if output_format == 'Directory' :
290
+ output_dir = self .parameterAsString (parameters , self .OUTPUT_DIRECTORY , context )
Collapse comment Comment on line R290
This should throw an exception if the directory or file is not set, but required by the selected format
Code has comments. Press enter to view.
291
+ else : # MBTiles
292
+ output_file = self .parameterAsString (parameters , self .OUTPUT_FILE , context )
290
293
tile_width = 256
291
294
tile_height = 256
292
295
@@ -323,10 +326,9 @@ def processAlgorithm(self, parameters, context, feedback):
323
326
'height' : tile_height
324
327
}
325
328
if output_format == 'Directory' :
326
- writer = DirectoryWriter (os . path . join ( output_dir , name ) , tile_params )
329
+ writer = DirectoryWriter (output_dir , tile_params )
327
330
else :
328
- filename = os .path .join (output_dir , '%s.mbtiles' % name )
329
- writer = MBTilesWriter (filename , tile_params , wgs_extent , min_zoom , max_zoom )
331
+ writer = MBTilesWriter (output_file , tile_params , wgs_extent , min_zoom , max_zoom )
330
332
331
333
for zoom in range (min_zoom , max_zoom + 1 ):
332
334
feedback .pushConsoleInfo ('Generating tiles for zoom level: %s' % zoom )
@@ -358,7 +360,7 @@ def processAlgorithm(self, parameters, context, feedback):
358
360
painter .end ()
359
361
360
362
# For analysing metatiles (labels, etc.)
361
- # metatile_dir = os.path.join(output_dir, name, str(zoom))
363
+ # metatile_dir = os.path.join(output_dir, str(zoom))
362
364
# os.makedirs(metatile_dir, exist_ok=True)
363
365
# image.save(os.path.join(metatile_dir, 'metatile_%s.png' % i))
364
366
@@ -369,8 +371,14 @@ def processAlgorithm(self, parameters, context, feedback):
369
371
progress += 1
370
372
feedback .setProgress (100 * (progress / metatiles_count ))
371
373
372
- output = writer .close ()
373
- return {'OUTPUT' : output }
374
+ writer .close ()
375
+
376
+ results = {}
377
+ if output_format == 'Directory' :
378
+ results ['OUTPUT_DIRECTORY' ] = output_dir
379
+ else : # MBTiles
380
+ results ['OUTPUT_FILE' ] = output_file
381
+ return results
374
382
375
383
def checkParameterValues (self , parameters , context ):
376
384
min_zoom = self .parameterAsInt (parameters , self .ZOOM_MIN , context )
0 commit comments