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 22:59 +0200
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 22:59 +0200
1"""GeoJSON layer"""
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
11from . import provider
13gws.ext.new.layer('geojson')
16class Config(gws.base.layer.Config):
17 """GeoJson layer."""
19 provider: provider.Config
20 """Geojson provider."""
23class Object(gws.base.layer.vector.Object):
24 path: str
25 serviceProvider: provider.Object
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
35 def configure_provider(self):
36 return gws.config.util.configure_service_provider_for(self, provider.Object)
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
48 def configure_models(self):
49 return gws.config.util.configure_models_for(self, with_default=True)
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 )
59 def configure_search(self):
60 if super().configure_search():
61 return True
62 self.finders.append(self.create_finder(None))
63 return True
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 )