Coverage for gws-app/gws/plugin/mbtiles_layer/layer.py: 0%
35 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-05 13:35 +0200
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-05 13:35 +0200
1"""The ``mbtiles`` layer."""
3from typing import Optional
5import gws
6import gws.base.layer
7import gws.config.util
8import gws.lib.gdalx
9import gws.lib.bounds
10import gws.lib.extent
12from . import grabber, provider
15@gws.ext.config.layer('mbtiles')
16class Config(gws.base.layer.Config):
17 """Raster layer from an MBTiles file."""
19 provider: provider.Config
20 """MBTiles file for the layer."""
21 processing: Optional[list[str]]
22 """MapServer PROCESSING directives for the raster data."""
23 transparentColor: Optional[str]
24 """Color rendered as transparent."""
27@gws.ext.object.layer('mbtiles')
28class Object(gws.base.layer.image.Object):
29 """MBTiles layer."""
31 provider: provider.Object
32 """The MBTiles provider."""
33 msOptions: gws.MapServerLayerOptions
34 """MapServer layer options for the file."""
36 def configure(self):
37 self.msOptions = gws.MapServerLayerOptions(
38 type=gws.MapServerLayerType.raster,
39 processing=self.cfg('processing', default=[]),
40 transparentColor=self.cfg('transparentColor', default=None),
41 )
42 self.configure_layer()
44 def configure_provider(self):
45 gws.config.util.configure_provider_for(self, provider.Object)
46 self.msOptions.path = self.provider.path
48 def configure_extent(self):
49 with gws.lib.gdalx.open_raster(self.msOptions.path) as gd:
50 b = gd.bounds()
51 self.msOptions.crs = b.crs
52 if super().configure_extent():
53 return True
54 self.wgsExtent = gws.lib.extent.transform_to_wgs(b.extent, b.crs)
55 return True
57 def create_cache_name(self, cache):
58 return gws.u.sha256([
59 self.provider.cache_hash(),
60 self.cfg('processing', default=[]),
61 self.cfg('transparentColor') or '',
62 vars(self.imageFormat),
63 list(self.wgsExtent),
64 cache.requestBuffer,
65 cache.requestTiles,
66 ])[: gws.base.layer.image.CACHE_NAME_LENGTH]
68 def create_grabber(self, opts):
69 return grabber.Object(opts, msOptions=self.msOptions)