def test_zoom_offset(self): with NamedTemporaryFile(suffix='.mbtiles') as outputfile: metadata = dict( name='bluemarble-aligned', type='baselayer', version='1.0.0', description='BlueMarble 2004-07 Aligned', format='png', ) warp_mbtiles(inputfile=self.inputfile, outputfile=outputfile.name, metadata=metadata, min_resolution=0, max_resolution=3, zoom_offset=2, renderer=TouchRenderer(suffix='.png')) with MbtilesStorage(renderer=None, filename=outputfile.name) as storage: self.assertEqual( set((z, x, y) for z, x, y, data in storage.mbtiles.all()), set([(2, 0, 0)] + [(3, x, y) for x in range(0, 2) for y in range(0, 2)] + [(4, x, y) for x in range(0, 4) for y in range(0, 4)] + [(5, x, y) for x in range(0, 8) for y in range(0, 8)])) self.assertEqual(storage.mbtiles.metadata['bounds'], '-180.0,-90.0,0.0,0.0') self.assertEqual(storage.mbtiles.metadata['x-minzoom'], '2') self.assertEqual(storage.mbtiles.metadata['x-maxzoom'], '5')
def test_save(self): # We must create this on disk self.storage = MbtilesStorage.create(renderer=self.renderer, filename=self.tempfile.name, metadata=self.metadata) # Transparent 1×1 image image = VImage.new_rgba(width=1, height=1, ink=rgba(r=0, g=0, b=0, a=0)) # Save it twice, assuming that MBTiles will deduplicate self.storage.save(x=0, y=1, z=2, image=image) self.storage.save(x=1, y=0, z=2, image=image) self.storage.waitall() # Assert that things were saved properly self.assertEqual( [(z, x, y, intmd5(data)) for z, x, y, data in self.storage.mbtiles.all()], [ (2, 0, 1, 89446660811628514001822794642426893173), (2, 1, 0, 89446660811628514001822794642426893173), ] ) # Close the existing database. self.storage.mbtiles.close() # Re-open the created file storage = MbtilesStorage(renderer=self.renderer, filename=self.tempfile.name) # Read out of the backend self.assertEqual( [(z, x, y, intmd5(data)) for z, x, y, data in storage.mbtiles.all()], [ (2, 0, 1, 89446660811628514001822794642426893173), (2, 1, 0, 89446660811628514001822794642426893173), ] )