From f0c36fe24f64724f5dedcbec281b36c23f28be95 Mon Sep 17 00:00:00 2001 From: Matt Richards <45483497+m-richards@users.noreply.github.com> Date: Tue, 21 Jun 2022 00:38:54 +1000 Subject: [PATCH] RLS: 0.11 release notes (#2462) * DOC: draft 0.11 release notes * finish all commit * code review suggestions Co-Authored-By: rraymondgh <42769112+rraymondgh@users.noreply.github.com> * reword geodataframe downcasting changes * cln * review, formatting, cleanup * Apply suggestions from code review Co-authored-by: rraymondgh <42769112+rraymondgh@users.noreply.github.com> Co-authored-by: Martin Fleischmann Co-authored-by: Joris Van den Bossche --- CHANGELOG.md | 595 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 353 insertions(+), 242 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7322a2..7a7df35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,24 +1,139 @@ Changelog ========= +Version 0.11 (June 20, 2022) +---------------------------- + +Highlights of this release: + +- GeoParquet support updated to implement + [v0.4.0](https://github.com/opengeospatial/geoparquet/releases/tag/v0.4.0) of the + OpenGeospatial/GeoParquet specification (#2441). Backwards compatibility with v0.1.0 of + the metadata spec (implemented in the previous releases of GeoPandas) is guaranteed, + and reading and writing Parquet and Feather files will no longer produce a ``UserWarning`` + (#2327). + +New features and improvements: + +- Improved handling of GeoDataFrame when the active geometry column is + lost from the GeoDataFrame. Previously, square bracket indexing ``gdf[[...]]`` returned + a GeoDataFrame when the active geometry column was retained and a DataFrame was + returned otherwise. Other pandas indexing methods (``loc``, ``iloc``, etc) did not follow + the same rules. The new behaviour for all indexing/reshaping operations is now as + follows (#2329, #2060): + - If operations produce a ``DataFrame`` containing the active geometry column, a + GeoDataFrame is returned + - If operations produce a ``DataFrame`` containing ``GeometryDtype`` columns, but not the + active geometry column, a ``GeoDataFrame`` is returned, where the active geometry + column is set to ``None`` (set the new geometry column with ``set_geometry()``) + - If operations produce a ``DataFrame`` containing no ``GeometryDtype`` columns, a + ``DataFrame`` is returned (this can be upcast again by calling ``set_geometry()`` or the + ``GeoDataFrame`` constructor) + - If operations produce a ``Series`` of ``GeometryDtype``, a ``GeoSeries`` is returned, + otherwise ``Series`` is returned. + - Error messages for having an invalid geometry column + have been improved, indicating the name of the last valid active geometry column set + and whether other geometry columns can be promoted to the active geometry column + (#2329). + +- Datetime fields are now read and written correctly for GIS formats which support them + (e.g. GPKG, GeoJSON) with fiona 1.8.14 or higher. Previously, datetimes were read as + strings (#2202). +- ``folium.Map`` keyword arguments can now be specified as the ``map_kwds`` argument to + ``GeoDataFrame.explore()`` method (#2315). +- Add a new parameter ``style_function`` to ``GeoDataFrame.explore()`` to enable plot styling + based on GeoJSON properties (#2377). +- It is now possible to write an empty ``GeoDataFrame`` to a file for supported formats + (#2240). Attempting to do so will now emit a ``UserWarning`` instead of a ``ValueError``. +- Fast rectangle clipping has been exposed as ``GeoSeries/GeoDataFrame.clip_by_rect()`` + (#1928). +- The ``mask`` parameter of ``GeoSeries/GeoDataFrame.clip()`` now accepts a rectangular mask + as a list-like to perform fast rectangle clipping using the new + ``GeoSeries/GeoDataFrame.clip_by_rect()`` (#2414). +- Bundled demo dataset ``naturalearth_lowres`` has been updated to version 5.0.1 of the + source, with field ``ISO_A3`` manually corrected for some cases (#2418). + +Deprecations and compatibility notes: + +- The active development branch of geopandas on GitHub has been renamed from master to + main (#2277). +- Deprecated methods ``GeometryArray.equals_exact()`` and ``GeometryArray.almost_equals()`` + have been removed. They should + be replaced with ``GeometryArray.geom_equals_exact()`` and + ``GeometryArray.geom_almost_equals()`` respectively (#2267). +- Deprecated CRS functions ``explicit_crs_from_epsg()``, ``epsg_from_crs()`` and + ``get_epsg_file_contents()`` were removed (#2340). +- Warning about the behaviour change to ``GeoSeries.isna()`` with empty + geometries present has been removed (#2349). +- Specifying a CRS in the ``GeoDataFrame/GeoSeries`` constructor which contradicted the + underlying ``GeometryArray`` now raises a ``ValueError`` (#2100). +- Specifying a CRS in the ``GeoDataFrame`` constructor when no geometry column is provided + and calling ``GeoDataFrame. set_crs`` on a ``GeoDataFrame`` without an active geometry + column now raise a ``ValueError`` (#2100) +- Passing non-geometry data to the``GeoSeries`` constructor is now fully deprecated and + will raise a ``TypeError`` (#2314). Previously, a ``pandas.Series`` was returned for + non-geometry data. +- Deprecated ``GeoSeries/GeoDataFrame`` set operations ``__xor__()``, + ``__or__()``, ``__and__()`` and ``__sub__()``, ``geopandas.io.file.read_file``/``to_file`` and + ``geopandas.io.sql.read_postgis`` now emit ``FutureWarning`` instead of + ``DeprecationWarning`` and will be completely removed in a future release. +- Accessing the ``crs`` of a ``GeoDataFrame`` without active geometry column is deprecated and will be removed in GeoPandas 0.12 (#2373). + +Bug fixes: + +- ``GeoSeries.to_frame`` now creates a ``GeoDataFrame`` with the geometry column name set + correctly (#2296) +- Fix pickle files created with pygeos installed can not being readable when pygeos is + not installed (#2237). +- Fixed ``UnboundLocalError`` in ``GeoDataFrame.plot()`` using ``legend=True`` and + ``missing_kwds`` (#2281). +- Fix ``explode()`` incorrectly relating index to columns, including where the input index + is not unique (#2292) +- Fix ``GeoSeries.[xyz]`` raising an ``IndexError`` when the underlying GeoSeries contains + empty points (#2335). Rows corresponding to empty points now contain ``np.nan``. +- Fix ``GeoDataFrame.iloc`` raising a ``TypeError`` when indexing a ``GeoDataFrame`` with only + a single column of ``GeometryDtype`` (#1970). +- Fix ``GeoDataFrame.iterfeatures()`` not returning features with the same field order as + ``GeoDataFrame.columns`` (#2396). +- Fix ``GeoDataFrame.from_features()`` to support reading GeoJSON with null properties + (#2243). +- Fix ``GeoDataFrame.to_parquet()`` not intercepting ``engine`` keyword argument, breaking + consistency with pandas (#2227) +- Fix ``GeoDataFrame.explore()`` producing an error when ``column`` is of boolean dtype + (#2403). +- Fix an issue where ``GeoDataFrame.to_postgis()`` output the wrong SRID for ESRI + authority CRS (#2414). +- Fix ``GeoDataFrame.from_dict/from_features`` classmethods using ``GeoDataFrame`` rather + than ``cls`` as the constructor. +- Fix ``GeoDataFrame.plot()`` producing incorrect colors with mixed geometry types when + ``colors`` keyword is provided. (#2420) + +Notes on (optional) dependencies: + +- GeoPandas 0.11 drops support for Python 3.7 and pandas 0.25 (the minimum supported + pandas version is now 1.0.5). Further, the minimum required versions for the listed + dependencies have now changed to shapely 1.7, fiona 1.8.13.post1, pyproj 2.6.1.post1, + matplotlib 3.2, mapclassify 2.4.0 (#2358, #2391) + + Version 0.10.2 (October 16, 2021) --------------------------------- Small bug-fix release: -- Fix regression in `overlay()` in case no geometries are intersecting (but +- Fix regression in ``overlay()`` in case no geometries are intersecting (but have overlapping total bounds) (#2172). -- Fix regression in `overlay()` with `keep_geom_type=True` in case the +- Fix regression in ``overlay()`` with ``keep_geom_type=True`` in case the overlay of two geometries in a GeometryCollection with other geometry types (#2177). -- Fix `overlay()` to honor the `keep_geom_type` keyword for the - `op="differnce"` case (#2164). -- Fix regression in `plot()` with a mapclassify `scheme` in case the +- Fix ``overlay()`` to honor the ``keep_geom_type`` keyword for the + ``op="differnce"`` case (#2164). +- Fix regression in ``plot()`` with a mapclassify ``scheme`` in case the formatted legend labels have duplicates (#2166). -- Fix a bug in the `explore()` method ignoring the `vmin` and `vmax` keywords +- Fix a bug in the ``explore()`` method ignoring the ``vmin`` and ``vmax`` keywords in case they are set to 0 (#2175). -- Fix `unary_union` to correctly handle a GeoSeries with missing values (#2181). -- Avoid internal deprecation warning in `clip()` (#2179). +- Fix ``unary_union`` to correctly handle a GeoSeries with missing values (#2181). +- Avoid internal deprecation warning in ``clip()`` (#2179). Version 0.10.1 (October 8, 2021) @@ -26,8 +141,8 @@ Version 0.10.1 (October 8, 2021) Small bug-fix release: -- Fix regression in `overlay()` with non-overlapping geometries and a - non-default `how` (i.e. not "intersection") (#2157). +- Fix regression in ``overlay()`` with non-overlapping geometries and a + non-default ``how`` (i.e. not "intersection") (#2157). Version 0.10.0 (October 3, 2021) @@ -35,74 +150,74 @@ Version 0.10.0 (October 3, 2021) Highlights of this release: -- A new `sjoin_nearest()` method to join based on proximity, with the - ability to set a maximum search radius (#1865). In addition, the `sindex` +- A new ``sjoin_nearest()`` method to join based on proximity, with the + ability to set a maximum search radius (#1865). In addition, the ``sindex`` attribute gained a new method for a "nearest" spatial index query (#1865, #2053). -- A new `explore()` method on GeoDataFrame and GeoSeries with native support +- A new ``explore()`` method on GeoDataFrame and GeoSeries with native support for interactive visualization based on folium / leaflet.js (#1953) -- The `geopandas.sjoin()`/`overlay()`/`clip()` functions are now also +- The ``geopandas.sjoin()``/``overlay()``/``clip()`` functions are now also available as methods on the GeoDataFrame (#2141, #1984, #2150). New features and improvements: -- Add support for pandas' `value_counts()` method for geometry dtype (#2047). -- The `explode()` method has a new `ignore_index` keyword (consistent with +- Add support for pandas' ``value_counts()`` method for geometry dtype (#2047). +- The ``explode()`` method has a new ``ignore_index`` keyword (consistent with pandas' explode method) to reset the index in the result, and a new - `index_parts` keywords to control whether a cumulative count indexing the + ``index_parts`` keywords to control whether a cumulative count indexing the parts of the exploded multi-geometries should be added (#1871). -- `points_from_xy()` is now available as a GeoSeries method `from_xy` (#1936). -- The `to_file()` method will now attempt to detect the driver (if not +- ``points_from_xy()`` is now available as a GeoSeries method ``from_xy`` (#1936). +- The ``to_file()`` method will now attempt to detect the driver (if not specified) based on the extension of the provided filename, instead of defaulting to ESRI Shapefile (#1609). -- Support for the `storage_options` keyword in `read_parquet()` for +- Support for the ``storage_options`` keyword in ``read_parquet()`` for specifying filesystem-specific options (e.g. for S3) based on fsspec (#2107). -- The read/write functions now support `~` (user home directory) expansion (#1876). -- Support the `convert_dtypes()` method from pandas to preserve the +- The read/write functions now support ``~`` (user home directory) expansion (#1876). +- Support the ``convert_dtypes()`` method from pandas to preserve the GeoDataFrame class (#2115). -- Support WKB values in the hex format in `GeoSeries.from_wkb()` (#2106). -- Update the `estimate_utm_crs()` method to handle crossing the antimeridian +- Support WKB values in the hex format in ``GeoSeries.from_wkb()`` (#2106). +- Update the ``estimate_utm_crs()`` method to handle crossing the antimeridian with pyproj 3.1+ (#2049). - Improved heuristic to decide how many decimals to show in the repr based on whether the CRS is projected or geographic (#1895). -- Switched the default for `geocode()` from GeoCode.Farm to the Photon +- Switched the default for ``geocode()`` from GeoCode.Farm to the Photon geocoding API (https://photon.komoot.io) (#2007). Deprecations and compatibility notes: -- The `op=` keyword of `sjoin()` to indicate which spatial predicate to use - for joining is being deprecated and renamed in favor of a new `predicate=` +- The ``op=`` keyword of ``sjoin()`` to indicate which spatial predicate to use + for joining is being deprecated and renamed in favor of a new ``predicate=`` keyword (#1626). -- The `cascaded_union` attribute is deprecated, use `unary_union` instead (#2074). +- The ``cascaded_union`` attribute is deprecated, use ``unary_union`` instead (#2074). - Constructing a GeoDataFrame with a duplicated "geometry" column is now - disallowed. This can also raise an error in the `pd.concat(.., axis=1)` + disallowed. This can also raise an error in the ``pd.concat(.., axis=1)`` function if this results in duplicated active geometry columns (#2046). -- The `explode()` method currently returns a GeoSeries/GeoDataFrame with a +- The ``explode()`` method currently returns a GeoSeries/GeoDataFrame with a MultiIndex, with an additional level with indices of the parts of the exploded multi-geometries. For consistency with pandas, this will change in - the future and the new `index_parts` keyword is added to control this. + the future and the new ``index_parts`` keyword is added to control this. Bug fixes: -- Fix in the `clip()` function to correctly clip MultiPoints instead of +- Fix in the ``clip()`` function to correctly clip MultiPoints instead of leaving them intact when partly outside of the clip bounds (#2148). -- Fix `GeoSeries.isna()` to correctly return a boolean Series in case of an +- Fix ``GeoSeries.isna()`` to correctly return a boolean Series in case of an empty GeoSeries (#2073). - Fix the GeoDataFrame constructor to preserve the geometry name when the - argument is already a GeoDataFrame object (i.e. `GeoDataFrame(gdf)`) (#2138). + argument is already a GeoDataFrame object (i.e. ``GeoDataFrame(gdf)``) (#2138). - Fix loss of the values' CRS when setting those values as a column - (`GeoDataFrame.__setitem__`) (#1963) -- Fix in `GeoDataFrame.apply()` to preserve the active geometry column name + (``GeoDataFrame.__setitem__``) (#1963) +- Fix in ``GeoDataFrame.apply()`` to preserve the active geometry column name (#1955). -- Fix in `sjoin()` to not ignore the suffixes in case of a right-join - (`how="right`) (#2065). -- Fix `GeoDataFrame.explode()` with a MultiIndex (#1945). -- Fix the handling of missing values in `to/from_wkb` and `to_from_wkt` (#1891). -- Fix `to_file()` and `to_json()` when DataFrame has duplicate columns to +- Fix in ``sjoin()`` to not ignore the suffixes in case of a right-join + (``how="right``) (#2065). +- Fix ``GeoDataFrame.explode()`` with a MultiIndex (#1945). +- Fix the handling of missing values in ``to/from_wkb`` and ``to_from_wkt`` (#1891). +- Fix ``to_file()`` and ``to_json()`` when DataFrame has duplicate columns to raise an error (#1900). - Fix bug in the colors shown with user-defined classification scheme (#2019). -- Fix handling of the `path_effects` keyword in `plot()` (#2127). -- Fix `GeoDataFrame.explode()` to preserve `attrs` (#1935) +- Fix handling of the ``path_effects`` keyword in ``plot()`` (#2127). +- Fix ``GeoDataFrame.explode()`` to preserve ``attrs`` (#1935) Notes on (optional) dependencies: @@ -125,110 +240,110 @@ a new logo (#1564, #1579, #1617, #1668, #1731, #1750, #1757, #1759). New features and improvements: -- The `geopandas.read_file` function now accepts more general - file-like objects (e.g. `fsspec` open file objects). It will now also +- The ``geopandas.read_file`` function now accepts more general + file-like objects (e.g. ``fsspec`` open file objects). It will now also automatically recognize zipped files (#1535). -- The `GeoDataFrame.plot()` method now provides access to the pandas plotting - functionality for the non-geometry columns, either using the `kind` keyword - or the accessor method (e.g. `gdf.plot(kind="bar")` or `gdf.plot.bar()`) +- The ``GeoDataFrame.plot()`` method now provides access to the pandas plotting + functionality for the non-geometry columns, either using the ``kind`` keyword + or the accessor method (e.g. ``gdf.plot(kind="bar")`` or ``gdf.plot.bar()``) (#1465). -- New `from_wkt()`, `from_wkb()`, `to_wkt()`, `to_wkb()` methods for +- New ``from_wkt()``, ``from_wkb()``, ``to_wkt()``, ``to_wkb()`` methods for GeoSeries to construct a GeoSeries from geometries in WKT or WKB representation, or to convert a GeoSeries to a pandas Seriew with WKT or WKB values (#1710). -- New `GeoSeries.z` attribute to access the z-coordinates of Point geometries - (similar to the existing `.x` and `.y` attributes) (#1773). -- The `to_crs()` method now handles missing values (#1618). -- Support for pandas' new `.attrs` functionality (#1658). -- The `dissolve()` method now allows dissolving by no column (`by=None`) to +- New ``GeoSeries.z`` attribute to access the z-coordinates of Point geometries + (similar to the existing ``.x`` and ``.y`` attributes) (#1773). +- The ``to_crs()`` method now handles missing values (#1618). +- Support for pandas' new ``.attrs`` functionality (#1658). +- The ``dissolve()`` method now allows dissolving by no column (``by=None``) to create a union of all geometries (single-row GeoDataFrame) (#1568). -- New `estimate_utm_crs()` method on GeoSeries/GeoDataFrame to determine the +- New ``estimate_utm_crs()`` method on GeoSeries/GeoDataFrame to determine the UTM CRS based on the bounds (#1646). -- `GeoDataFrame.from_dict()` now accepts `geometry` and `crs` keywords +- ``GeoDataFrame.from_dict()`` now accepts ``geometry`` and ``crs`` keywords (#1619). -- `GeoDataFrame.to_postgis()` and `geopandas.read_postgis()` now supports +- ``GeoDataFrame.to_postgis()`` and ``geopandas.read_postgis()`` now supports both sqlalchemy engine and connection objects (#1638). -- The `GeoDataFrame.explode()` method now allows exploding based on a +- The ``GeoDataFrame.explode()`` method now allows exploding based on a non-geometry column, using the pandas implementation (#1720). -- Performance improvement in `GeoDataFrame/GeoSeries.explode()` when using +- Performance improvement in ``GeoDataFrame/GeoSeries.explode()`` when using the PyGEOS backend (#1693). -- The binary operation and predicate methods (eg `intersection()`, - `intersects()`) have a new `align` keyword which allows optionally not - aligning on the index before performing the operation with `align=False` +- The binary operation and predicate methods (eg ``intersection()``, + ``intersects()``) have a new ``align`` keyword which allows optionally not + aligning on the index before performing the operation with ``align=False`` (#1668). -- The `GeoDataFrame.dissolve()` method now supports all relevant keywords of - `groupby()`, i.e. the `level`, `sort`, `observed` and `dropna` keywords +- The ``GeoDataFrame.dissolve()`` method now supports all relevant keywords of + ``groupby()``, i.e. the ``level``, ``sort``, ``observed`` and ``dropna`` keywords (#1845). -- The `geopandas.overlay()` function now accepts `make_valid=False` to skip - the step to ensure the input geometries are valid using `buffer(0)` (#1802). -- The `GeoDataFrame.to_json()` method gained a `drop_id` keyword to +- The ``geopandas.overlay()`` function now accepts ``make_valid=False`` to skip + the step to ensure the input geometries are valid using ``buffer(0)`` (#1802). +- The ``GeoDataFrame.to_json()`` method gained a ``drop_id`` keyword to optionally not write the GeoDataFrame's index as the "id" field in the resulting JSON (#1637). -- A new `aspect` keyword in the plotting methods to optionally allow retaining +- A new ``aspect`` keyword in the plotting methods to optionally allow retaining the original aspect (#1512) -- A new `interval` keyword in the `legend_kwds` group of the `plot()` method +- A new ``interval`` keyword in the ``legend_kwds`` group of the ``plot()`` method to control the appearance of the legend labels when using a classification scheme (#1605). -- The spatial index of a GeoSeries (accessed with the `sindex` attribute) is +- The spatial index of a GeoSeries (accessed with the ``sindex`` attribute) is now stored on the underlying array. This ensures that the spatial index is preserved in more operations where possible, and that multiple geometry columns of a GeoDataFrame can each have a spatial index (#1444). -- Addition of a `has_sindex` attribute on the GeoSeries/GeoDataFrame to check +- Addition of a ``has_sindex`` attribute on the GeoSeries/GeoDataFrame to check if a spatial index has already been initialized (#1627). -- The `geopandas.testing.assert_geoseries_equal()` and `assert_geodataframe_equal()` - testing utilities now have a `normalize` keyword (False by default) to +- The ``geopandas.testing.assert_geoseries_equal()`` and ``assert_geodataframe_equal()`` + testing utilities now have a ``normalize`` keyword (False by default) to normalize geometries before comparing for equality (#1826). Those functions now also give a more informative error message when failing (#1808). Deprecations and compatibility notes: -- The `is_ring` attribute currently returns True for Polygons. In the future, +- The ``is_ring`` attribute currently returns True for Polygons. In the future, this will be False (#1631). In addition, start to check it for LineStrings and LinearRings (instead of always returning False). -- The deprecated `objects` keyword in the `intersection()` method of the - `GeoDataFrame/GeoSeries.sindex` spatial index object has been removed +- The deprecated ``objects`` keyword in the ``intersection()`` method of the + ``GeoDataFrame/GeoSeries.sindex`` spatial index object has been removed (#1444). Bug fixes: -- Fix regression in the `plot()` method raising an error with empty +- Fix regression in the ``plot()`` method raising an error with empty geometries (#1702, #1828). -- Fix `geopandas.overlay()` to preserve geometries of the correct type which +- Fix ``geopandas.overlay()`` to preserve geometries of the correct type which are nested within a GeometryCollection as a result of the overlay operation (#1582). In addition, a warning will now be raised if geometries of different type are dropped from the result (#1554). - Fix the repr of an empty GeoSeries to not show spurious warnings (#1673). -- Fix the `.crs` for empty GeoDataFrames (#1560). -- Fix `geopandas.clip` to preserve the correct geometry column name (#1566). -- Fix bug in `plot()` method when using `legend_kwds` with multiple subplots +- Fix the ``.crs`` for empty GeoDataFrames (#1560). +- Fix ``geopandas.clip`` to preserve the correct geometry column name (#1566). +- Fix bug in ``plot()`` method when using ``legend_kwds`` with multiple subplots (#1583) -- Fix spurious warning with `missing_kwds` keyword of the `plot()` method +- Fix spurious warning with ``missing_kwds`` keyword of the ``plot()`` method when there are no areas with missing data (#1600). -- Fix the `plot()` method to correctly align values passed to the `column` +- Fix the ``plot()`` method to correctly align values passed to the ``column`` keyword as a pandas Series (#1670). - Fix bug in plotting MultiPoints when passing values to determine the color (#1694) -- The `rename_geometry()` method now raises a more informative error message +- The ``rename_geometry()`` method now raises a more informative error message when a duplicate column name is used (#1602). -- Fix `explode()` method to preserve the CRS (#1655) -- Fix the `GeoSeries.apply()` method to again accept the `convert_dtype` +- Fix ``explode()`` method to preserve the CRS (#1655) +- Fix the ``GeoSeries.apply()`` method to again accept the ``convert_dtype`` keyword to be consistent with pandas (#1636). -- Fix `GeoDataFrame.apply()` to preserve the CRS when possible (#1848). -- Fix bug in containment test as `geom in geoseries` (#1753). -- The `shift()` method of a GeoSeries/GeoDataFrame now preserves the CRS +- Fix ``GeoDataFrame.apply()`` to preserve the CRS when possible (#1848). +- Fix bug in containment test as ``geom in geoseries`` (#1753). +- The ``shift()`` method of a GeoSeries/GeoDataFrame now preserves the CRS (#1744). - The PostGIS IO functionality now quotes table names to ensure it works with case-sensitive names (#1825). -- Fix the `GeoSeries` constructor without passing data but only an index (#1798). +- Fix the ``GeoSeries`` constructor without passing data but only an index (#1798). Notes on (optional) dependencies: - GeoPandas 0.9.0 dropped support for Python 3.5. Further, the minimum required versions are pandas 0.24, numpy 1.15 and shapely 1.6 and fiona 1.8. -- The `descartes` package is no longer required for plotting polygons. This +- The ``descartes`` package is no longer required for plotting polygons. This functionality is now included by default in GeoPandas itself, when matplotlib is available (#1677). -- Fiona is now only imported when used in `read_file`/`to_file`. This means +- Fiona is now only imported when used in ``read_file``/``to_file``. This means you can now force geopandas to install without fiona installed (although it is still a default requirement) (#1775). - Compatibility with the upcoming Shapely 1.8 (#1659, #1662, #1819). @@ -245,10 +360,10 @@ Version 0.8.1 (July 15, 2020) Small bug-fix release: -- Fix a regression in the `plot()` method when visualizing with a +- Fix a regression in the ``plot()`` method when visualizing with a JenksCaspallSampled or FisherJenksSampled scheme (#1486). -- Fix spurious warning in `GeoDataFrame.to_postgis` (#1497). -- Fix the un-pickling with `pd.read_pickle` of files written with older +- Fix spurious warning in ``GeoDataFrame.to_postgis`` (#1497). +- Fix the un-pickling with ``pd.read_pickle`` of files written with older GeoPandas versions (#1511). @@ -258,7 +373,7 @@ Version 0.8.0 (June 24, 2020) **Experimental**: optional use of PyGEOS to speed up spatial operations (#1155). PyGEOS is a faster alternative for Shapely (being contributed back to a future version of Shapely), and is used in element-wise spatial operations and for -spatial index in e.g. `sjoin` (#1343, #1401, #1421, #1427, #1428). See the +spatial index in e.g. ``sjoin`` (#1343, #1401, #1421, #1427, #1428). See the [installation docs](https://geopandas.readthedocs.io/en/latest/install.html#using-the-optional-pygeos-dependency) for more info and how to enable it. @@ -266,16 +381,16 @@ New features and improvements: - IO enhancements: - - New `GeoDataFrame.to_postgis()` method to write to PostGIS database (#1248). + - New ``GeoDataFrame.to_postgis()`` method to write to PostGIS database (#1248). - New Apache Parquet and Feather file format support (#1180, #1435) - - Allow appending to files with `GeoDataFrame.to_file` (#1229). - - Add support for the `ignore_geometry` keyword in `read_file` to only read + - Allow appending to files with ``GeoDataFrame.to_file`` (#1229). + - Add support for the ``ignore_geometry`` keyword in ``read_file`` to only read the attribute data. If set to True, a pandas DataFrame without geometry is returned (#1383). - - `geopandas.read_file` now supports reading from file-like objects (#1329). - - `GeoDataFrame.to_file` now supports specifying the CRS to write to the file + - ``geopandas.read_file`` now supports reading from file-like objects (#1329). + - ``GeoDataFrame.to_file`` now supports specifying the CRS to write to the file (#802). By default it still uses the CRS of the GeoDataFrame. - - New `chunksize` keyword in `geopandas.read_postgis` to read a query in + - New ``chunksize`` keyword in ``geopandas.read_postgis`` to read a query in chunks (#1123). - Improvements related to geometry columns and CRS: @@ -283,29 +398,29 @@ New features and improvements: - Any column of the GeoDataFrame that has a "geometry" dtype is now returned as a GeoSeries. This means that when having multiple geometry columns, not only the "active" geometry column is returned as a GeoSeries, but also - accessing another geometry column (`gdf["other_geom_column"]`) gives a + accessing another geometry column (``gdf["other_geom_column"]``) gives a GeoSeries (#1336). - Multiple geometry columns in a GeoDataFrame can now each have a different - CRS. The global `gdf.crs` attribute continues to returns the CRS of the + CRS. The global ``gdf.crs`` attribute continues to returns the CRS of the "active" geometry column. The CRS of other geometry columns can be accessed - from the column itself (eg `gdf["other_geom_column"].crs`) (#1339). - - New `set_crs()` method on GeoDataFrame/GeoSeries to set the CRS of naive + from the column itself (eg ``gdf["other_geom_column"].crs``) (#1339). + - New ``set_crs()`` method on GeoDataFrame/GeoSeries to set the CRS of naive geometries (#747). - Improvements related to plotting: - The y-axis is now scaled depending on the center of the plot when using a geographic CRS, instead of using an equal aspect ratio (#1290). - - When passing a column of categorical dtype to the `column=` keyword of the - GeoDataFrame `plot()`, we now honor all categories and its order (#1483). - In addition, a new `categories` keyword allows to specify all categories + - When passing a column of categorical dtype to the ``column=`` keyword of the + GeoDataFrame ``plot()``, we now honor all categories and its order (#1483). + In addition, a new ``categories`` keyword allows to specify all categories and their order otherwise (#1173). - - For choropleths using a classification scheme (using `scheme=`), the - `legend_kwds` accept two new keywords to control the formatting of the - legend: `fmt` with a format string for the bin edges (#1253), and `labels` + - For choropleths using a classification scheme (using ``scheme=``), the + ``legend_kwds`` accept two new keywords to control the formatting of the + legend: ``fmt`` with a format string for the bin edges (#1253), and ``labels`` to pass fully custom class labels (#1302). -- New `covers()` and `covered_by()` methods on GeoSeries/GeoDataframe for the +- New ``covers()`` and ``covered_by()`` methods on GeoSeries/GeoDataframe for the equivalent spatial predicates (#1460, #1462). - GeoPandas now warns when using distance-based methods with data in a geographic projection (#1378). @@ -314,35 +429,35 @@ Deprecations: - When constructing a GeoSeries or GeoDataFrame from data that already has a CRS, a deprecation warning is raised when both CRS don't match, and in the - future an error will be raised in such a case. You can use the new `set_crs` + future an error will be raised in such a case. You can use the new ``set_crs`` method to override an existing CRS. See [the docs](https://geopandas.readthedocs.io/en/latest/projections.html#projection-for-multiple-geometry-columns). -- The helper functions in the `geopandas.plotting` module are deprecated for +- The helper functions in the ``geopandas.plotting`` module are deprecated for public usage (#656). -- The `geopandas.io` functions are deprecated, use the top-level `read_file` and - `to_file` instead (#1407). -- The set operators (`&`, `|`, `^`, `-`) are deprecated, use the - `intersection()`, `union()`, `symmetric_difference()`, `difference()` methods +- The ``geopandas.io`` functions are deprecated, use the top-level ``read_file`` and + ``to_file`` instead (#1407). +- The set operators (``&``, ``|``, ``^``, ``-``) are deprecated, use the + ``intersection()``, ``union()``, ``symmetric_difference()``, ``difference()`` methods instead (#1255). -- The `sindex` for empty dataframe will in the future return an empty spatial - index instead of `None` (#1438). -- The `objects` keyword in the `intersection` method of the spatial index - returned by the `sindex` attribute is deprecated and will be removed in the +- The ``sindex`` for empty dataframe will in the future return an empty spatial + index instead of ``None`` (#1438). +- The ``objects`` keyword in the ``intersection`` method of the spatial index + returned by the ``sindex`` attribute is deprecated and will be removed in the future (#1440). Bug fixes: -- Fix the `total_bounds()` method to ignore missing and empty geometries (#1312). -- Fix `geopandas.clip` when masking with non-overlapping area resulting in an +- Fix the ``total_bounds()`` method to ignore missing and empty geometries (#1312). +- Fix ``geopandas.clip`` when masking with non-overlapping area resulting in an empty GeoDataFrame (#1309, #1365). -- Fix error in `geopandas.sjoin` when joining on an empty geometry column (#1318). -- CRS related fixes: `pandas.concat` preserves CRS when concatenating GeoSeries - objects (#1340), preserve the CRS in `geopandas.clip` (#1362) and in - `GeoDataFrame.astype` (#1366). -- Fix bug in `GeoDataFrame.explode()` when 'level_1' is one of the column names +- Fix error in ``geopandas.sjoin`` when joining on an empty geometry column (#1318). +- CRS related fixes: ``pandas.concat`` preserves CRS when concatenating GeoSeries + objects (#1340), preserve the CRS in ``geopandas.clip`` (#1362) and in + ``GeoDataFrame.astype`` (#1366). +- Fix bug in ``GeoDataFrame.explode()`` when 'level_1' is one of the column names (#1445). - Better error message when rtree is not installed (#1425). -- Fix bug in `GeoSeries.equals()` (#1451). +- Fix bug in ``GeoSeries.equals()`` (#1451). - Fix plotting of multi-part geometries with additional style keywords (#1385). And we now have a [Code of Conduct](https://github.com/geopandas/geopandas/blob/main/CODE_OF_CONDUCT.md)! @@ -357,7 +472,7 @@ Version 0.7.0 (February 16, 2020) Support for Python 2.7 has been dropped. GeoPandas now works with Python >= 3.5. The important API change of this release is that GeoPandas now requires -PROJ > 6 and pyproj > 2.2, and that the `.crs` attribute of a GeoSeries and +PROJ > 6 and pyproj > 2.2, and that the ``.crs`` attribute of a GeoSeries and GeoDataFrame no longer stores the CRS information as a proj4 string or dict, but as a ``pyproj.CRS`` object (#1101). @@ -368,32 +483,32 @@ in the documentation. Other API changes; -- The `GeoDataFrame.to_file` method will now also write the GeoDataFrame index +- The ``GeoDataFrame.to_file`` method will now also write the GeoDataFrame index to the file, if the index is named and/or non-integer. You can use the - `index=True/False` keyword to overwrite this default inference (#1059). + ``index=True/False`` keyword to overwrite this default inference (#1059). New features and improvements: -- A new `geopandas.clip` function to clip a GeoDataFrame to the spatial extent +- A new ``geopandas.clip`` function to clip a GeoDataFrame to the spatial extent of another shape (#1128). -- The `geopandas.overlay` function now works for all geometry types, including +- The ``geopandas.overlay`` function now works for all geometry types, including points and linestrings in addition to polygons (#1110). -- The `plot()` method gained support for missing values (in the column that +- The ``plot()`` method gained support for missing values (in the column that determines the colors). By default it doesn't plot the corresponding - geometries, but using the new `missing_kwds` argument you can specify how to + geometries, but using the new ``missing_kwds`` argument you can specify how to style those geometries (#1156). -- The `plot()` method now also supports plotting GeometryCollection and +- The ``plot()`` method now also supports plotting GeometryCollection and LinearRing objects (#1225). - Added support for filtering with a geometry or reading a subset of the rows in - `geopandas.read_file` (#1160). + ``geopandas.read_file`` (#1160). - Added support for the new nullable integer data type of pandas in - `GeoDataFrame.to_file` (#1220). + ``GeoDataFrame.to_file`` (#1220). Bug fixes: -- `GeoSeries.reset_index()` now correctly results in a GeoDataFrame instead of DataFrame (#1252). -- Fixed the `geopandas.sjoin` function to handle MultiIndex correctly (#1159). -- Fixed the `geopandas.sjoin` function to preserve the index name of the left GeoDataFrame (#1150). +- ``GeoSeries.reset_index()`` now correctly results in a GeoDataFrame instead of DataFrame (#1252). +- Fixed the ``geopandas.sjoin`` function to handle MultiIndex correctly (#1159). +- Fixed the ``geopandas.sjoin`` function to preserve the index name of the left GeoDataFrame (#1150). Version 0.6.3 (February 6, 2020) @@ -402,7 +517,7 @@ Version 0.6.3 (February 6, 2020) Small bug-fix release: - Compatibility with Shapely 1.7 and pandas 1.0 (#1244). -- Fix `GeoDataFrame.fillna` to accept non-geometry values again when there are +- Fix ``GeoDataFrame.fillna`` to accept non-geometry values again when there are no missing values in the geometry column. This should make it easier to fill the numerical columns of the GeoDataFrame (#1279). @@ -425,8 +540,8 @@ Version 0.6.1 (October 12, 2019) Small bug-fix release fixing a few regressions: -- Fix `astype` when converting to string with Multi geometries (#1145) or when converting a dataframe without geometries (#1144). -- Fix `GeoSeries.fillna` to accept `np.nan` again (#1149). +- Fix ``astype`` when converting to string with Multi geometries (#1145) or when converting a dataframe without geometries (#1144). +- Fix ``GeoSeries.fillna`` to accept ``np.nan`` again (#1149). Version 0.6.0 (September 27, 2019) @@ -438,35 +553,35 @@ API changes: - A refactor of the internals based on the pandas ExtensionArray interface (#1000). The main user visible changes are: - - The `.dtype` of a GeoSeries is now a `'geometry'` dtype (and no longer a numpy `object` dtype). - - The `.values` of a GeoSeries now returns a custom `GeometryArray`, and no longer a numpy array. To get back a numpy array of Shapely scalars, you can convert explicitly using `np.asarray(..)`. + - The ``.dtype`` of a GeoSeries is now a ``'geometry'`` dtype (and no longer a numpy ``object`` dtype). + - The ``.values`` of a GeoSeries now returns a custom ``GeometryArray``, and no longer a numpy array. To get back a numpy array of Shapely scalars, you can convert explicitly using ``np.asarray(..)``. -- The `GeoSeries` constructor now raises a warning when passed non-geometry data. Currently the constructor falls back to return a pandas `Series`, but in the future this will raise an error (#1085). +- The ``GeoSeries`` constructor now raises a warning when passed non-geometry data. Currently the constructor falls back to return a pandas ``Series``, but in the future this will raise an error (#1085). - The missing value handling has been changed to now separate the concepts of missing geometries and empty geometries (#601, 1062). In practice this means that (see [the docs](https://geopandas.readthedocs.io/en/v0.6.0/missing_empty.html) for more details): - - `GeoSeries.isna` now considers only missing values, and if you want to check for empty geometries, you can use `GeoSeries.is_empty` (`GeoDataFrame.isna` already only looked at missing values). - - `GeoSeries.dropna` now actually drops missing values (before it didn't drop either missing or empty geometries) - - `GeoSeries.fillna` only fills missing values (behaviour unchanged). - - `GeoSeries.align` uses missing values instead of empty geometries by default to fill non-matching index entries. + - ``GeoSeries.isna`` now considers only missing values, and if you want to check for empty geometries, you can use ``GeoSeries.is_empty`` (``GeoDataFrame.isna`` already only looked at missing values). + - ``GeoSeries.dropna`` now actually drops missing values (before it didn't drop either missing or empty geometries) + - ``GeoSeries.fillna`` only fills missing values (behaviour unchanged). + - ``GeoSeries.align`` uses missing values instead of empty geometries by default to fill non-matching index entries. New features and improvements: -- Addition of a `GeoSeries.affine_transform` method, equivalent of Shapely's function (#1008). -- Addition of a `GeoDataFrame.rename_geometry` method to easily rename the active geometry column (#1053). -- Addition of `geopandas.show_versions()` function, which can be used to give an overview of the installed libraries in bug reports (#899). -- The `legend_kwds` keyword of the `plot()` method can now also be used to specify keywords for the color bar (#1102). -- Performance improvement in the `sjoin()` operation by re-using existing spatial index of the input dataframes, if available (#789). +- Addition of a ``GeoSeries.affine_transform`` method, equivalent of Shapely's function (#1008). +- Addition of a ``GeoDataFrame.rename_geometry`` method to easily rename the active geometry column (#1053). +- Addition of ``geopandas.show_versions()`` function, which can be used to give an overview of the installed libraries in bug reports (#899). +- The ``legend_kwds`` keyword of the ``plot()`` method can now also be used to specify keywords for the color bar (#1102). +- Performance improvement in the ``sjoin()`` operation by re-using existing spatial index of the input dataframes, if available (#789). - Updated documentation to work with latest version of geoplot and contextily (#1044, #1088). - A new ``geopandas.options`` configuration, with currently a single option to control the display precision of the coordinates (``options.display_precision``). The default is now to show less coordinates (3 for projected and 5 for geographic coordinates), but the default can be overridden with the option. Bug fixes: -- Also try to use `pysal` instead of `mapclassify` if available (#1082). -- The `GeoDataFrame.astype()` method now correctly returns a `GeoDataFrame` if the geometry column is preserved (#1009). -- The `to_crs` method now uses `always_xy=True` to ensure correct lon/lat order handling for pyproj>=2.2.0 (#1122). -- Fixed passing list-like colors in the `plot()` method in case of "multi" geometries (#1119). -- Fixed the coloring of shapes and colorbar when passing a custom `norm` in the `plot()` method (#1091, #1089). -- Fixed `GeoDataFrame.to_file` to preserve VFS file paths (e.g. when a "s3://" path is specified) (#1124). +- Also try to use ``pysal`` instead of ``mapclassify`` if available (#1082). +- The ``GeoDataFrame.astype()`` method now correctly returns a ``GeoDataFrame`` if the geometry column is preserved (#1009). +- The ``to_crs`` method now uses ``always_xy=True`` to ensure correct lon/lat order handling for pyproj>=2.2.0 (#1122). +- Fixed passing list-like colors in the ``plot()`` method in case of "multi" geometries (#1119). +- Fixed the coloring of shapes and colorbar when passing a custom ``norm`` in the ``plot()`` method (#1091, #1089). +- Fixed ``GeoDataFrame.to_file`` to preserve VFS file paths (e.g. when a "s3://" path is specified) (#1124). - Fixed failing case in ``geopandas.sjoin`` with empty geometries (#1138). @@ -483,140 +598,136 @@ Version 0.5.0 (April 25, 2019) Improvements: -* Significant performance improvement (around 10x) for `GeoDataFrame.iterfeatures`, - which also improves `GeoDataFrame.to_file` (#864). -* File IO enhancements based on Fiona 1.8: +- Significant performance improvement (around 10x) for ``GeoDataFrame.iterfeatures``, + which also improves ``GeoDataFrame.to_file`` (#864). +- File IO enhancements based on Fiona 1.8: - * Support for writing bool dtype (#855) and datetime dtype, if the file format supports it (#728). - * Support for writing dataframes with multiple geometry types, if the file format allows it (e.g. GeoJSON for all types, or ESRI Shapefile for Polygon+MultiPolygon) (#827, #867, #870). + - Support for writing bool dtype (#855) and datetime dtype, if the file format supports it (#728). + - Support for writing dataframes with multiple geometry types, if the file format allows it (e.g. GeoJSON for all types, or ESRI Shapefile for Polygon+MultiPolygon) (#827, #867, #870). -* Compatibility with pyproj >= 2 (#962). -* A new `geopandas.points_from_xy()` helper function to convert x and y coordinates to Point objects (#896). -* The `buffer` and `interpolate` methods now accept an array-like to specify a variable distance for each geometry (#781). -* Addition of a `relate` method, corresponding to the shapely method that returns the DE-9IM matrix (#853). -* Plotting improvements: +- Compatibility with pyproj >= 2 (#962). +- A new ``geopandas.points_from_xy()`` helper function to convert x and y coordinates to Point objects (#896). +- The ``buffer`` and ``interpolate`` methods now accept an array-like to specify a variable distance for each geometry (#781). +- Addition of a ``relate`` method, corresponding to the shapely method that returns the DE-9IM matrix (#853). +- Plotting improvements: - * Performance improvement in plotting by only flattening the geometries if there are actually 'Multi' geometries (#785). - * Choropleths: access to all `mapclassify` classification schemes and addition of the `classification_kwds` keyword in the `plot` method to specify options for the scheme (#876). - * Ability to specify a matplotlib axes object on which to plot the color bar with the `cax` keyword, in order to have more control over the color bar placement (#894). + - Performance improvement in plotting by only flattening the geometries if there are actually 'Multi' geometries (#785). + - Choropleths: access to all ``mapclassify`` classification schemes and addition of the ``classification_kwds`` keyword in the ``plot`` method to specify options for the scheme (#876). + - Ability to specify a matplotlib axes object on which to plot the color bar with the ``cax`` keyword, in order to have more control over the color bar placement (#894). -* Changed the default provider in ``geopandas.tools.geocode`` from Google (now requires an API key) to Geocode.Farm (#907, #975). +- Changed the default provider in ``geopandas.tools.geocode`` from Google (now requires an API key) to Geocode.Farm (#907, #975). Bug fixes: - Remove the edge in the legend marker (#807). -- Fix the `align` method to preserve the CRS (#829). -- Fix `geopandas.testing.assert_geodataframe_equal` to correctly compare left and right dataframes (#810). +- Fix the ``align`` method to preserve the CRS (#829). +- Fix ``geopandas.testing.assert_geodataframe_equal`` to correctly compare left and right dataframes (#810). - Fix in choropleth mapping when the values contain missing values (#877). -- Better error message in `sjoin` if the input is not a GeoDataFrame (#842). -- Fix in `read_postgis` to handle nullable (missing) geometries (#856). -- Correctly passing through the `parse_dates` keyword in `read_postgis` to the underlying pandas method (#860). +- Better error message in ``sjoin`` if the input is not a GeoDataFrame (#842). +- Fix in ``read_postgis`` to handle nullable (missing) geometries (#856). +- Correctly passing through the ``parse_dates`` keyword in ``read_postgis`` to the underlying pandas method (#860). - Fixed the shape of Antarctica in the included demo dataset 'naturalearth_lowres' (by updating to the latest version) (#804). - Version 0.4.1 (March 5, 2019) ----------------------------- Small bug-fix release for compatibility with the latest Fiona and PySAL releases: -* Compatibility with Fiona 1.8: fix deprecation warning (#854). -* Compatibility with PySAL 2.0: switched to `mapclassify` instead of `PySAL` as - dependency for choropleth mapping with the `scheme` keyword (#872). -* Fix for new `overlay` implementation in case the intersection is empty (#800). - +- Compatibility with Fiona 1.8: fix deprecation warning (#854). +- Compatibility with PySAL 2.0: switched to ``mapclassify`` instead of ``PySAL`` as + dependency for choropleth mapping with the ``scheme`` keyword (#872). +- Fix for new ``overlay`` implementation in case the intersection is empty (#800). Version 0.4.0 (July 15, 2018) ----------------------------- Improvements: -* Improved `overlay` function (better performance, several incorrect behaviours fixed) (#429) -* Pass keywords to control legend behavior (`legend_kwds`) to `plot` (#434) -* Add basic support for reading remote datasets in `read_file` (#531) -* Pass kwargs for `buffer` operation on GeoSeries (#535) -* Expose all geopy services as options in geocoding (#550) -* Faster write speeds to GeoPackage (#605) -* Permit `read_file` filtering with a bounding box from a GeoDataFrame (#613) -* Set CRS on GeoDataFrame returned by `read_postgis` (#627) -* Permit setting markersize for Point GeoSeries plots with column values (#633) -* Started an example gallery (#463, #690, #717) -* Support for plotting MultiPoints (#683) -* Testing functionality (e.g. `assert_geodataframe_equal`) is now publicly exposed (#707) -* Add `explode` method to GeoDataFrame (similar to the GeoSeries method) (#671) -* Set equal aspect on active axis on multi-axis figures (#718) -* Pass array of values to column argument in `plot` (#770) +- Improved ``overlay`` function (better performance, several incorrect behaviours fixed) (#429) +- Pass keywords to control legend behavior (``legend_kwds``) to ``plot`` (#434) +- Add basic support for reading remote datasets in ``read_file`` (#531) +- Pass kwargs for ``buffer`` operation on GeoSeries (#535) +- Expose all geopy services as options in geocoding (#550) +- Faster write speeds to GeoPackage (#605) +- Permit ``read_file`` filtering with a bounding box from a GeoDataFrame (#613) +- Set CRS on GeoDataFrame returned by ``read_postgis`` (#627) +- Permit setting markersize for Point GeoSeries plots with column values (#633) +- Started an example gallery (#463, #690, #717) +- Support for plotting MultiPoints (#683) +- Testing functionality (e.g. ``assert_geodataframe_equal``) is now publicly exposed (#707) +- Add ``explode`` method to GeoDataFrame (similar to the GeoSeries method) (#671) +- Set equal aspect on active axis on multi-axis figures (#718) +- Pass array of values to column argument in ``plot`` (#770) Bug fixes: -* Ensure that colorbars are plotted on the correct axis (#523) -* Handle plotting empty GeoDataFrame (#571) -* Save z-dimension when writing files (#652) -* Handle reading empty shapefiles (#653) -* Correct dtype for empty result of spatial operations (#685) -* Fix empty `sjoin` handling for pandas>=0.23 (#762) - +- Ensure that colorbars are plotted on the correct axis (#523) +- Handle plotting empty GeoDataFrame (#571) +- Save z-dimension when writing files (#652) +- Handle reading empty shapefiles (#653) +- Correct dtype for empty result of spatial operations (#685) +- Fix empty ``sjoin`` handling for pandas>=0.23 (#762) Version 0.3.0 (August 29, 2017) ------------------------------- Improvements: -* Improve plotting performance using ``matplotlib.collections`` (#267) -* Improve default plotting appearance. The defaults now follow the new matplotlib defaults (#318, #502, #510) -* Provide access to x/y coordinates as attributes for Point GeoSeries (#383) -* Make the NYBB dataset available through ``geopandas.datasets`` (#384) -* Enable ``sjoin`` on non-integer-index GeoDataFrames (#422) -* Add ``cx`` indexer to GeoDataFrame (#482) -* ``GeoDataFrame.from_features`` now also accepts a Feature Collection (#225, #507) -* Use index label instead of integer id in output of ``iterfeatures`` and +- Improve plotting performance using ``matplotlib.collections`` (#267) +- Improve default plotting appearance. The defaults now follow the new matplotlib defaults (#318, #502, #510) +- Provide access to x/y coordinates as attributes for Point GeoSeries (#383) +- Make the NYBB dataset available through ``geopandas.datasets`` (#384) +- Enable ``sjoin`` on non-integer-index GeoDataFrames (#422) +- Add ``cx`` indexer to GeoDataFrame (#482) +- ``GeoDataFrame.from_features`` now also accepts a Feature Collection (#225, #507) +- Use index label instead of integer id in output of ``iterfeatures`` and ``to_json`` (#421) -* Return empty data frame rather than raising an error when performing a spatial join with non overlapping geodataframes (#335) +- Return empty data frame rather than raising an error when performing a spatial join with non overlapping geodataframes (#335) Bug fixes: -* Compatibility with shapely 1.6.0 (#512) -* Fix ``fiona.filter`` results when bbox is not None (#372) -* Fix ``dissolve`` to retain CRS (#389) -* Fix ``cx`` behavior when using index of 0 (#478) -* Fix display of lower bin in legend label of choropleth plots using a PySAL scheme (#450) - +- Compatibility with shapely 1.6.0 (#512) +- Fix ``fiona.filter`` results when bbox is not None (#372) +- Fix ``dissolve`` to retain CRS (#389) +- Fix ``cx`` behavior when using index of 0 (#478) +- Fix display of lower bin in legend label of choropleth plots using a PySAL scheme (#450) Version 0.2.0 ------------- Improvements: -* Complete overhaul of the documentation -* Addition of ``overlay`` to perform spatial overlays with polygons (#142) -* Addition of ``sjoin`` to perform spatial joins (#115, #145, #188) -* Addition of ``__geo_interface__`` that returns a python data structure +- Complete overhaul of the documentation +- Addition of ``overlay`` to perform spatial overlays with polygons (#142) +- Addition of ``sjoin`` to perform spatial joins (#115, #145, #188) +- Addition of ``__geo_interface__`` that returns a python data structure to represent the ``GeoSeries`` as a GeoJSON-like ``FeatureCollection`` (#116) and ``iterfeatures`` method (#178) -* Addition of the ``explode`` (#146) and ``dissolve`` (#310, #311) methods. -* Addition of the ``sindex`` attribute, a Spatial Index using the optional +- Addition of the ``explode`` (#146) and ``dissolve`` (#310, #311) methods. +- Addition of the ``sindex`` attribute, a Spatial Index using the optional dependency ``rtree`` (``libspatialindex``) that can be used to speed up certain operations such as overlays (#140, #141). -* Addition of the ``GeoSeries.cx`` coordinate indexer to slice a GeoSeries based +- Addition of the ``GeoSeries.cx`` coordinate indexer to slice a GeoSeries based on a bounding box of the coordinates (#55). -* Improvements to plotting: ability to specify edge colors (#173), support for +- Improvements to plotting: ability to specify edge colors (#173), support for the ``vmin``, ``vmax``, ``figsize``, ``linewidth`` keywords (#207), legends for chloropleth plots (#210), color points by specifying a colormap (#186) or a single color (#238). -* Larger flexibility of ``to_crs``, accepting both dicts and proj strings (#289) -* Addition of embedded example data, accessible through +- Larger flexibility of ``to_crs``, accepting both dicts and proj strings (#289) +- Addition of embedded example data, accessible through ``geopandas.datasets.get_path``. API changes: -* In the ``plot`` method, the ``axes`` keyword is renamed to ``ax`` for +- In the ``plot`` method, the ``axes`` keyword is renamed to ``ax`` for consistency with pandas, and the ``colormap`` keyword is renamed to ``cmap`` for consistency with matplotlib (#208, #228, #240). Bug fixes: -* Properly handle rows with missing geometries (#139, #193). -* Fix ``GeoSeries.to_json`` (#263). -* Correctly serialize metadata when pickling (#199, #206). -* Fix ``merge`` and ``concat`` to return correct GeoDataFrame (#247, #320, #322). +- Properly handle rows with missing geometries (#139, #193). +- Fix ``GeoSeries.to_json`` (#263). +- Correctly serialize metadata when pickling (#199, #206). +- Fix ``merge`` and ``concat`` to return correct GeoDataFrame (#247, #320, #322).