mirror of
https://github.com/wassname/geopandas.git
synced 2026-09-11 12:10:59 +08:00
BUG: avoid invalid bbox for empty GeoDataFrame in to_parquet (#2761)
This commit is contained in:
@@ -17,6 +17,8 @@ Bug fixes:
|
||||
- Ensure that GeoDataFrame created from DataFrame is a copy, not a view (#2667)
|
||||
- Fix mismatch between geometries and colors in ``plot()`` if an empty or missing
|
||||
geometry is present (#2224)
|
||||
- Fix `to_parquet`/`to_feather` to not write an invalid bbox (with NaNs) in the
|
||||
metadata in case of an empty GeoDataFrame (#2653)
|
||||
|
||||
Notes on (optional) dependencies:
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ from packaging.version import Version
|
||||
import json
|
||||
import warnings
|
||||
|
||||
import numpy as np
|
||||
from pandas import DataFrame, Series
|
||||
|
||||
from geopandas._compat import import_optional_dependency
|
||||
@@ -108,9 +109,13 @@ def _create_metadata(df, schema_version=None):
|
||||
"geometry_type": geometry_types[0]
|
||||
if len(geometry_types) == 1
|
||||
else geometry_types,
|
||||
"bbox": series.total_bounds.tolist(),
|
||||
}
|
||||
|
||||
bbox = series.total_bounds.tolist()
|
||||
if np.isfinite(bbox).all():
|
||||
# don't add bbox with NaNs for empty / all-NA geometry column
|
||||
column_metadata[col]["bbox"] = bbox
|
||||
|
||||
return {
|
||||
"primary_column": df._geometry_column_name,
|
||||
"columns": column_metadata,
|
||||
|
||||
@@ -653,6 +653,20 @@ def test_write_read_feather_expand_user():
|
||||
os.remove(os.path.expanduser(test_file))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("geometry", [[], [None]])
|
||||
def test_write_empty_bbox(tmpdir, geometry):
|
||||
# empty dataframe or all missing geometries -> avoid bbox with NaNs
|
||||
gdf = geopandas.GeoDataFrame({"col": [1] * len(geometry)}, geometry=geometry)
|
||||
gdf.to_parquet(tmpdir / "test.parquet")
|
||||
|
||||
from pyarrow.parquet import read_table
|
||||
|
||||
table = read_table(tmpdir / "test.parquet")
|
||||
metadata = json.loads(table.schema.metadata[b"geo"])
|
||||
assert "encoding" in metadata["columns"]["geometry"]
|
||||
assert "bbox" not in metadata["columns"]["geometry"]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("format", ["feather", "parquet"])
|
||||
def test_write_read_default_crs(tmpdir, format):
|
||||
if format == "feather":
|
||||
|
||||
Reference in New Issue
Block a user