From 22feee50fa5223b5cf3405a3a2257e841dfaa0af Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Thu, 3 Jul 2025 16:31:12 -0400 Subject: [PATCH 1/5] Geometry encoding parameter for shapes --- src/spatialdata/_core/spatialdata.py | 5 ++++- src/spatialdata/_io/io_shapes.py | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/spatialdata/_core/spatialdata.py b/src/spatialdata/_core/spatialdata.py index 48f6386ca..f5a2bec2d 100644 --- a/src/spatialdata/_core/spatialdata.py +++ b/src/spatialdata/_core/spatialdata.py @@ -1179,6 +1179,7 @@ def write( overwrite: bool = False, consolidate_metadata: bool = True, format: SpatialDataFormat | list[SpatialDataFormat] | None = None, + shapes_geometry_encoding: 'WKB' | 'geoarrow' = 'WKB', ) -> None: """ Write the `SpatialData` object to a Zarr store. @@ -1223,6 +1224,7 @@ def write( element_name=element_name, overwrite=False, format=format, + shapes_geometry_encoding=shapes_geometry_encoding, ) if self.path != file_path: @@ -1241,6 +1243,7 @@ def _write_element( element_name: str, overwrite: bool, format: SpatialDataFormat | list[SpatialDataFormat] | None = None, + shapes_geometry_encoding: 'WKB' | 'geoarrow' = 'WKB', ) -> None: if not isinstance(zarr_container_path, Path): raise ValueError( @@ -1266,7 +1269,7 @@ def _write_element( elif element_type == "points": write_points(points=element, group=element_type_group, name=element_name, format=parsed["points"]) elif element_type == "shapes": - write_shapes(shapes=element, group=element_type_group, name=element_name, format=parsed["shapes"]) + write_shapes(shapes=element, group=element_type_group, name=element_name, format=parsed["shapes"], geometry_encoding=shapes_geometry_encoding) elif element_type == "tables": write_table(table=element, group=element_type_group, name=element_name, format=parsed["tables"]) else: diff --git a/src/spatialdata/_io/io_shapes.py b/src/spatialdata/_io/io_shapes.py index c32ce1f34..c0f74e80d 100644 --- a/src/spatialdata/_io/io_shapes.py +++ b/src/spatialdata/_io/io_shapes.py @@ -68,6 +68,7 @@ def write_shapes( name: str, group_type: str = "ngff:shapes", format: Format = CurrentShapesFormat(), + geometry_encoding: 'WKB' | 'geoarrow' = 'WKB', ) -> None: import numcodecs @@ -94,7 +95,7 @@ def write_shapes( attrs["version"] = format.spatialdata_format_version elif isinstance(format, ShapesFormatV02): path = Path(shapes_group._store.path) / shapes_group.path / "shapes.parquet" - shapes.to_parquet(path) + shapes.to_parquet(path, geometry_encoding=geometry_encoding) attrs = format.attrs_to_dict(shapes.attrs) attrs["version"] = format.spatialdata_format_version From 74690e4ff2b1d5644a1e43010324db8f94d01777 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 3 Jul 2025 20:36:07 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/spatialdata/_core/spatialdata.py | 12 +++++++++--- src/spatialdata/_io/io_shapes.py | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/spatialdata/_core/spatialdata.py b/src/spatialdata/_core/spatialdata.py index f5a2bec2d..654a2908a 100644 --- a/src/spatialdata/_core/spatialdata.py +++ b/src/spatialdata/_core/spatialdata.py @@ -1179,7 +1179,7 @@ def write( overwrite: bool = False, consolidate_metadata: bool = True, format: SpatialDataFormat | list[SpatialDataFormat] | None = None, - shapes_geometry_encoding: 'WKB' | 'geoarrow' = 'WKB', + shapes_geometry_encoding: "WKB" | "geoarrow" = "WKB", ) -> None: """ Write the `SpatialData` object to a Zarr store. @@ -1243,7 +1243,7 @@ def _write_element( element_name: str, overwrite: bool, format: SpatialDataFormat | list[SpatialDataFormat] | None = None, - shapes_geometry_encoding: 'WKB' | 'geoarrow' = 'WKB', + shapes_geometry_encoding: "WKB" | "geoarrow" = "WKB", ) -> None: if not isinstance(zarr_container_path, Path): raise ValueError( @@ -1269,7 +1269,13 @@ def _write_element( elif element_type == "points": write_points(points=element, group=element_type_group, name=element_name, format=parsed["points"]) elif element_type == "shapes": - write_shapes(shapes=element, group=element_type_group, name=element_name, format=parsed["shapes"], geometry_encoding=shapes_geometry_encoding) + write_shapes( + shapes=element, + group=element_type_group, + name=element_name, + format=parsed["shapes"], + geometry_encoding=shapes_geometry_encoding, + ) elif element_type == "tables": write_table(table=element, group=element_type_group, name=element_name, format=parsed["tables"]) else: diff --git a/src/spatialdata/_io/io_shapes.py b/src/spatialdata/_io/io_shapes.py index c0f74e80d..93dec6c79 100644 --- a/src/spatialdata/_io/io_shapes.py +++ b/src/spatialdata/_io/io_shapes.py @@ -68,7 +68,7 @@ def write_shapes( name: str, group_type: str = "ngff:shapes", format: Format = CurrentShapesFormat(), - geometry_encoding: 'WKB' | 'geoarrow' = 'WKB', + geometry_encoding: "WKB" | "geoarrow" = "WKB", ) -> None: import numcodecs From fc7d5cee091f1835a61d49ceb5796a8cbf56eaf4 Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Fri, 18 Jul 2025 14:41:34 -0400 Subject: [PATCH 3/5] Update spatialdata.py --- src/spatialdata/_core/spatialdata.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/spatialdata/_core/spatialdata.py b/src/spatialdata/_core/spatialdata.py index 654a2908a..77844fcdb 100644 --- a/src/spatialdata/_core/spatialdata.py +++ b/src/spatialdata/_core/spatialdata.py @@ -1179,7 +1179,7 @@ def write( overwrite: bool = False, consolidate_metadata: bool = True, format: SpatialDataFormat | list[SpatialDataFormat] | None = None, - shapes_geometry_encoding: "WKB" | "geoarrow" = "WKB", + shapes_geometry_encoding: Literal["WKB", "geoarrow"] = "WKB", ) -> None: """ Write the `SpatialData` object to a Zarr store. @@ -1243,7 +1243,7 @@ def _write_element( element_name: str, overwrite: bool, format: SpatialDataFormat | list[SpatialDataFormat] | None = None, - shapes_geometry_encoding: "WKB" | "geoarrow" = "WKB", + shapes_geometry_encoding: Literal["WKB", "geoarrow"] = "WKB", ) -> None: if not isinstance(zarr_container_path, Path): raise ValueError( From 76dd54e3960509c79787dd454f1392ecc35469cd Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Fri, 18 Jul 2025 14:42:05 -0400 Subject: [PATCH 4/5] Update io_shapes.py --- src/spatialdata/_io/io_shapes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spatialdata/_io/io_shapes.py b/src/spatialdata/_io/io_shapes.py index 93dec6c79..2cdae06bc 100644 --- a/src/spatialdata/_io/io_shapes.py +++ b/src/spatialdata/_io/io_shapes.py @@ -68,7 +68,7 @@ def write_shapes( name: str, group_type: str = "ngff:shapes", format: Format = CurrentShapesFormat(), - geometry_encoding: "WKB" | "geoarrow" = "WKB", + geometry_encoding: Literal["WKB", "geoarrow"] = "WKB", ) -> None: import numcodecs From 8680540cfecd2913f760ab0b520e576fa688646c Mon Sep 17 00:00:00 2001 From: Mark Keller <7525285+keller-mark@users.noreply.github.com> Date: Fri, 18 Jul 2025 14:43:55 -0400 Subject: [PATCH 5/5] Update io_shapes.py --- src/spatialdata/_io/io_shapes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/spatialdata/_io/io_shapes.py b/src/spatialdata/_io/io_shapes.py index 2cdae06bc..fc57b436c 100644 --- a/src/spatialdata/_io/io_shapes.py +++ b/src/spatialdata/_io/io_shapes.py @@ -1,5 +1,6 @@ from collections.abc import MutableMapping from pathlib import Path +from typing import Literal import numpy as np import zarr