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

1"""MBTiles based layer.""" 

2 

3from typing import Optional 

4 

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 

12 

13from . import provider 

14 

15gws.ext.new.layer('mbtiles') 

16 

17 

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

19 """MBTiles layer""" 

20 

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

27 

28 

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

30 serviceProvider: provider.Object 

31 

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

39 

40 def configure_provider(self): 

41 gws.config.util.configure_service_provider_for(self, provider.Object) 

42 self.msOptions.path = self.serviceProvider.path 

43 

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 

51 

52 def configure_grid(self): 

53 p = self.cfg('grid', default=gws.Config()) 

54 

55 self.grid = gws.TileGrid( 

56 origin=p.origin or gws.Origin.nw, 

57 tileSize=p.tileSize or 256, 

58 bounds=self.bounds, 

59 ) 

60 

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) 

65 

66 ## 

67 

68 def render(self, lri): 

69 return gws.lib.mapserver.util.raster_render(self, lri)