Coverage for gws-app/gws/plugin/geojson/layer.py: 95%

44 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-16 23:09 +0200

1"""GeoJSON layer""" 

2 

3import gws 

4import gws.base.layer 

5import gws.base.shape 

6import gws.config.util 

7import gws.lib.bounds 

8import gws.lib.crs 

9import gws.lib.jsonx 

10 

11from . import provider 

12 

13gws.ext.new.layer('geojson') 

14 

15 

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

17 """GeoJson layer.""" 

18 

19 provider: provider.Config 

20 """Geojson provider.""" 

21 

22 

23class Object(gws.base.layer.vector.Object): 

24 path: str 

25 serviceProvider: provider.Object 

26 

27 def configure(self): 

28 self.configure_layer() 

29 for rec in self.serviceProvider.load_records(): 

30 if rec.shape: 

31 self.geometryType = rec.shape.type 

32 self.geometryCrs = rec.shape.crs 

33 break 

34 

35 def configure_provider(self): 

36 return gws.config.util.configure_service_provider_for(self, provider.Object) 

37 

38 def configure_bounds(self): 

39 if super().configure_bounds(): 

40 return True 

41 recs = self.serviceProvider.load_records() 

42 if recs: 

43 bs = [rec.shape.bounds() for rec in recs if rec.shape] 

44 if bs: 

45 self.bounds = gws.lib.bounds.transform(gws.lib.bounds.union(bs), self.mapCrs) 

46 return True 

47 

48 def configure_models(self): 

49 return gws.config.util.configure_models_for(self, with_default=True) 

50 

51 def create_model(self, cfg): 

52 return self.create_child( 

53 gws.ext.object.model, 

54 cfg, 

55 type=self.extType, 

56 _defaultProvider=self.serviceProvider 

57 ) 

58 

59 def configure_search(self): 

60 if super().configure_search(): 

61 return True 

62 self.finders.append(self.create_finder(None)) 

63 return True 

64 

65 def create_finder(self, cfg): 

66 return self.create_child( 

67 gws.ext.object.finder, 

68 cfg, 

69 type='geojson', 

70 _defaultProvider=self.serviceProvider, 

71 )