#!/usr/bin/env python # coding: utf-8 # # JupyterGIS Python API # #### Simple usage # In[57]: from jupytergis import GISDocument # In[58]: # make a copy so we aren't editing the original import shutil shutil.copyfile("france_hiking.jGIS", "hiking.jGIS") # In[59]: doc = GISDocument("hiking.jGIS") # In[60]: doc # Creating a layer returns a layer id # In[61]: 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 # Wrapper class for updating layers # In[62]: 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 # In[63]: layer_wrapper = LayerWrapper(layer_id, doc) # now we have methods and properties to interact with the layer # In[64]: layer_wrapper.opacity = 0.8 # In[65]: layer_wrapper.visible = False # In[66]: layer_wrapper.visible = True # In[67]: layer_wrapper.opacity = 0.6 # In[68]: layer_wrapper.layer_model # In[69]: geo_id = doc.add_geojson_layer(path="france_regions.geojson") geo = LayerWrapper(geo_id, doc) geo.layer_model # In[73]: geo.update_parameters(color=None) # In[74]: geo.visible = False # In[31]: 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], ], ) # In[32]: layer_wrapper = LayerWrapper(image_layer_id, doc) # In[33]: layer_wrapper.layer_model # In[ ]: