Python tools for geographic data
A small bug fix release fixing a regression caused by 1.0.0.
Bug fixes:
Full Changelog: https://github.com/geopandas/geopandas/compare/v1.0.0...v1.0.1
Notes on dependencies:
New methods:
count_geometries
method from shapely to GeoSeries/GeoDataframe (#3154).count_interior_rings
method from shapely to GeoSeries/GeoDataframe (#3154)relate_pattern
method from shapely to GeoSeries/GeoDataframe (#3211).intersection_all
method from shapely to GeoSeries/GeoDataframe (#3228).line_merge
method from shapely to GeoSeries/GeoDataframe (#3214).set_precision
and get_precision
methods from shapely to GeoSeries/GeoDataframe (#3175).count_coordinates
method from shapely to GeoSeries/GeoDataframe (#3026).minimum_clearance
method from shapely to GeoSeries/GeoDataframe (#2989).shared_paths
method from shapely to GeoSeries/GeoDataframe (#3215).is_ccw
method from shapely to GeoSeries/GeoDataframe (#3027).is_closed
attribute from shapely to GeoSeries/GeoDataframe (#3092).force_2d
and force_3d
methods from shapely to GeoSeries/GeoDataframe (#3090).voronoi_polygons
method from shapely to GeoSeries/GeoDataframe (#3177).contains_properly
method from shapely to GeoSeries/GeoDataframe (#3105).build_area
method exposing build_area
shapely to GeoSeries/GeoDataframe (#3202).snap
method from shapely to GeoSeries/GeoDataframe (#3086).transform
method from shapely to GeoSeries/GeoDataFrame (#3075).get_geometry
method from shapely to GeoSeries/GeoDataframe (#3287).dwithin
method to check for a "distance within" predicate on
GeoSeries/GeoDataFrame (#3153).to_geo_dict
method to generate GeoJSON-like dictionary from a GeoDataFrame (#3132).polygonize
method exposing both polygonize
and polygonize_full
from
shapely to GeoSeries/GeoDataframe (#2963).is_valid_reason
method from shapely to GeoSeries/GeoDataframe (#3176).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:
predicate="dwithin"
option and distance
argument to the sindex.query()
method
and sjoin
(#2882).__repr__
now trims trailing zeros for a more readable
output (#3087).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)."geometry"
as dtype
to pd.read_csv
will now return a GeoSeries for
the specified columns (#3101).read_file
for the mask
keyword for the pyogrio engine (#3062).read_file
for the columns
keyword for the fiona engine (#3133).to_parquet
and read_parquet
for writing and reading files
using the GeoArrow-based native geometry encoding of GeoParquet 1.1 (#3253, #3275).sort
keyword to clip
method for GeoSeries and GeoDataFrame to allow optional
preservation of the original order of observations (#3233).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).GeoSeries.fillna
method now supports the limit
keyword (#3290).on_attribute
option argument to the sjoin()
method, allowing to restrict joins to the observations with
matching attributes. (#3231)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).autolim
keyword argument to GeoSeries.plot()
and GeoDataFrame.plot()
(#2817).metadata
parameter to GeoDataFrame.to_file
(#2850)geometry
argument to the GeoDataFrame constructor will not use the name but will alwaysread_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:
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).explode(.., index_parts=True)
is now
set to false for consistency with pandas (#3174).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)read_file
now returns a Pandas DataFrame instead of a GeoDataFrame with an empty
geometry
column.Enforced deprecations:
geopandas.datasets
has been enforced and the module has been
removed. New sample datasets are now available in the
geodatasets package (#3084).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.GeometryArray.data
property, np.asarray(..)
or the to_numpy()
method should be used instead.sindex.query_bulk
method, using sindex.query
instead.sjoin
parameter op
, predicate
should be supplied instead.__xor__
, __or__
, __and__
and
__sub__
. Instead use methods symmetric_difference
, union
, intersection
and
difference
respectively.plot_polygon_collection
,
plot_linestring_collection
and plot_point_collection
, use the GeoSeries/GeoDataFrame .plot
method directly instead..plot
parameters axes
and colormap
, instead use
ax
and cmap
respectively.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
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:
GeoDataFrame.merge()
incorrectly returning a DataFrame
instead of a
GeoDataFrame
when the suffixes
argument is applied to the active
geometry column (#2933).GeoDataFrame
constructor where if geometry
is given a named
GeoSeries
the name was not used as the active geometry column name (#3237).GeoSeries
constructor when passing a Series and specifying a crs
to not change the original input data (#2492).read_file
with the fiona engine (#3280). An analgous fix for pyogrio is included in
pyogrio 0.8.1.to_parquet
to write correct metadata in case of 3D geometries (#2824).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.
Full Changelog: https://github.com/geopandas/geopandas/compare/v0.14.0...v1.0.0
Notes on dependencies:
New methods:
count_geometries
method from shapely to GeoSeries/GeoDataframe (#3154).count_interior_rings
method from shapely to GeoSeries/GeoDataframe (#3154)relate_pattern
method from shapely to GeoSeries/GeoDataframe (#3211).intersection_all
method from shapely to GeoSeries/GeoDataframe (#3228).line_merge
method from shapely to GeoSeries/GeoDataframe (#3214).set_precision
and get_precision
methods from shapely to GeoSeries/GeoDataframe (#3175).count_coordinates
method from shapely to GeoSeries/GeoDataframe (#3026).minimum_clearance
method from shapely to GeoSeries/GeoDataframe (#2989).shared_paths
method from shapely to GeoSeries/GeoDataframe (#3215).is_ccw
method from shapely to GeoSeries/GeoDataframe (#3027).is_closed
attribute from shapely to GeoSeries/GeoDataframe (#3092).force_2d
and force_3d
methods from shapely to GeoSeries/GeoDataframe (#3090).voronoi_polygons
method from shapely to GeoSeries/GeoDataframe (#3177).contains_properly
method from shapely to GeoSeries/GeoDataframe (#3105).build_area
method exposing build_area
shapely to GeoSeries/GeoDataframe (#3202).snap
method from shapely to GeoSeries/GeoDataframe (#3086).transform
method from shapely to GeoSeries/GeoDataFrame (#3075).get_geometry
method from shapely to GeoSeries/GeoDataframe (#3287).dwithin
method to check for a "distance within" predicate on
GeoSeries/GeoDataFrame (#3153).to_geo_dict
method to generate GeoJSON-like dictionary from a GeoDataFrame (#3132).polygonize
method exposing both polygonize
and polygonize_full
from
shapely to GeoSeries/GeoDataframe (#2963).is_valid_reason
method from shapely to GeoSeries/GeoDataframe (#3176).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:
predicate="dwithin"
option and distance
argument to the sindex.query()
method
and sjoin
(#2882).__repr__
now trims trailing zeros for a more readable
output (#3087).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)."geometry"
as dtype
to pd.read_csv
will now return a GeoSeries for
the specified columns (#3101).read_file
for the mask
keyword for the pyogrio engine (#3062).read_file
for the columns
keyword for the fiona engine (#3133).to_parquet
and read_parquet
for writing and reading files
using the GeoArrow-based native geometry encoding of GeoParquet 1.1 (#3253, #3275).sort
keyword to clip
method for GeoSeries and GeoDataFrame to allow optional
preservation of the original order of observations (#3233).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).GeoSeries.fillna
method now supports the limit
keyword (#3290).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).autolim
keyword argument to GeoSeries.plot()
and GeoDataFrame.plot()
(#2817).geometry
argument to the GeoDataFrame constructor will not use the name but will alwaysread_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:
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).explode(.., index_parts=True)
is now
set to false for consistency with pandas (#3174).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)read_file
now returns a Pandas DataFrame instead of a GeoDataFrame with an empty
geometry
column.Enforced deprecations:
geopandas.datasets
has been enforced and the module has been
removed. New sample datasets are now available in the
geodatasets package (#3084).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.GeometryArray.data
property, np.asarray(..)
or the to_numpy()
method should be used instead.sindex.query_bulk
method, using sindex.query
instead.sjoin
parameter op
, predicate
should be supplied instead.__xor__
, __or__
, __and__
and
__sub__
. Instead use methods symmetric_difference
, union
, intersection
and
difference
respectively.plot_polygon_collection
,
plot_linestring_collection
and plot_point_collection
, use the GeoSeries/GeoDataFrame .plot
method directly instead..plot
parameters axes
and colormap
, instead use
ax
and cmap
respectively.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
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:
GeoDataFrame.merge()
incorrectly returning a DataFrame
instead of a
GeoDataFrame
when the suffixes
argument is applied to the active
geometry column (#2933).GeoDataFrame
constructor where if geometry
is given a named
GeoSeries
the name was not used as the active geometry column name (#3237).GeoSeries
constructor when passing a Series and specifying a crs
to not change the original input data (#2492).read_file
with the fiona engine (#3280). An analgous fix for pyogrio is included in
pyogrio 0.8.1.to_parquet
to write correct metadata in case of 3D geometries (#2824).explore
(#3316).Small bug-fix release with several fixes for compatibility with the upcoming pandas 3.0, numpy 2.0 and fiona 1.10 releases.
Notes on dependencies:
API changes:
unary_union
is now deprecated and replaced by the union_all
method (#3007).align
keyword in binary methods now defaults to None
, treated as True. Explicit True
will silence the warning about mismachted indices. (#3212)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).New methods:
line_merge
method from shapely to GeoSeries/GeoDataframe (#3214).set_precision
and get_precision
methods from shapely to GeoSeries/GeoDataframe (#3175).count_coordinates
method from shapely to GeoSeries/GeoDataframe (#3026).minimum_clearance
method from shapely to GeoSeries/GeoDataframe (#2989).is_ccw
method from shapely to GeoSeries/GeoDataframe (#3027).is_closed
attribute from shapely to GeoSeries/GeoDataframe (#3092).force_2d
and force_3d
methods from shapely to GeoSeries/GeoDataframe (#3090).contains_properly
method from shapely to GeoSeries/GeoDataframe (#3105).snap
method from shapely to GeoSeries/GeoDataframe (#3086).transform
method from shapely to GeoSeries/GeoDataFrame (#3075).dwithin
method to check for a "distance within" predicate on
GeoSeries/GeoDataFrame (#3153).to_geo_dict
method to generate GeoJSON-like dictionary from a GeoDataFrame (#3132).New features and improvements:
predicate="dwithin"
option and distance
argument to the sindex.query()
method
and sjoin
(#2882).__repr__
now trims trailing zeros for a more readable
output (#3087).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)."geometry"
as dtype
to pd.read_csv
will now return a GeoSeries for
the specified columns (#3101).read_file
for the mask
keyword for the pyogrio engine (#3062).read_file
for the columns
keyword for the fiona engine (#3133).show_bbox
, drop_id
and to_wgs84
arguments to allow further customization of
GeoSeries.to_json
(#3226)Backwards incompatible API changes:
explode(.., index_parts=True)
is now
set to false for consistency with pandas (#3174).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).Potentially breaking changes:
read_file
now returns a Pandas DataFrame instead of a GeoDataFrame with an empty
geometry
column.Bug fixes:
GeoDataFrame.merge()
incorrectly returning a DataFrame
instead of a
GeoDataFrame
when the suffixes
argument is applied to the active
geometry column (#2933).GeoDataFrame
constructor where if geometry
is given a named
GeoSeries
the name was not used as the active geometry column name (#3237).Deprecations and compatibility notes:
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), (#3189)
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.GeometryArray.data
property, np.asarray(..)
or the to_numpy()
method should be used instead.sindex.query_bulk
method, using sindex.query
instead.sjoin
parameter op
, predicate
should be supplied instead.__xor__
, __or__
, __and__
and
__sub__
. Instead use methods symmetric_difference
, union
, intersection
and
difference
respectively.plot_polygon_collection
,
plot_linestring_collection
and plot_point_collection
, use the GeoSeries/GeoDataFrame .plot
method directly instead..plot
parameters axes
and colormap
, instead use
ax
and cmap
respectively.Fixes for compatibility with psycopg (#3167).
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
geo_col_name = gdf.active_geometry_name
gdf.set_geometry(new_geo_col).drop(columns=geo_col_name).rename_geometry(geo_col_name)
Small bug-fix release:
pandas.concat
CRS consistency checking where CRS differing by WKT whitespace only were treated as incompatible (#3023).Small bug-fix release:
overlay
where using buffer(0)
instead of make_valid
internally produced invalid results (#3074).explore()
method when the active geometry contains missing and empty geometries (#3094).Small bug-fix release updating the GeoParquet spec version and with a critical security fix:
read_parquet
and read_feather
for CVE-2023-47248 (#3070).GeoPandas will use Shapely 2.0 by default instead of PyGEOS when both Shapely >= 2.0 and PyGEOS are installed. PyGEOS will continue to be used by default when PyGEOS is installed alongside Shapely < 2.0. Support for PyGEOS and Shapely < 2.0 will be removed in GeoPandas 1.0. (#2999)
API changes:
seed
keyword in sample_points
is deprecated. Use rng
instead. (#2913).New methods:
concave_hull
method from shapely to GeoSeries/GeoDataframe (#2903).delaunay_triangles
method from shapely to GeoSeries/GeoDataframe (#2907).extract_unique_points
method from shapely to GeoSeries/GeoDataframe (#2915).frechet_distance()
method from shapely to GeoSeries/GeoDataframe (#2929).hausdorff_distance
method from shapely to GeoSeries/GeoDataframe (#2909).minimum_rotated_rectangle
method from shapely to GeoSeries/GeoDataframe (#2541).offset_curve
method from shapely to GeoSeries/GeoDataframe (#2902).remove_repeated_points
method from shapely to GeoSeries/GeoDataframe (#2940).reverse
method from shapely to GeoSeries/GeoDataframe (#2988).segmentize
method from shapely to GeoSeries/GeoDataFrame (#2910).shortest_line
method from shapely to GeoSeries/GeoDataframe (#2960).New features and improvements:
exclusive
parameter to sjoin_nearest
method for Shapely >= 2.0 (#2877)to_file()
method will now automatically detect the FlatGeoBuf driver
for files with the .fgb
extension (#2958)Bug fixes:
"crs"
(#2944)explore
when using UserDefined
bins (#2923)apply
with axis=1
where the given user defined function returns nested
data in the geometry column (#2959)np.int32
and pd.Int32Dtype
columns (#2950)assert_geodataframe_equal
now handles GeoDataFrames with no active geometry (#2498)Notes on (optional) dependencies:
Deprecations and compatibility notes:
geom_almost_equals()
methods have been deprecated and
geom_equals_exact()
should be used instead (#2604).Acknowledgments
Thanks to everyone who contributed to this release! A total of 16 people contributed patches to this release. People with a "+" by their names contributed for the first time.
Full Changelog: https://github.com/geopandas/geopandas/compare/v0.13.2...v0.14.0
Small bug-fix release with this critical fix:
file://..
) using geopandas.read_file
(#2948).