Version 0.17 (November 16, 2018)

For a full list of included Pull Requests and closed Issues, please see the 0.17 milestone.


  • The cartopy.feature.NaturalEarthFeature class now allows a cartopy.feature.AdaptiveScaler object to be passed as the scale argument. This will automatically choose the appropriate feature scale from the GeoAxes extent. This can also be used interactively while panning and zooming in a figure. cartopy.feature.NaturalEarthFeature.scale is now read-only. (PR #1102, PR #983)

  • Proj version 5.x is now supported in Cartopy, thanks to hard work by Elliott Sales de Andrade. As part of making this version work, the inner workings and boundaries of many projections were improved. (PR #1124, PR #1148) Elliott also improved support for warped rectangular projections (PR #1180) as well as added support for the Eckert family of projections (PR #1168) and Equal Earth projection. (PR #1182)

  • Greg Lucas contributed functionality to plot day/night across the globe, which was turned into a map feature by Phil Elson. The shading can be added to a map with cartopy.feature.nightshade.Nightshade(datetime). For more information, see the Nightshade feature example. (PR #1135, PR #1181)

  • Elliott Sales de Andrade added optional support for the use of pykdtree when performing image transformations. This module has been demonstrated to be twice as fast as the old code for most of the Cartopy examples, with one example (geostationary) having a 95% reduction in run time. (PR #1150)

  • Greg Lucas added a Fiona-based shapefile reader. If Fiona is installed on a user’s system, this will now be the default shapefile reader, adding significant speed improvements. (PR #1000)

  • Phil Elson added the ability to control the appearance of Shapely geometries using a function. cartopy.mpl.geoaxes.GeoAxes.add_geometries() gained a styler argument that takes a function that given a geometry, returns a dictionary of style keyword arguments. The Hurricane Katrina example has been updated to use this. (PR #1019)

  • Kevin Donkers, with help from Phil Elson and Peter Killick, improved the interactivity of panning and zooming images by adding a raster image cache. (PR #1192, PR #1195, PR #1197)

  • Peter Killick and Phil Elson improved the use of Cartopy in Jupyter notebook environments by adding an HTML representation for projections. These render vector images of the coastlines using a given projection to enable a quick preview. (PR #951, PR #1196)

  • Fixes were added by Elliott Sales de Andrade to support the Matplotlib 3.x series. (PR #1130)

  • Ryan May fixed up the Geostationary and NearsidePerspective projections as well as added additional options to the Mercator projection. (PR #1189, PR #1043)

  • Andrey Kiselev contributed support for the Equidistant Conic projection. (PR #1022)

  • Peter Killick updated and improved the interface to Mapbox image tiles. (PR #1170)

  • Manuel Garrido and Phil Elson collaborated to add support for more themes for the Stamen map tile set. (PR #1013, PR #1188)

  • Support for WMTS sources was made more robust by Alex Crosby. (PR #1052, PR #1053)

  • Passing a color argument to cartopy.mpl.geoaxes.GeoAxes.add_feature() now overrides default feature edgecolor and facecolor thanks to a change by Elliott Sales de Andrade. (PR #1029)

  • Phil Elson added cartopy.geodesic.Geodesic.geometry_length() to calculated the length in physical meters of any Shapely geometry. (PR #1096)

  • Elliott Sales de Andrade improved the interpolation code by normalizing values, reducing issues due to precision. (PR #1042)

  • Ryan May fixed a few corner cases in the plotting and transform code. (PR #1062, PR #1090)

  • A pyproject.toml file has been added to Cartopy by Elliott Sales de Andrade to make it easier to build Cartopy. Newer versions of pip should now automatically install Cython and NumPy before trying to build Cartopy. (PR #1132)

  • Andrew Dawson fixed a crash when calculating the boundary for the Lambert Azimuthal Equal Area projection. (PR #1100)

  • Elliott Sales de Andrade and Andrew Dawson removed the use of deprecated functionality in NumPy. (PR #1101, PR #1122)

  • Kevin Donkers added all 60 UTM zones to the images in the supported projection documentation. (PR #1103)

  • Broken URLs to the SRTM imagery were corrected by Elliott Sales de Andrade. (PR #1143)


  • cartopy.mpl.clip_path.clip_path() has been deprecated. It is a simple wrapper for Matplotlib’s path clipping, so use that instead. You can replace clip_path(subject, clip_bbox) by subject.clip_to_bbox(clip_bbox).

  • has been deprecated. Use Stamen('terrain-background') instead.

  • In CartoPy 0.18, the default value for the origin argument to cartopy.mpl.geoaxes.GeoAxes.imshow() will change from 'lower' to 'upper' to match the default in Matplotlib.

Incompatible Changes

  • Support for Matplotlib < 1.5.1 and NumPy < 1.10 has been removed.