29
29
import math
30
30
from uuid import uuid4
31
31
32
- import ogr
33
32
import gdal
33
+ import sqlite3
34
34
from qgis .PyQt .QtCore import QSize , Qt , QByteArray , QBuffer
35
35
from qgis .PyQt .QtGui import QColor , QImage , QPainter
36
36
from qgis .core import (QgsProcessingException ,
@@ -153,15 +153,22 @@ def __init__(self, filename, tile_params, extent, min_zoom, max_zoom):
153
153
driver = gdal .GetDriverByName ('MBTiles' )
154
154
ds = driver .Create (filename , 1 , 1 , 1 , options = ['TILE_FORMAT=%s' % tile_format ] + options )
155
155
ds = None
156
- sqlite_driver = ogr . GetDriverByName ( 'SQLite' )
157
- ds = sqlite_driver . Open ( filename , 1 )
158
- ds . ExecuteSQL ( "INSERT INTO metadata(name, value) VALUES ('{}', '{}');" .format ('minzoom' , min_zoom ))
159
- ds . ExecuteSQL ( "INSERT INTO metadata(name, value) VALUES ('{}', '{}');" .format ('maxzoom' , max_zoom ))
160
- # will be set properly after writing all tiles
161
- ds . ExecuteSQL ( "INSERT INTO metadata(name, value) VALUES ('{}', '');" .format ('bounds' ) )
162
- ds = None
156
+
157
+ self . _execute_sqlite (
158
+ "INSERT INTO metadata(name, value) VALUES ('{}', '{}');" .format ('minzoom' , min_zoom ),
159
+ "INSERT INTO metadata(name, value) VALUES ('{}', '{}');" .format ('maxzoom' , max_zoom ),
160
+ # will be set properly after writing all tiles
161
+ "INSERT INTO metadata(name, value) VALUES ('{}', '');" .format ('bounds' )
162
+ )
163
163
self ._zoom = None
164
164
165
+ def _execute_sqlite (self , * commands ):
166
+ conn = sqlite3 .connect (self .filename )
167
+ for cmd in commands :
168
+ conn .execute (cmd )
169
+ conn .commit ()
170
+ conn .close ()
171
+
165
172
def _initZoomLayer (self , zoom ):
166
173
west_edge , south_edge , east_edge , north_edge = self .extent
167
174
first_tile = Tile (* deg2num (north_edge , west_edge , zoom ), zoom )
@@ -176,11 +183,8 @@ def _initZoomLayer(self, zoom):
176
183
first_tile_extent [3 ]
177
184
]
178
185
179
- sqlite_driver = ogr .GetDriverByName ('SQLite' )
180
- ds = sqlite_driver .Open (self .filename , 1 )
181
186
bounds = ',' .join (map (str , zoom_extent ))
182
- ds .ExecuteSQL ("UPDATE metadata SET value='{}' WHERE name='bounds'" .format (bounds ))
183
- ds = None
187
+ self ._execute_sqlite ("UPDATE metadata SET value='{}' WHERE name='bounds'" .format (bounds ))
184
188
185
189
self ._zoomDs = gdal .OpenEx (self .filename , 1 , open_options = ['ZOOM_LEVEL=%s' % first_tile .z ])
186
190
self ._first_tile = first_tile
@@ -207,11 +211,8 @@ def writeTile(self, tile, image):
207
211
208
212
def close (self ):
209
213
self ._zoomDs = None
210
- sqlite_driver = ogr .GetDriverByName ('SQLite' )
211
- ds = sqlite_driver .Open (self .filename , 1 )
212
214
bounds = ',' .join (map (str , self .extent ))
213
- ds .ExecuteSQL ("UPDATE metadata SET value='{}' WHERE name='bounds'" .format (bounds ))
214
- ds = None
215
+ self ._execute_sqlite ("UPDATE metadata SET value='{}' WHERE name='bounds'" .format (bounds ))
215
216
216
217
217
218
class TilesXYZ (QgisAlgorithm ):
@@ -309,6 +310,8 @@ def processAlgorithm(self, parameters, context, feedback):
309
310
settings .setDestinationCrs (dest_crs )
310
311
settings .setLayers (self .layers )
311
312
settings .setOutputDpi (dpi )
313
+ if tile_format == 'PNG' :
314
+ settings .setBackgroundColor (QColor (Qt .transparent ))
312
315
313
316
wgs_extent = src_to_wgs .transformBoundingBox (extent )
314
317
wgs_extent = [wgs_extent .xMinimum (), wgs_extent .yMinimum (), wgs_extent .xMaximum (), wgs_extent .yMaximum ()]
0 commit comments