from jupytergis import GISDocument
# make a copy so we aren't editing the original
import shutil
shutil.copyfile("france_hiking.jGIS", "hiking.jGIS")
'hiking.jGIS'
doc = GISDocument("hiking.jGIS")
doc
<jupytergis_lab.notebook.gis_document.GISDocument object at 0x10c6533b0>
Creating a layer returns a layer id
layer_id = doc.add_raster_layer(
url="https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}",
name="Google Satellite",
attribution="Google",
opacity=0.6,
)
layer_id
'b7d8902c-4b93-403e-bbb9-67909e1bc3b8'
Wrapper class for updating layers
from dataclasses import dataclass
from jupytergis_lab.notebook.gis_document import IRasterLayer, JGISLayer
@dataclass
class LayerWrapper:
layer_id: str
doc: GISDocument
@property
def layer_model(self):
return self.doc.layers[self.layer_id]
@property
def visible(self):
return self.doc.layers[self.layer_id]['visible']
@visible.setter
def visible(self, value):
self.update_fields(visible=value)
@property
def opacity(self):
return self.doc.layers[self.layer_id]['parameters']['opacity']
@opacity.setter
def opacity(self, value):
self.update_parameters(opacity=value)
def update_parameters(self, **params):
"""update parameters in a layer"""
existing_params = self.doc._layers[self.layer_id]['parameters']
new_params = {}
new_params.update(existing_params)
new_params.update(params)
self.update_fields(parameters=new_params)
def update_fields(self, **fields):
"""set top-level fields"""
layer_copy = self.doc._layers[self.layer_id].copy()
layer_copy.update(fields)
# assigning `doc._layers` to a COPY is what actually updates the document and view
self.doc._layers[self.layer_id] = layer_copy
def remove(self):
self.doc.remove_layer(self.layer_id)
Create a layer wrapper given a layer id and doc object
layer_wrapper = LayerWrapper(layer_id, doc)
now we have methods and properties to interact with the layer
layer_wrapper.opacity = 0.8
layer_wrapper.visible = False
layer_wrapper.visible = True
layer_wrapper.opacity = 0.6
layer_wrapper.layer_model
{'filters': None, 'type': 'RasterLayer', 'name': 'Google Satellite', 'parameters': {'opacity': 0.6, 'source': '71d74f8b-27eb-416d-8098-921618b875b5'}, 'visible': True}
geo_id = doc.add_geojson_layer(path="france_regions.geojson")
geo = LayerWrapper(geo_id, doc)
geo.layer_model
{'visible': True, 'name': 'GeoJSON Layer', 'parameters': {'symbologyState': None, 'color': None, 'opacity': 1.0, 'source': '89aa9685-12e0-4103-a044-8512dbe1643d'}, 'filters': {'logicalOp': None, 'appliedFilters': [{'value': None, 'feature': None, 'operator': None}]}, 'type': 'VectorLayer'}
geo.update_parameters(color=None)
geo.visible = False
image_layer_id = doc.add_image_layer(
url="https://maplibre.org/maplibre-gl-js/docs/assets/radar.gif",
coordinates=[
[-80.425, 46.437],
[-71.516, 46.437],
[-71.516, 37.936],
[-80.425, 37.936],
],
)
layer_wrapper = LayerWrapper(image_layer_id, doc)
layer_wrapper.layer_model
{'visible': True, 'name': 'Image Layer', 'filters': None, 'parameters': {'opacity': 1.0, 'source': '79d88918-d752-4870-9683-8edf83daad92'}, 'type': 'ImageLayer'}