Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
413 changes: 413 additions & 0 deletions examples/python-api.ipynb

Large diffs are not rendered by default.

85 changes: 85 additions & 0 deletions python/jupytergis_lab/jupytergis_lab/notebook/gis_document.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
SourceType,
)

from jupytergis_lab.notebook import layer_wrapper

logger = logging.getLogger(__file__)


Expand Down Expand Up @@ -240,6 +242,18 @@ def add_vectortile_layer(

return self._add_layer(OBJECT_FACTORY.create_layer(layer, self))

def get_source(self, source_id: str):
"""
Get a source by its ID.

:param source_id: The ID of the source to retrieve.
:return: The source object.
"""
source = self._sources.get(source_id)
if source is None:
raise KeyError(f"No source found with ID: {source_id}")
return source

def add_geojson_layer(
self,
path: str | Path | None = None,
Expand Down Expand Up @@ -314,6 +328,77 @@ def add_geojson_layer(

return self._add_layer(OBJECT_FACTORY.create_layer(layer, self))

def add_geojson_layer2(
self,
path: str | Path | None = None,
data: Dict | None = None,
name: str = "GeoJSON Layer",
opacity: float = 1,
logical_op: str | None = None,
feature: str | None = None,
operator: str | None = None,
value: Union[str, int, float] | None = None,
color_expr=None,
):
if isinstance(path, Path):
path = str(path)

if path is None and data is None:
raise ValueError("Cannot create a GeoJSON layer without data")

if path is not None and data is not None:
raise ValueError("Cannot set GeoJSON layer data and path at the same time")

parameters = {}

if path is not None:
if path.startswith("http://") or path.startswith("https://"):
response = requests.get(path)
response.raise_for_status()
parameters["path"] = path
else:
with open(path, "r") as fobj:
parameters["data"] = json.load(fobj)

if data is not None:
parameters["data"] = data

source = {
"type": SourceType.GeoJSONSource,
"name": f"{name} Source",
"parameters": parameters,
}

source_id = self._add_source(OBJECT_FACTORY.create_source(source, self))

layer = {
"type": LayerType.VectorLayer,
"name": name,
"visible": True,
"parameters": {
"source": source_id,
"color": color_expr,
"opacity": opacity,
},
"filters": {
"appliedFilters": [
{"feature": feature, "operator": operator, "value": value}
],
"logicalOp": logical_op,
},
}
print(layer)

base_layer = OBJECT_FACTORY.create_layer(layer, self)
print("Base Layer:", base_layer)
wrapped_layer = layer_wrapper.CustomVectorWrapper(base_layer)

print("cool", wrapped_layer)

self._add_layer(wrapped_layer)

return wrapped_layer

def add_image_layer(
self,
url: str,
Expand Down
15 changes: 15 additions & 0 deletions python/jupytergis_lab/jupytergis_lab/notebook/layer_wrapper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class CustomVectorWrapper:
def __init__(self, base_layer):
self._base_layer = base_layer

def hello(self):
print("Hello world")

def show_layer(self):
print("Showing layer:", self._base_layer.parameters)

def toggle_visibility(self):
self._base_layer.visible = not self._base_layer.visible

def __getattr__(self, name):
return getattr(self._base_layer, name)
Loading