@@ -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 )
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