[processing] fix #21958 used sqlite3 module instead of GDAL/ORG's SQLite driver

This commit is contained in:
Marcel Dancak 2019-05-02 15:37:42 +02:00 committed by Peter Petrik
parent 346cb388cf
commit b1106b9f1e

View File

@ -29,8 +29,8 @@ import os
import math
from uuid import uuid4
import ogr
import gdal
import sqlite3
from qgis.PyQt.QtCore import QSize, Qt, QByteArray, QBuffer
from qgis.PyQt.QtGui import QColor, QImage, QPainter
from qgis.core import (QgsProcessingException,
@ -153,15 +153,22 @@ class MBTilesWriter:
driver = gdal.GetDriverByName('MBTiles')
ds = driver.Create(filename, 1, 1, 1, options=['TILE_FORMAT=%s' % tile_format] + options)
ds = None
sqlite_driver = ogr.GetDriverByName('SQLite')
ds = sqlite_driver.Open(filename, 1)
ds.ExecuteSQL("INSERT INTO metadata(name, value) VALUES ('{}', '{}');".format('minzoom', min_zoom))
ds.ExecuteSQL("INSERT INTO metadata(name, value) VALUES ('{}', '{}');".format('maxzoom', max_zoom))
# will be set properly after writing all tiles
ds.ExecuteSQL("INSERT INTO metadata(name, value) VALUES ('{}', '');".format('bounds'))
ds = None
self._execute_sqlite(
"INSERT INTO metadata(name, value) VALUES ('{}', '{}');".format('minzoom', min_zoom),
"INSERT INTO metadata(name, value) VALUES ('{}', '{}');".format('maxzoom', max_zoom),
# will be set properly after writing all tiles
"INSERT INTO metadata(name, value) VALUES ('{}', '');".format('bounds')
)
self._zoom = None
def _execute_sqlite(self, *commands):
conn = sqlite3.connect(self.filename)
for cmd in commands:
conn.execute(cmd)
conn.commit()
conn.close()
def _initZoomLayer(self, zoom):
west_edge, south_edge, east_edge, north_edge = self.extent
first_tile = Tile(*deg2num(north_edge, west_edge, zoom), zoom)
@ -176,11 +183,8 @@ class MBTilesWriter:
first_tile_extent[3]
]
sqlite_driver = ogr.GetDriverByName('SQLite')
ds = sqlite_driver.Open(self.filename, 1)
bounds = ','.join(map(str, zoom_extent))
ds.ExecuteSQL("UPDATE metadata SET value='{}' WHERE name='bounds'".format(bounds))
ds = None
self._execute_sqlite("UPDATE metadata SET value='{}' WHERE name='bounds'".format(bounds))
self._zoomDs = gdal.OpenEx(self.filename, 1, open_options=['ZOOM_LEVEL=%s' % first_tile.z])
self._first_tile = first_tile
@ -207,11 +211,8 @@ class MBTilesWriter:
def close(self):
self._zoomDs = None
sqlite_driver = ogr.GetDriverByName('SQLite')
ds = sqlite_driver.Open(self.filename, 1)
bounds = ','.join(map(str, self.extent))
ds.ExecuteSQL("UPDATE metadata SET value='{}' WHERE name='bounds'".format(bounds))
ds = None
self._execute_sqlite("UPDATE metadata SET value='{}' WHERE name='bounds'".format(bounds))
class TilesXYZ(QgisAlgorithm):
@ -309,6 +310,8 @@ class TilesXYZ(QgisAlgorithm):
settings.setDestinationCrs(dest_crs)
settings.setLayers(self.layers)
settings.setOutputDpi(dpi)
if tile_format == 'PNG':
settings.setBackgroundColor(QColor(Qt.transparent))
wgs_extent = src_to_wgs.transformBoundingBox(extent)
wgs_extent = [wgs_extent.xMinimum(), wgs_extent.yMinimum(), wgs_extent.xMaximum(), wgs_extent.yMaximum()]