Repository: SciTools/cartopy (language: python)

Issue:
Planning for next release
@raphaelquast would like the feature he added in a new release: https://github.com/SciTools/cartopy/pull/2362#issuecomment-2316096926

We haven't been getting a lot of new PRs/updates lately, so I'm wondering if anyone has any specific items they want to get in or looked at before our next release. We haven't had a formal release timeframe as far as I know, so I'd be happy making a new release sometime soon since it has been a few months.


Discussion / hints:
Python 3.13 is due out on October 1st.  It might be nice to have a release soon after that with 3.13 wheels, unless you were thinking sooner?
That seems reasonable to me! I have not tested on 3.13 yet, but we should probably add an entry to CI for that. We should also be able to build wheels before that if desired since cibuildwheel already support 3.13 https://github.com/pypa/cibuildwheel
3.13rc1 is out already; we don't need to wait for 3.13, as that is already ABI stable.
> we should probably add an entry to CI for that

Looks like we need to wait for pyproj?
https://github.com/rcomer/cartopy/actions/runs/10653310243/job/29528256784#step:7:43

Edit: seems pyproj want to release soon, but there is a Windows wheel issue blocking it - https://github.com/pyproj4/pyproj/pull/1424#issuecomment-2287094885
Strong +1 for having a 3.13-supporting release out the door.

Fix patch:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1272cf445..983c0c24e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -91,7 +91,7 @@ jobs:
           )
           echo "include=$MATRIX" >> $GITHUB_OUTPUT
         env:
-          CIBW_BUILD: "cp310-* cp311-* cp312-*"
+          CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-*"
           # Skip 32 bit builds and musllinux due to lack of numpy wheels
           CIBW_SKIP: "*-win32 *_i686 *-musllinux*"
           CIBW_ARCHS_MACOS: x86_64 arm64
diff --git a/docs/make_projection.py b/docs/make_projection.py
index c3bd31918..8f50fd559 100644
--- a/docs/make_projection.py
+++ b/docs/make_projection.py
@@ -79,7 +79,8 @@ def utm_plot():
 
 COASTLINE_RESOLUTION = {ccrs.OSNI: '10m',
                         ccrs.OSGB: '50m',
-                        ccrs.EuroPP: '50m'}
+                        ccrs.EuroPP: '50m',
+                        ccrs.LambertZoneII: '10m'}
 
 
 PRJ_SORT_ORDER = {'PlateCarree': 1,
@@ -91,7 +92,7 @@ def utm_plot():
                   'Orthographic': 2, 'UTM': 2, 'AlbersEqualArea': 2,
                   'AzimuthalEquidistant': 2, 'Sinusoidal': 2,
                   'InterruptedGoodeHomolosine': 3, 'RotatedPole': 3,
-                  'OSGB': 4, 'EuroPP': 5,
+                  'OSGB': 4, 'LambertZoneII': 4.1, 'EuroPP': 5,
                   'Geostationary': 6, 'NearsidePerspective': 7,
                   'EckertI': 8.1, 'EckertII': 8.2, 'EckertIII': 8.3,
                   'EckertIV': 8.4, 'EckertV': 8.5, 'EckertVI': 8.6}
diff --git a/docs/source/reference/projections.rst b/docs/source/reference/projections.rst
index 35a0bd2db..0721d09b1 100644
--- a/docs/source/reference/projections.rst
+++ b/docs/source/reference/projections.rst
@@ -341,6 +341,22 @@ OSGB
     ax.gridlines()
 
 
+LambertZoneII
+-------------
+
+.. autoclass:: cartopy.crs.LambertZoneII
+
+.. plot::
+
+    import matplotlib.pyplot as plt
+    import cartopy.crs as ccrs
+
+    plt.figure(figsize=(3.2687, 3))
+    ax = plt.axes(projection=ccrs.LambertZoneII())
+    ax.coastlines(resolution='10m')
+    ax.gridlines()
+
+
 EuroPP
 ------
 
diff --git a/docs/source/whatsnew/index.rst b/docs/source/whatsnew/index.rst
index f2b29716e..2d9c108a7 100644
--- a/docs/source/whatsnew/index.rst
+++ b/docs/source/whatsnew/index.rst
@@ -14,6 +14,7 @@ Versions
 .. toctree::
    :maxdepth: 2
 
+   v0.24
    v0.23
    v0.22
    v0.21
diff --git a/docs/source/whatsnew/v0.24.rst b/docs/source/whatsnew/v0.24.rst
new file mode 100644
index 000000000..f5891cfdb
--- /dev/null
+++ b/docs/source/whatsnew/v0.24.rst
@@ -0,0 +1,30 @@
+Version 0.24 (October 7, 2024)
+==============================
+
+Python 3.13 and Numpy 2 are supported and the new minimum supported versions
+of dependencies that have been updated are:
+
+* Python 3.10
+* Matplotlib 3.6
+
+Features
+--------
+
+* Ryan May fixed some internal usages of PlateCarree coordinates to use geodetic lat/lon
+  coordinates of the proper ellipse, improving boundary handling for some projections. (:pull:`2378`)
+
+* Ruth Comer added more improvements to gridlines, including title adjustments to avoid overlaps. (:pull:`2393`)
+
+* Eric Matti fixed an issue with gouraud shading when using wrapped coordinates in a pcolormesh. (:pull:`2401`)
+
+* Raphael Quast added the ability to use multi-path geometries as boundaries of the maps.
+  This means that an Axes doesn't have to be fully connected anymore and can be separate
+  land masses and avoid the oceans if a user wants. (:pull:`2362`)
+
+* Thibault Hallouin added the Lambert Zone II (epsg:27572) projection, which is widely
+  used for maps of mainland France. (:pull:`2427`)
+
+Deprecations and Removals
+-------------------------
+
+There are no new deprecations or removals in this release.


Test patch:
diff --git a/.github/workflows/ci-testing.yml b/.github/workflows/ci-testing.yml
index 1ffff569a..7cd8ba281 100644
--- a/.github/workflows/ci-testing.yml
+++ b/.github/workflows/ci-testing.yml
@@ -17,7 +17,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [ubuntu-latest, macos-latest, windows-latest]
-        python-version: ['3.10', '3.11', '3.12']
+        python-version: ['3.10', '3.11', '3.12', '3.13-dev']
         use-network: [true]
         include:
           - os: ubuntu-latest