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
andget_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
andforce_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 exposingbuild_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 bothpolygonize
andpolygonize_full
from
shapely to GeoSeries/GeoDataframe (#2963). - Added
is_valid_reason
method from shapely to GeoSeries/GeoDataframe (#3176). - Added
to_arrow
method andfrom_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 anddistance
argument to thesindex.query()
method
andsjoin
(#2882). - GeoSeries and GeoDataFrame
__repr__
now trims trailing zeros for a more readable
output (#3087). - Add
on_invalid
parameter tofrom_wkt
andfrom_wkb
(#3110). make_valid
option inoverlay
now uses themake_valid
method instead of
buffer(0)
(#3113).- Passing
"geometry"
asdtype
topd.read_csv
will now return a GeoSeries for
the specified columns (#3101). - Added support to
read_file
for themask
keyword for the pyogrio engine (#3062). - Added support to
read_file
for thecolumns
keyword for the fiona engine (#3133). - Added support to
to_parquet
andread_parquet
for writing and reading files
using the GeoArrow-based native geometry encoding of GeoParquet 1.1 (#3253, #3275). - Add
sort
keyword toclip
method for GeoSeries and GeoDataFrame to allow optional
preservation of the original order of observations (#3233). - Added
show_bbox
,drop_id
andto_wgs84
arguments to allow further customization of
GeoSeries.to_json
(#3226). explore
now supportsGeoDataFrame
s with additional columns containing datetimes, uuids and
other non JSON serializable objects (#3261).- The
GeoSeries.fillna
method now supports thelimit
keyword (#3290). - Added
on_attribute
option argument to thesjoin()
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 toNone
, 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 toGeoSeries.plot()
andGeoDataFrame.plot()
(#2817). - Added
metadata
parameter toGeoDataFrame.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)Seriesser
with a name.
The new active geometry column name in this case will beser.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 callgdf.set_geometry(ser.rename(gdf.active_geometry_name))
(#3237).
Note that this behaviour change does not affect theGeoDataframe
constructor, passing a named
GeoSeriesser
toGeoDataFrame(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 ofser
when constructing a GeoDataFrame, you can instead call
df.set_geometry(ser)
orGeoDataFrame(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, useshapely.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 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
andgeopandas.io.sql.read_postgis
.
geopandas.read_file
,geopandas.read_postgis
and the GeoDataFrame/GeoSeriesto_file(..)
method should be used instead. - Removed deprecated
GeometryArray.data
property,np.asarray(..)
or theto_numpy()
method should be used instead. - Removed deprecated
sindex.query_bulk
method, usingsindex.query
instead. - Removed deprecated
sjoin
parameterop
,predicate
should be supplied instead. - Removed deprecated GeoSeries/ GeoDataFrame methods
__xor__
,__or__
,__and__
and
__sub__
. Instead use methodssymmetric_difference
,union
,intersection
and
difference
respectively. - Removed deprecated plotting functions
plot_polygon_collection
,
plot_linestring_collection
andplot_point_collection
, use the GeoSeries/GeoDataFrame.plot
method directly instead. - Removed deprecated GeoSeries/GeoDataFrame
.plot
parametersaxes
andcolormap
, instead use
ax
andcmap
respectively. - Removed compatibility for specifying the
version
keyword into_parquet
andto_feather
.
This keyword will now be passed through to pyarrow and useschema_version
to specify the GeoParquet specification version (#3334).
- Removed deprecated functions
New deprecations:
-
unary_union
attribute is now deprecated and replaced by theunion_all()
method (#3007) allowing
opting for a faster union algorithm for coverages (#3151). -
The
include_fields
andignore_fields
keywords inread_file()
are deprecated
for the default pyogrio engine. Currently those are translated to thecolumns
keyword
for backwards compatibility, but you should directly use thecolumns
keyword instead
to select which columns to read (#3133). -
The
drop
keyword inset_geometry
has been deprecated, and in future thedrop=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 asdrop=False
).
To replicate the previousdrop=True
behaviour you should replace
gdf.set_geometry(new_geo_col, drop=True)
withgeo_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 theset_crs()
method instead (#3085).
Bug fixes:
- Fix
GeoDataFrame.merge()
incorrectly returning aDataFrame
instead of a
GeoDataFrame
when thesuffixes
argument is applied to the active
geometry column (#2933). - Fix bug in
GeoDataFrame
constructor where ifgeometry
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 acrs
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).
Acknowledgments
Thanks to everyone who contributed to this release!
A total of 30 people contributed patches to this release. People with a "+" by their names contributed for the first time.
- Alec Johnson +
- Bill Morris +
- Brendan Ward
- Brett Naul
- Christopher Hedemann
- Daniel Jahn (dahn) +
- Hofer-Julian +
- James McBride
- John Moutafis +
- Joris Van den Bossche
- Julien Seguinot +
- Kaushik
- Kyle Barron
- Martin Fleischmann
- Matt Richards
- Nicholas YS Tan +
- Nikolas Ovaskainen +
- NoharaMasato
- Paddy Mullen +
- Pieter Roggemans
- Rambaud Pierrick
- Raphael Quast +
- Ray Bell
- Robin Wilson +
- Sean Gillies
- Sebastian Zasadny +
- Trinh Quoc Anh +
- Will Schlitzer
- aspyk +
- dependabot[bot]
Full Changelog: v0.14.0...v1.0.0