From d77f2c35399f74254bef118511eedc5f6dc9bdb5 Mon Sep 17 00:00:00 2001 From: Baris Oztas Date: Wed, 19 Nov 2025 00:29:06 +0100 Subject: [PATCH 1/6] update precommit hooks --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 526bd79..367ebe7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ files: 'xvec\/' repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.2 + rev: v0.14.5 hooks: - id: ruff - id: ruff-format From e00fb52a6816aa77466d104dcf73ef124f424142 Mon Sep 17 00:00:00 2001 From: Baris Oztas Date: Wed, 19 Nov 2025 00:29:47 +0100 Subject: [PATCH 2/6] fix single custom geometry plotting test --- xvec/tests/test_plotting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xvec/tests/test_plotting.py b/xvec/tests/test_plotting.py index 04cb74b..9ea8988 100644 --- a/xvec/tests/test_plotting.py +++ b/xvec/tests/test_plotting.py @@ -201,7 +201,7 @@ def test_single_custom_geometry(glaciers): glaciers = glaciers.xvec.summarize_geometry( dim="name", geom_array="geometry", aggfunc="concave_hull", ratio=0.25 ) - f, ax = glaciers["length"].sum("year").xvec.plot(geometry="summary_geometry") + f, ax = glaciers[["length"]].sum("year").xvec.plot(geometry="summary_geometry") assert ax.get_xlabel() == "Easting\n[metre]" assert ax.get_ylabel() == "Northing\n[metre]" From eb8104c79d1e8c0b0bda48720114f8765407e4a0 Mon Sep 17 00:00:00 2001 From: Baris Oztas Date: Wed, 19 Nov 2025 22:24:42 +0100 Subject: [PATCH 3/6] create geometry column manually --- xvec/accessor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xvec/accessor.py b/xvec/accessor.py index 65d859c..c305627 100644 --- a/xvec/accessor.py +++ b/xvec/accessor.py @@ -956,6 +956,7 @@ def to_geodataframe( return df.set_geometry(geometry, crs=self._obj.proj.crs) # coordinate geometry + df[geometry] = self._obj[geometry].values return df.set_geometry( geometry, crs=self._obj[geometry].attrs.get("crs", None) ) # type: ignore From 234e504d277b185b6475f42bd86a56378d04190d Mon Sep 17 00:00:00 2001 From: Baris Oztas Date: Wed, 19 Nov 2025 22:25:04 +0100 Subject: [PATCH 4/6] reroll changes in the test --- xvec/tests/test_plotting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xvec/tests/test_plotting.py b/xvec/tests/test_plotting.py index 9ea8988..04cb74b 100644 --- a/xvec/tests/test_plotting.py +++ b/xvec/tests/test_plotting.py @@ -201,7 +201,7 @@ def test_single_custom_geometry(glaciers): glaciers = glaciers.xvec.summarize_geometry( dim="name", geom_array="geometry", aggfunc="concave_hull", ratio=0.25 ) - f, ax = glaciers[["length"]].sum("year").xvec.plot(geometry="summary_geometry") + f, ax = glaciers["length"].sum("year").xvec.plot(geometry="summary_geometry") assert ax.get_xlabel() == "Easting\n[metre]" assert ax.get_ylabel() == "Northing\n[metre]" From 36341f7cfa0c6f89e4ee6c32076052648a4648cd Mon Sep 17 00:00:00 2001 From: Baris Oztas Date: Wed, 19 Nov 2025 22:49:49 +0100 Subject: [PATCH 5/6] only when index and geom len matches --- xvec/accessor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xvec/accessor.py b/xvec/accessor.py index c305627..84d3f51 100644 --- a/xvec/accessor.py +++ b/xvec/accessor.py @@ -956,7 +956,8 @@ def to_geodataframe( return df.set_geometry(geometry, crs=self._obj.proj.crs) # coordinate geometry - df[geometry] = self._obj[geometry].values + if len(df.index) == len(self._obj[geometry].values): + df[geometry] = self._obj[geometry].values return df.set_geometry( geometry, crs=self._obj[geometry].attrs.get("crs", None) ) # type: ignore From 122f6d4ca65eb40dee269636cb26414772f889cd Mon Sep 17 00:00:00 2001 From: Baris Oztas Date: Thu, 20 Nov 2025 17:31:42 +0100 Subject: [PATCH 6/6] add upstream issue to the workaround --- xvec/accessor.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xvec/accessor.py b/xvec/accessor.py index 84d3f51..06c0a80 100644 --- a/xvec/accessor.py +++ b/xvec/accessor.py @@ -956,8 +956,12 @@ def to_geodataframe( return df.set_geometry(geometry, crs=self._obj.proj.crs) # coordinate geometry + # Workaround for xarray 2025.10.1 bug where coordinates with names + # different from dimension names are not included in to_dataframe() + # See: https://github.com/pydata/xarray/issues/9903 if len(df.index) == len(self._obj[geometry].values): df[geometry] = self._obj[geometry].values + return df.set_geometry( geometry, crs=self._obj[geometry].attrs.get("crs", None) ) # type: ignore