Coverage for gws-app/gws/plugin/tile_layer/layer.py: 0%

38 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-05 13:35 +0200

1"""The ``tile`` layer.""" 

2 

3from typing import Optional 

4 

5import gws 

6import gws.base.layer 

7import gws.config.util 

8import gws.lib.bounds 

9import gws.lib.extent 

10from . import grabber, provider 

11 

12 

13@gws.ext.config.layer('tile') 

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

15 """Layer that shows tiles from an XYZ tile service.""" 

16 

17 provider: provider.Config 

18 """Tile service the layer is loaded from.""" 

19 display: gws.LayerDisplayMode = gws.LayerDisplayMode.tile 

20 """The way the layer is rendered in the client.""" 

21 

22 

23@gws.ext.object.layer('tile') 

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

25 """Image layer that shows tiles from an XYZ tile service.""" 

26 

27 provider: provider.Object 

28 """Tile provider.""" 

29 

30 canRenderInClient = True 

31 

32 def configure(self): 

33 self.configure_layer() 

34 

35 def create_cache_name(self, cache): 

36 return gws.u.sha256([ 

37 self.provider.cache_hash(), 

38 vars(self.imageFormat), 

39 list(self.wgsExtent), 

40 cache.requestBuffer, 

41 cache.requestTiles, 

42 ])[: gws.base.layer.image.CACHE_NAME_LENGTH] 

43 

44 def create_grabber(self, opts): 

45 return grabber.Object(opts, provider=self.provider) 

46 

47 def configure_provider(self): 

48 return gws.config.util.configure_provider_for(self, provider.Object) 

49 

50 def configure_extent(self): 

51 if super().configure_extent(): 

52 return True 

53 grid = self.provider.grid 

54 ext = gws.lib.extent.transform_to_wgs(grid.extent, grid.crs) 

55 if gws.lib.extent.is_valid_wgs(ext): 

56 self.wgsExtent = grid.crs.clip_wgs_extent(ext) or grid.crs.wgsMaxExtent 

57 else: 

58 self.wgsExtent = grid.crs.wgsMaxExtent 

59 return True 

60 

61 ## 

62 

63 def props(self, user): 

64 p = super().props(user) 

65 if self.displayMode == gws.LayerDisplayMode.client: 

66 return gws.u.merge(p, type='xyz', url=self.provider.url) 

67 return p