Coverage for gws-app/gws/plugin/geojson/layer.py: 98%
45 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 20:06 +0200
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-23 20:06 +0200
1"""The ``geojson`` layer."""
3import gws
4import gws.base.layer
5import gws.lib.shape
6import gws.config.util
7import gws.lib.bounds
8import gws.lib.crs
9import gws.lib.jsonx
11from . import provider
14@gws.ext.config.layer('geojson')
15class Config(gws.base.layer.Config):
16 """Vector layer with features from a GeoJSON file."""
18 provider: provider.Config
19 """GeoJSON file with the layer features."""
22@gws.ext.object.layer('geojson')
23class Object(gws.base.layer.vector.Object):
24 """GeoJSON layer."""
26 provider: provider.Object
27 """The GeoJSON provider."""
29 def configure(self):
30 self.configure_layer()
31 for rec in self.provider.load_records():
32 if rec.shape:
33 self.geometryType = rec.shape.type
34 self.geometryCrs = rec.shape.crs
35 break
37 def configure_provider(self):
38 return gws.config.util.configure_provider_for(self, provider.Object)
40 def configure_extent(self):
41 if super().configure_extent():
42 return True
43 recs = self.provider.load_records()
44 if recs:
45 bs = [rec.shape.bounds() for rec in recs if rec.shape]
46 if bs:
47 ext = gws.lib.bounds.wgs_extent(gws.lib.bounds.union(bs), pad=True)
48 if ext:
49 self.wgsExtent = ext
50 return True
52 def configure_models(self):
53 return gws.config.util.configure_models_for(self, with_default=True)
55 def create_model(self, cfg):
56 """Create a GeoJSON model that uses the provider of the layer.
58 Args:
59 cfg: Model configuration, or ``None`` for the default model.
61 Returns:
62 The model.
63 """
64 return self.create_child(
65 gws.ext.object.model,
66 cfg,
67 type=self.extType,
68 _defaultProvider=self.provider
69 )
71 def configure_search(self):
72 if super().configure_search():
73 return True
74 self.finders.append(self.create_finder(None))
75 return True
77 def create_finder(self, cfg):
78 """Create a GeoJSON finder that uses the provider of the layer.
80 Args:
81 cfg: Finder configuration, or ``None`` for the default finder.
83 Returns:
84 The finder.
85 """
86 return self.create_child(
87 gws.ext.object.finder,
88 cfg,
89 type='geojson',
90 _defaultProvider=self.provider,
91 )