Coverage for gws-app/gws/plugin/mbtiles_layer/layer.py: 0%
40 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 12:46 +0200
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 12:46 +0200
1"""MBTiles based layer."""
3from typing import Optional
5import gws
6import gws.base.layer
7import gws.config.util
8import gws.lib.gdalx
9import gws.lib.mapserver
10import gws.gis.zoom
11import gws.lib.bounds
13from . import provider
15gws.ext.new.layer('mbtiles')
18class Config(gws.base.layer.Config):
19 """MBTiles layer"""
21 provider: provider.Config
22 """Provider configuration."""
23 processing: Optional[list[str]]
24 """Processing directives."""
25 transparentColor: Optional[str]
26 """Color to treat as transparent in the layer."""
29class Object(gws.base.layer.image.Object):
30 serviceProvider: provider.Object
32 def configure(self):
33 self.msOptions = gws.MapServerLayerOptions(
34 type=gws.MapServerLayerType.raster,
35 processing=self.cfg('processing', default=[]),
36 transparentColor=self.cfg('transparentColor', default=None),
37 )
38 self.configure_layer()
40 def configure_provider(self):
41 gws.config.util.configure_service_provider_for(self, provider.Object)
42 self.msOptions.path = self.serviceProvider.path
44 def configure_bounds(self):
45 if super().configure_bounds():
46 return True
47 with gws.lib.gdalx.open_raster(self.msOptions.path) as gd:
48 self.bounds = gws.lib.bounds.transform(gd.bounds(), self.mapCrs)
49 self.msOptions.crs = self.bounds.crs
50 return True
52 def configure_grid(self):
53 p = self.cfg('grid', default=gws.Config())
55 self.grid = gws.TileGrid(
56 origin=p.origin or gws.Origin.nw,
57 tileSize=p.tileSize or 256,
58 bounds=self.bounds,
59 )
61 if p.resolutions:
62 self.grid.resolutions = p.resolutions
63 else:
64 self.grid.resolutions = gws.gis.zoom.resolutions_from_bounds(self.grid.bounds, self.grid.tileSize)
66 ##
68 def render(self, lri):
69 return gws.lib.mapserver.util.raster_render(self, lri)