Notes on dependencies:
- GeoPandas 1.0 drops support for shapely<2 and PyGEOS. The only geometry engine that is
currently supported is shapely >= 2. As a consequence, spatial indexing based on the
rtree package has also been removed (3035).
- The I/O engine now defaults to Pyogrio which is now installed with GeoPandas instead
of Fiona (3223).
New methods:
- Added `count_geometries` method from shapely to GeoSeries/GeoDataframe (3154).
- Added `count_interior_rings` method from shapely to GeoSeries/GeoDataframe (3154)
- Added `relate_pattern` method from shapely to GeoSeries/GeoDataframe (3211).
- Added `intersection_all` method from shapely to GeoSeries/GeoDataframe (3228).
- Added `line_merge` method from shapely to GeoSeries/GeoDataframe (3214).
- Added `set_precision` and `get_precision` methods from shapely to GeoSeries/GeoDataframe (3175).
- Added `count_coordinates` method from shapely to GeoSeries/GeoDataframe (3026).
- Added `minimum_clearance` method from shapely to GeoSeries/GeoDataframe (2989).
- Added `shared_paths` method from shapely to GeoSeries/GeoDataframe (3215).
- Added `is_ccw` method from shapely to GeoSeries/GeoDataframe (3027).
- Added `is_closed` attribute from shapely to GeoSeries/GeoDataframe (3092).
- Added `force_2d` and `force_3d` methods from shapely to GeoSeries/GeoDataframe (3090).
- Added `voronoi_polygons` method from shapely to GeoSeries/GeoDataframe (3177).
- Added `contains_properly` method from shapely to GeoSeries/GeoDataframe (3105).
- Added `build_area` method exposing `build_area` shapely to GeoSeries/GeoDataframe (3202).
- Added `snap` method from shapely to GeoSeries/GeoDataframe (3086).
- Added `transform` method from shapely to GeoSeries/GeoDataFrame (3075).
- Added `get_geometry` method from shapely to GeoSeries/GeoDataframe (3287).
- Added `dwithin` method to check for a "distance within" predicate on
GeoSeries/GeoDataFrame (3153).
- Added `to_geo_dict` method to generate GeoJSON-like dictionary from a GeoDataFrame (3132).
- Added `polygonize` method exposing both `polygonize` and `polygonize_full` from
shapely to GeoSeries/GeoDataframe (2963).
- Added `is_valid_reason` method from shapely to GeoSeries/GeoDataframe (3176).
- Added `to_arrow` method and `from_arrow` class method to
GeoSeries/GeoDataFrame to export and import to/from Arrow data with GeoArrow
extension types (3219, 3301).
New features and improvements:
- Added ``predicate="dwithin"`` option and ``distance`` argument to the ``sindex.query()`` method
and ``sjoin`` (2882).
- GeoSeries and GeoDataFrame `__repr__` now trims trailing zeros for a more readable
output (3087).
- Add `on_invalid` parameter to `from_wkt` and `from_wkb` (3110).
- `make_valid` option in `overlay` now uses the `make_valid` method instead of
`buffer(0)` (3113).
- Passing `"geometry"` as `dtype` to `pd.read_csv` will now return a GeoSeries for
the specified columns (3101).
- Added support to ``read_file`` for the ``mask`` keyword for the pyogrio engine (3062).
- Added support to ``read_file`` for the ``columns`` keyword for the fiona engine (3133).
- Added support to ``to_parquet`` and ``read_parquet`` for writing and reading files
using the GeoArrow-based native geometry encoding of GeoParquet 1.1 (3253, 3275).
- Add `sort` keyword to `clip` method for GeoSeries and GeoDataFrame to allow optional
preservation of the original order of observations (3233).
- Added `show_bbox`, `drop_id` and `to_wgs84` arguments to allow further customization of
`GeoSeries.to_json` (3226).
- `explore` now supports `GeoDataFrame`s with additional columns containing datetimes, uuids and
other non JSON serializable objects (3261).
- The `GeoSeries.fillna` method now supports the `limit` keyword (3290).
- Added ``on_attribute`` option argument to the ``sjoin()``
method, allowing to restrict joins to the observations with
matching attributes. (3231)
- Added support for `bbox` covering encoding in geoparquet. Can filter reading of parquet
files based on a bounding box, and write out a bounding box column to parquet files (3282).
- `align` keyword in binary methods now defaults to `None`, treated as True. Explicit True
will silence the warning about mismatched indices (3212).
- `GeoSeries.set_crs` can now be used to remove CRS information by passing
`crs=None, allow_override=True` (3316).
- Added ``autolim`` keyword argument to ``GeoSeries.plot()`` and ``GeoDataFrame.plot()`` (2817).
- Added `metadata` parameter to `GeoDataFrame.to_file` (2850)
- Updated documentation to clarify that passing a named (Geo)Series as the `geometry`
argument to the GeoDataFrame constructor will not use the name but will always
produce a GeoDataFrame with an active geometry column named "geometry" (3337).
- `read_postgis` will query the spatial_ref_sys table to determine the CRS authority
instead of its current behaviour of assuming EPSG. In the event the spiatal_ref_sys
table is not present, or the SRID is not present, `read_postgis` will fallback
on assuming EPSG CRS authority. (3329)
Backwards incompatible API changes:
- The `sjoin` method will now preserve the name of the index of the right
GeoDataFrame, if it has one, instead of always using `"index_right"` as the
name for the resulting column in the return value (846, 2144).
- GeoPandas now raises a ValueError when an unaligned Series is passed as a method
argument to avoid confusion of whether the automatic alignment happens or not (3271).
- The deprecated default value of GeoDataFrame/ GeoSeries `explode(.., index_parts=True)` is now
set to false for consistency with pandas (3174).
- The behaviour of `set_geometry` has been changed when passed a (Geo)Series `ser` with a name.
The new active geometry column name in this case will be `ser.name`, if not None, rather than
the previous active geometry column name. This means that if the new and old names are
different, then both columns will be preserved in the GeoDataFrame. To replicate the previous
behaviour, you can instead call `gdf.set_geometry(ser.rename(gdf.active_geometry_name))` (3237).
Note that this behaviour change does not affect the `GeoDataframe` constructor, passing a named
GeoSeries `ser` to `GeoDataFrame(df, geometry=ser)` will always produce a GeoDataFrame with a
geometry column named "geometry" to preserve backwards compatibility. If you would like to
instead propagate the name of `ser` when constructing a GeoDataFrame, you can instead call
`df.set_geometry(ser)` or `GeoDataFrame(df, geometry=ser).rename_geometry(ser.name)` (3337).
- `delaunay_triangles` now considers all geometries together when creating the Delaunay triangulation
instead of performing the operation element-wise. If you want to generate Delaunay
triangles for each geometry separately, use ``shapely.delaunay_triangles`` instead. (3273)
- Reading a data source that does not have a geometry field using ``read_file``
now returns a Pandas DataFrame instead of a GeoDataFrame with an empty
``geometry`` column.
Enforced deprecations:
- The deprecation of `geopandas.datasets` has been enforced and the module has been
removed. New sample datasets are now available in the
[geodatasets](https://geodatasets.readthedocs.io/en/latest/) package (#3084).
- Many longstanding deprecated functions, methods and properties have been removed (3174), (3190)
- Removed deprecated functions
`geopandas.io.read_file`, `geopandas.io.to_file` and `geopandas.io.sql.read_postgis`.
`geopandas.read_file`, `geopandas.read_postgis` and the GeoDataFrame/GeoSeries `to_file(..)`
method should be used instead.
- Removed deprecated `GeometryArray.data` property, `np.asarray(..)` or the `to_numpy()`
method should be used instead.
- Removed deprecated `sindex.query_bulk` method, using `sindex.query` instead.
- Removed deprecated `sjoin` parameter `op`, `predicate` should be supplied instead.
- Removed deprecated GeoSeries/ GeoDataFrame methods `__xor__`, `__or__`, `__and__` and
`__sub__`. Instead use methods `symmetric_difference`, `union`, `intersection` and
`difference` respectively.
- Removed deprecated plotting functions `plot_polygon_collection`,
`plot_linestring_collection` and `plot_point_collection`, use the GeoSeries/GeoDataFrame `.plot`
method directly instead.
- Removed deprecated GeoSeries/GeoDataFrame `.plot` parameters `axes` and `colormap`, instead use
`ax` and `cmap` respectively.
- Removed compatibility for specifying the `version` keyword in `to_parquet` and `to_feather`.
This keyword will now be passed through to pyarrow and use `schema_version` to specify the GeoParquet specification version (3334).
New deprecations:
- `unary_union` attribute is now deprecated and replaced by the `union_all()` method (3007) allowing
opting for a faster union algorithm for coverages (3151).
- The ``include_fields`` and ``ignore_fields`` keywords in ``read_file()`` are deprecated
for the default pyogrio engine. Currently those are translated to the ``columns`` keyword
for backwards compatibility, but you should directly use the ``columns`` keyword instead
to select which columns to read (3133).
- The `drop` keyword in `set_geometry` has been deprecated, and in future the `drop=True`
behaviour will be removed (3237). To prepare for this change, you should remove any explicit
`drop=False` calls in your code (the default behaviour already is the same as `drop=False`).
To replicate the previous `drop=True` behaviour you should replace
`gdf.set_geometry(new_geo_col, drop=True)` with
python
geo_col_name = gdf.active_geometry_name
gdf.set_geometry(new_geo_col).drop(columns=geo_col_name).rename_geometry(geo_col_name)
- The `geopandas.use_pygeos` option has been deprecated and will be removed in GeoPandas
1.1 (3283)
- Manual overriding of an existing CRS of a GeoSeries or GeoDataFrame by setting the `crs` property has been deprecated
and will be disabled in future. Use the `set_crs()` method instead (3085).
Bug fixes:
- Fix `GeoDataFrame.merge()` incorrectly returning a `DataFrame` instead of a
`GeoDataFrame` when the `suffixes` argument is applied to the active
geometry column (2933).
- Fix bug in `GeoDataFrame` constructor where if `geometry` is given a named
`GeoSeries` the name was not used as the active geometry column name (3237).
- Fix bug in `GeoSeries` constructor when passing a Series and specifying a `crs` to not change the original input data (2492).
- Fix regression preventing reading from file paths containing hashes in `read_file`
with the fiona engine (3280). An analgous fix for pyogrio is included in
pyogrio 0.8.1.
- Fix `to_parquet` to write correct metadata in case of 3D geometries (2824).
- Fixes for compatibility with psycopg (3167).
- Fix to allow appending dataframes with no CRS to PostGIS tables with no CRS (3328)
- Fix plotting of all-empty GeoSeries using `explore` (3316).