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

1"""The ``mbtiles`` layer.""" 

2 

3from typing import Optional 

4 

5import gws 

6import gws.base.layer 

7import gws.config.util 

8import gws.lib.gdalx 

9import gws.lib.bounds 

10import gws.lib.extent 

11 

12from . import grabber, provider 

13 

14 

15@gws.ext.config.layer('mbtiles') 

16class Config(gws.base.layer.Config): 

17 """Raster layer from an MBTiles file.""" 

18 

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.""" 

25 

26 

27@gws.ext.object.layer('mbtiles') 

28class Object(gws.base.layer.image.Object): 

29 """MBTiles layer.""" 

30 

31 provider: provider.Object 

32 """The MBTiles provider.""" 

33 msOptions: gws.MapServerLayerOptions 

34 """MapServer layer options for the file.""" 

35 

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() 

43 

44 def configure_provider(self): 

45 gws.config.util.configure_provider_for(self, provider.Object) 

46 self.msOptions.path = self.provider.path 

47 

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 

56 

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] 

67 

68 def create_grabber(self, opts): 

69 return grabber.Object(opts, msOptions=self.msOptions)