@@ -163,29 +163,33 @@ def __init__(self, filename, tile_params, extent, min_zoom, max_zoom):
163
163
ds = None
164
164
self ._zoom = None
165
165
166
- def _initZoomLayer (self , first_tile ):
166
+ def _initZoomLayer (self , zoom ):
167
+ west_edge , south_edge , east_edge , north_edge = self .extent
168
+ first_tile = Tile (* deg2num (north_edge , west_edge , zoom ), zoom )
169
+ last_tile = Tile (* deg2num (south_edge , east_edge , zoom ), zoom )
170
+
167
171
first_tile_extent = first_tile .extent ()
168
- sqlite_driver = ogr .GetDriverByName ('SQLite' )
169
- ds = sqlite_driver .Open (self .filename , 1 )
172
+ last_tile_extent = last_tile .extent ()
170
173
zoom_extent = [
171
174
first_tile_extent [0 ],
172
- # extend with height of 1 tile, but do not exceed -89.98 to stay in valid range (gdal)
173
- max (- 89.98 , self .extent [1 ] - (first_tile_extent [3 ] - first_tile_extent [1 ])),
174
- # extend with width of 1 tile, do not exceed 180
175
- min (180 , self .extent [2 ] + (first_tile_extent [2 ] - first_tile_extent [0 ])),
175
+ last_tile_extent [1 ],
176
+ last_tile_extent [2 ],
176
177
first_tile_extent [3 ]
177
178
]
179
+
180
+ sqlite_driver = ogr .GetDriverByName ('SQLite' )
181
+ ds = sqlite_driver .Open (self .filename , 1 )
178
182
bounds = ',' .join (map (str , zoom_extent ))
179
183
ds .ExecuteSQL ("UPDATE metadata SET value='{}' WHERE name='bounds'" .format (bounds ))
180
184
ds = None
181
185
182
186
self ._zoomDs = gdal .OpenEx (self .filename , 1 , open_options = ['ZOOM_LEVEL=%s' % first_tile .z ])
183
187
self ._first_tile = first_tile
184
- self ._zoom = first_tile . z
188
+ self ._zoom = zoom
185
189
186
190
def writeTile (self , tile , image ):
187
191
if tile .z != self ._zoom :
188
- self ._initZoomLayer (tile )
192
+ self ._initZoomLayer (tile . z )
189
193
190
194
data = QByteArray ()
191
195
buff = QBuffer (data )
@@ -288,7 +292,7 @@ def processAlgorithm(self, parameters, context, feedback):
288
292
settings .setLayers (layers )
289
293
settings .setOutputDpi (dpi )
290
294
291
- wgs_extent = src_to_wgs .transform (extent )
295
+ wgs_extent = src_to_wgs .transformBoundingBox (extent )
292
296
wgs_extent = [wgs_extent .xMinimum (), wgs_extent .yMinimum (), wgs_extent .xMaximum (), wgs_extent .yMaximum ()]
293
297
294
298
metatiles_by_zoom = {}
@@ -319,8 +323,7 @@ def processAlgorithm(self, parameters, context, feedback):
319
323
for i , metatile in enumerate (metatiles_by_zoom [zoom ]):
320
324
size = QSize (tile_width * metatile .rows (), tile_height * metatile .columns ())
321
325
extent = QgsRectangle (* metatile .extent ())
322
- # TODO: transformation of bounding points?
323
- settings .setExtent (wgs_to_dest .transform (extent ))
326
+ settings .setExtent (wgs_to_dest .transformBoundingBox (extent ))
324
327
settings .setOutputSize (size )
325
328
326
329
label_area = QgsRectangle (settings .extent ())
0 commit comments