Skip to content

Commit b1106b9

Browse files
Marcel DancakPeterPetrik
Marcel Dancak
authored andcommitted
[processing] fix #21958 used sqlite3 module instead of GDAL/ORG's SQLite driver
1 parent 346cb38 commit b1106b9

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

python/plugins/processing/algs/qgis/TilesXYZ.py

+19-16
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
import math
3030
from uuid import uuid4
3131

32-
import ogr
3332
import gdal
33+
import sqlite3
3434
from qgis.PyQt.QtCore import QSize, Qt, QByteArray, QBuffer
3535
from qgis.PyQt.QtGui import QColor, QImage, QPainter
3636
from qgis.core import (QgsProcessingException,
@@ -153,15 +153,22 @@ def __init__(self, filename, tile_params, extent, min_zoom, max_zoom):
153153
driver = gdal.GetDriverByName('MBTiles')
154154
ds = driver.Create(filename, 1, 1, 1, options=['TILE_FORMAT=%s' % tile_format] + options)
155155
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+
)
163163
self._zoom = None
164164

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+
165172
def _initZoomLayer(self, zoom):
166173
west_edge, south_edge, east_edge, north_edge = self.extent
167174
first_tile = Tile(*deg2num(north_edge, west_edge, zoom), zoom)
@@ -176,11 +183,8 @@ def _initZoomLayer(self, zoom):
176183
first_tile_extent[3]
177184
]
178185

179-
sqlite_driver = ogr.GetDriverByName('SQLite')
180-
ds = sqlite_driver.Open(self.filename, 1)
181186
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))
184188

185189
self._zoomDs = gdal.OpenEx(self.filename, 1, open_options=['ZOOM_LEVEL=%s' % first_tile.z])
186190
self._first_tile = first_tile
@@ -207,11 +211,8 @@ def writeTile(self, tile, image):
207211

208212
def close(self):
209213
self._zoomDs = None
210-
sqlite_driver = ogr.GetDriverByName('SQLite')
211-
ds = sqlite_driver.Open(self.filename, 1)
212214
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))
215216

216217

217218
class TilesXYZ(QgisAlgorithm):
@@ -309,6 +310,8 @@ def processAlgorithm(self, parameters, context, feedback):
309310
settings.setDestinationCrs(dest_crs)
310311
settings.setLayers(self.layers)
311312
settings.setOutputDpi(dpi)
313+
if tile_format == 'PNG':
314+
settings.setBackgroundColor(QColor(Qt.transparent))
312315

313316
wgs_extent = src_to_wgs.transformBoundingBox(extent)
314317
wgs_extent = [wgs_extent.xMinimum(), wgs_extent.yMinimum(), wgs_extent.xMaximum(), wgs_extent.yMaximum()]

0 commit comments

Comments
 (0)