Repository: SciTools/cartopy

Issue:
SegFault for initializing cartopy crs for Southern Hemisphere LambertAzimuthalEqualArea
### Description
Hello, I am trying to initialize a LambertAzimuthalEqualArea centered at the South Pole, but this generates a SegFault and crashes python.

I get this error on Mac OS X (High Sierra, 10.13.5) and Mac OS X (Sierra, 10.12.6).

I believe this may be only be a problem for the Southern hemisphere exactly at the South Pole, because it works correctly if I set it to the North Pole (central_latitude=90.0), and does not seg fault of I try other latitudes in the Southern Hemisphere besides the Pole.

#### Code to reproduce

```
(cartopy) $ python
Python 3.6.5 | packaged by conda-forge | (default, Apr  6 2018, 13:44:09) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cartopy.crs as ccrs
>>> e2s = ccrs.LambertAzimuthalEqualArea(central_latitude=-90.0)
IllegalArgumentException: Points of LinearRing do not form a closed linestring
Segmentation fault: 11
$ 
```

<details>
 <summary>Full environment definition</summary>

<!-- fill in the following information as appropriate -->

### Operating system
Mac OS X  

### Cartopy version
cartopy                   0.16.0                   py36_0    conda-forge

### conda list

```
I am attaching output from my conda list command.  I've made a fresh conda env using the environment recommended at the recent SciPy2018 tutorial.
[cartopy_env.txt](https://github.com/SciTools/cartopy/files/2246495/cartopy_env.txt)


```

</details>



Discussion:

Resolving patch:
diff --git a/lib/cartopy/crs.py b/lib/cartopy/crs.py
--- a/lib/cartopy/crs.py
+++ b/lib/cartopy/crs.py
@@ -1223,7 +1223,12 @@ def __init__(self, central_longitude=0.0, central_latitude=0.0,
                                                         globe=globe)
 
         a = np.float(self.globe.semimajor_axis or WGS84_SEMIMAJOR_AXIS)
-        lon, lat = central_longitude + 180, - central_latitude + 0.01
+
+        # Find the antipode, and shift it a small amount in latitude to
+        # approximate the extent of the projection:
+        lon = central_longitude + 180
+        sign = np.sign(central_latitude) or 1
+        lat = -central_latitude + sign * 0.01
         x, max_y = self.transform_point(lon, lat, PlateCarree())
 
         coords = _ellipse_boundary(a * 1.9999, max_y - false_northing,


Test patch:
diff --git a/lib/cartopy/tests/crs/test_lambert_azimuthal_equal_area.py b/lib/cartopy/tests/crs/test_lambert_azimuthal_equal_area.py
--- a/lib/cartopy/tests/crs/test_lambert_azimuthal_equal_area.py
+++ b/lib/cartopy/tests/crs/test_lambert_azimuthal_equal_area.py
@@ -1,4 +1,4 @@
-# (C) British Crown Copyright 2015 - 2017, Met Office
+# (C) British Crown Copyright 2015 - 2018, Met Office
 #
 # This file is part of cartopy.
 #
@@ -19,6 +19,7 @@
 
 import numpy as np
 from numpy.testing import assert_almost_equal
+import pytest
 
 import cartopy.crs as ccrs
 
@@ -59,3 +60,10 @@ def test_offset(self):
         assert crs_offset.proj4_init == expected
         assert tuple(np.array(crs.x_limits) + 1234) == crs_offset.x_limits
         assert tuple(np.array(crs.y_limits) - 4321) == crs_offset.y_limits
+
+    @pytest.mark.parametrize("latitude", [-90, 90])
+    def test_extrema(self, latitude):
+        crs = ccrs.LambertAzimuthalEqualArea(central_latitude=latitude)
+        expected = ('+ellps=WGS84 +proj=laea +lon_0=0.0 +lat_0={} '
+                    '+x_0=0.0 +y_0=0.0 +no_defs'.format(latitude))
+        assert crs.proj4_init == expected