From 2a7cf385c4623fcd5d41194bb6f9dd62800c0534 Mon Sep 17 00:00:00 2001 From: Deepak Cherian Date: Tue, 2 Jul 2024 09:46:42 -0600 Subject: [PATCH] Don't set crs attribute --- xvec/accessor.py | 27 ++++++++++++++------------- xvec/tests/conftest.py | 8 -------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/xvec/accessor.py b/xvec/accessor.py index 128a4b0..00a1bec 100644 --- a/xvec/accessor.py +++ b/xvec/accessor.py @@ -377,8 +377,6 @@ def to_crs( _obj = _obj.drop_indexes(variable_crs_solved.keys()) for key, crs in variable_crs_solved.items(): - if crs: - _obj[key].attrs["crs"] = CRS.from_user_input(crs) _obj = _obj.set_xindex([key], GeometryIndex, crs=crs) return _obj @@ -507,8 +505,6 @@ def set_crs( _obj = _obj.drop_indexes(variable_crs_solved.keys()) for key, crs in variable_crs_solved.items(): - if crs: - _obj[key].attrs["crs"] = CRS.from_user_input(crs) _obj = _obj.set_xindex([key], GeometryIndex, crs=crs) return _obj @@ -698,12 +694,19 @@ def set_geom_indexes( _obj = _obj.drop_indexes(coord_names) for coord in coord_names: - if crs: - _obj[coord].attrs["crs"] = CRS.from_user_input(crs) _obj = _obj.set_xindex(coord, GeometryIndex, crs=crs, **kwargs) return _obj + def _get_crs(self, name) -> CRS | None: + if name in self._geom_indexes: + crs = self._obj.xindexes[name].crs + elif name in self._geom_coords_all: + crs = self._obj[name].attrs.get("crs", None) + else: + crs = None + return crs + def to_geopandas(self) -> GeoDataFrame | pd.DataFrame: """Convert this array into a GeoPandas :class:`~geopandas.GeoDataFrame` @@ -777,13 +780,13 @@ def to_geopandas(self) -> GeoDataFrame | pd.DataFrame: # ensure CRS of all columns is preserved for c in gdf.columns: if c in self._geom_coords_all: - gdf[c] = gpd.GeoSeries(gdf[c], crs=self._obj[c].attrs.get("crs", None)) + gdf[c] = gpd.GeoSeries(gdf[c], crs=self._get_crs(c)) # if geometry is an index, reset and assign as active index_name = gdf.index.name - if index_name in self._geom_coords_all: + if index_name in self._geom_indexes: return gdf.reset_index().set_geometry( - index_name, crs=self._obj[index_name].attrs.get("crs", None) + index_name, crs=self._get_crs(index_name) ) # type: ignore warnings.warn( @@ -896,12 +899,10 @@ def to_geodataframe( # ensure CRS of all columns is preserved for c in df.columns: if c in self._geom_coords_all: - df[c] = gpd.GeoSeries(df[c], crs=self._obj[c].attrs.get("crs", None)) + df[c] = gpd.GeoSeries(df[c], crs=self._get_crs(c)) if geometry is not None: - return df.set_geometry( - geometry, crs=self._obj[geometry].attrs.get("crs", None) - ) # type: ignore + return df.set_geometry(geometry, crs=self._get_crs(geometry)) # type: ignore warnings.warn( "No active geometry column to be set. The resulting object " diff --git a/xvec/tests/conftest.py b/xvec/tests/conftest.py index 6b9dfd2..81f5aa0 100644 --- a/xvec/tests/conftest.py +++ b/xvec/tests/conftest.py @@ -36,7 +36,6 @@ def geom_dataset(geom_dataset_no_index): # a dataset with a geometry coordinate baked by a GeometryIndex crs = CRS.from_user_input(26915) ds = geom_dataset_no_index.copy() - ds["geom"].attrs["crs"] = crs return ds.set_xindex("geom", GeometryIndex, crs=crs) @@ -53,7 +52,6 @@ def first_geom_dataset(geom_dataset, geom_array): .drop_indexes("geom") .set_xindex("geom", GeometryIndex, crs=geom_dataset.xindexes["geom"].crs) ) - fg["geom"].attrs["crs"] = CRS.from_user_input(26915) return fg @@ -80,8 +78,6 @@ def multi_geom_dataset(geom_array, geom_array_z): .set_xindex("geom", GeometryIndex, crs=26915) .set_xindex("geom_z", GeometryIndex, crs=26915) ) - ds["geom"].attrs["crs"] = ds.xindexes["geom"].crs - ds["geom_z"].attrs["crs"] = ds.xindexes["geom_z"].crs return ds @@ -98,8 +94,6 @@ def multi_geom_multi_crs_dataset(geom_array, geom_array_z): .set_xindex("geom", GeometryIndex, crs=26915) .set_xindex("geom_z", GeometryIndex, crs="EPSG:4362") ) - ds["geom"].attrs["crs"] = ds.xindexes["geom"].crs - ds["geom_z"].attrs["crs"] = ds.xindexes["geom_z"].crs return ds @@ -117,8 +111,6 @@ def multi_geom_no_index_dataset(geom_array, geom_array_z): .set_xindex("geom", GeometryIndex, crs=26915) .set_xindex("geom_z", GeometryIndex, crs=26915) ) - ds["geom"].attrs["crs"] = ds.xindexes["geom"].crs - ds["geom_z"].attrs["crs"] = ds.xindexes["geom_z"].crs return ds