Transform SRS and get Vertices of the Geometry¶
This example shows how to transform the spatial reference system of a polygon and extract its vertices using the coordinates of the new spatial reference system. However, this can lead to problems when the geometry intersects the antimeridian (±180° longitude line) in the original SRS. How to resolve this issue is demonstrated later.
Transform Spatial Reference System and Extract Vertices¶
First, create a polygon, then extract its vertices.
import geokit.srs
import geokit.geom
import matplotlib.pyplot as plt
aachen_pt = geokit.geom.point((6.083, 52.775), srs=geokit.srs.EPSG4326)
print(type(aachen_pt))
# Get the buffer around this point
aachen_buffered_area = aachen_pt.Buffer(1)
# Get a boundary
boundary_polygon = aachen_buffered_area.Boundary()
geokit.geom.extractVerticies(boundary_polygon)[:5, :]
<class 'osgeo.ogr.Geometry'>
array([[ 7.083 , 52.775 ],
[ 7.08162953, 52.72266404],
[ 7.0775219 , 52.67047154],
[ 7.07068834, 52.61856553],
[ 7.0611476 , 52.56708831]])
Transform Polygon and Extract Vertices¶
The polygon has been converted from SRS EPSG4326 to EPSG3857, and its vertices have been extracted.
# Get Points
boundary_polygon_3857 = geokit.geom.transform(boundary_polygon, toSRS=geokit.srs.EPSG3857)
geokit.geom.extractVerticies(boundary_polygon_3857)[:5, :]
array([[ 788475.95328876, 6941486.97274921],
[ 788323.39379549, 6931862.13450442],
[ 787866.13347064, 6922275.17314893],
[ 787105.42563299, 6912752.18910776],
[ 786043.35532983, 6903319.01626946]])
Compare the transformed Geometry¶
Lastly, the original geometry and the transformed geometry are compared. As expected, the original shape is distorted due to the spatial transformation.
fig, axs = plt.subplots(ncols=2, nrows=1, figsize=(12, 6))
ax_handle = geokit.geom.drawGeoms(boundary_polygon, figsize=(6, 6), ax=axs[0])
ax_handle = geokit.geom.drawGeoms(boundary_polygon_3857, figsize=(6, 6), ax=axs[1])
Deal with antimeridian issues¶
The transform() method shown hereabove can lead to problems when the geometry in its original SRS would intersect with the antimeridian (+/-180° longitude line).
Geokit contains several functions to deal with such issues.
- Apply the transform() function with revert360degProj flag to preserve geometry shape at the antimeridian
- Force the resulting geometry into the -/+180° range window
- Split given multipolygons which have been adapted to the -/+180° range but would actually be connected across the antimeridian
import pathlib
import geokit.geom
import geokit.vector
import geokit.srs
# Apply to a geometry close to the antimeridian
# NOTE: The inbuilt PROJ function would distort or even break the geometry since it shifts points "behind the antimeridian" by 360° - when reconnecting those with the non-shifted points, the geometry is broken.
# create a polygon near the antimeridian
polygon_4326 = geokit.geom.box((-179.9, -1, -175.9, 1), srs=geokit.srs.EPSG4326)
# now transform it to a centered LAEA projection
_laea = geokit.srs.centeredLAEA(geom=polygon_4326)
polygon_laea = geokit.geom.transform(polygon_4326, toSRS=_laea)
# buffer the polygon and plot
buffered_polygon_laea = polygon_laea.Buffer(100000)
geokit.geom.drawGeoms(buffered_polygon_laea, srs=_laea, figsize=(8, 4))
# now try to reproject to EPSG:4326 the "standard" way
buffered_polygon_4326_broken = geokit.geom.transform(buffered_polygon_laea, toSRS=4326)
print(buffered_polygon_4326_broken.GetEnvelope())
geokit.geom.drawGeoms(buffered_polygon_4326_broken, srs=4326, figsize=(8, 4))
# NOTE: Self-intersection and a polygon that ranges nearly across the whole world! See plot but also envelope above
# now use the revert360degProj = True flag to fix the shifted points
buffered_polygon_4326_fixed = geokit.geom.transform(buffered_polygon_laea, toSRS=4326, revert360degProj=True)
print(buffered_polygon_4326_fixed.GetEnvelope())
geokit.geom.drawGeoms(buffered_polygon_4326_fixed, srs=4326, figsize=(8, 4))
# NOTE how the polygon shape is correct now, with an extent over the antimeridian though!
(-175.80491336969473, 179.958807055332, -1.899246547313332, 1.899246547313332) (179.2013754989235, 184.9986245010765, -1.9043005679027192, 1.9043005679027192)
Warning 1: Self-intersection at or near point -175.80491336969473 1.899246547313332
AxHands(ax=<Axes: >, handles=[<matplotlib.patches.PathPatch object at 0x7054927e5310>], cbar=None)
# what if we need the polygon to be in the -180°/+180° longitude range convention?
# use the fixOutOfBoundsGeom() method to split and shift or clip the geometry
# first option: clip off whatever is beyond the -180°/180° range
buffered_polygon_4326_fixed_clipped = geokit.geom.fixOutOfBoundsGeoms(buffered_polygon_4326_fixed, how="clip")
geokit.geom.drawGeoms(buffered_polygon_4326_fixed_clipped, figsize=(3, 3))
# NOTE: Only the part in the -180°/180° range is kept (here the part on the left of the antimeridian)
# second option: shift clipped parts beyond the -180°/180° range back into it
buffered_polygon_4326_fixed_shifted = geokit.geom.fixOutOfBoundsGeoms(buffered_polygon_4326_fixed, how="shift")
geokit.geom.drawGeoms(buffered_polygon_4326_fixed_shifted)
# NOTE: The polygon is now in the -180°/180° range, but it is split into two parts
Warning 1: Non closed ring detected. Warning 1: Non closed ring detected.
AxHands(ax=<Axes: >, handles=[[<matplotlib.patches.PathPatch object at 0x70549aad8b90>, <matplotlib.patches.PathPatch object at 0x70549aad8cd0>]], cbar=None)
# Now we can also have multipolygons which were provided in a split version to observe the -/+180° latitude range convention
# Think of Fidji, a country spanning the antimeridian
# load the shape file of Fidji, a country spanning the antimeridian
import pathlib
from geokit.get_test_data import get_test_data
FJI_geom = geokit.vector.extractFeatures(
get_test_data(
file_name="FJI.shp",
)
).geom.iloc[0]
# FJI is split into two parts, one in the eastern hemisphere and one in the western hemisphere separated by the antimeridian
# in our example like mostly, the Western part has been shifted eastwards by 360 degrees
# that creates a problem when plotting the data or loading anything via the extent due to its huge extent of 360° longitude
# it also prevents distance measuring between parts east and west of the antimeridian
# the test plot demonstrates the problem
geokit.geom.drawGeoms(FJI_geom)
# NOTE how far it spreads, with some islands on the right and some on the left of the plot
# we can therefore extract each of the two parts separately
# demonstrate here for the part "right" of the antimeridian (i.e. East of antimeridian but West on the map)
FJI_right_geom = geokit.geom.divideMultipolygonIntoEasternAndWesternPart(geom=FJI_geom, side="right")
geokit.geom.drawGeoms(FJI_right_geom, figsize=(4, 4))
# (side='left' would return the part West of the antimeridian, i.e. East on the map)
# (side='both' would return both parts as a tuple of 2 geometries)
# side='main' returns the side with the largest total polygon area
FJI_main_geom = geokit.geom.divideMultipolygonIntoEasternAndWesternPart(geom=FJI_geom, side="main")
geokit.geom.drawGeoms(FJI_main_geom, figsize=(4, 4))
# NOTE: we can see that in our case, it is the part "left" of the antimeridian that has the largest area
AxHands(ax=<Axes: >, handles=[[<matplotlib.patches.PathPatch object at 0x70549097c7d0>, <matplotlib.patches.PathPatch object at 0x70549097c910>, <matplotlib.patches.PathPatch object at 0x70549097ca50>, <matplotlib.patches.PathPatch object at 0x70549097cb90>, <matplotlib.patches.PathPatch object at 0x70549097ccd0>, <matplotlib.patches.PathPatch object at 0x70549097ce10>, <matplotlib.patches.PathPatch object at 0x70549097cf50>, <matplotlib.patches.PathPatch object at 0x70549097d090>, <matplotlib.patches.PathPatch object at 0x70549097d1d0>, <matplotlib.patches.PathPatch object at 0x70549097d310>, <matplotlib.patches.PathPatch object at 0x70549097d450>, <matplotlib.patches.PathPatch object at 0x70549097d590>, <matplotlib.patches.PathPatch object at 0x70549097d6d0>, <matplotlib.patches.PathPatch object at 0x70549097d810>, <matplotlib.patches.PathPatch object at 0x70549097d950>, <matplotlib.patches.PathPatch object at 0x70549097da90>, <matplotlib.patches.PathPatch object at 0x70549097dbd0>, <matplotlib.patches.PathPatch object at 0x70549097dd10>, <matplotlib.patches.PathPatch object at 0x70549097de50>, <matplotlib.patches.PathPatch object at 0x70549097df90>, <matplotlib.patches.PathPatch object at 0x70549097e0d0>, <matplotlib.patches.PathPatch object at 0x70549097e210>, <matplotlib.patches.PathPatch object at 0x70549097e350>, <matplotlib.patches.PathPatch object at 0x70549097e490>, <matplotlib.patches.PathPatch object at 0x70549097e5d0>, <matplotlib.patches.PathPatch object at 0x70549097e710>, <matplotlib.patches.PathPatch object at 0x70549097e850>, <matplotlib.patches.PathPatch object at 0x70549097e990>, <matplotlib.patches.PathPatch object at 0x70549097ead0>, <matplotlib.patches.PathPatch object at 0x70549097ec10>, <matplotlib.patches.PathPatch object at 0x70549097ed50>, <matplotlib.patches.PathPatch object at 0x70549097ee90>, <matplotlib.patches.PathPatch object at 0x70549097efd0>, <matplotlib.patches.PathPatch object at 0x70549097f390>, <matplotlib.patches.PathPatch object at 0x70549097f4d0>, <matplotlib.patches.PathPatch object at 0x70549097f610>, <matplotlib.patches.PathPatch object at 0x70549097f750>, <matplotlib.patches.PathPatch object at 0x70549097f890>, <matplotlib.patches.PathPatch object at 0x70549097f9d0>, <matplotlib.patches.PathPatch object at 0x70549097fb10>, <matplotlib.patches.PathPatch object at 0x70549097fc50>, <matplotlib.patches.PathPatch object at 0x70549097f250>, <matplotlib.patches.PathPatch object at 0x70549097f110>, <matplotlib.patches.PathPatch object at 0x70549097fd90>, <matplotlib.patches.PathPatch object at 0x70549097fed0>, <matplotlib.patches.PathPatch object at 0x7054909f4050>, <matplotlib.patches.PathPatch object at 0x7054909f4190>, <matplotlib.patches.PathPatch object at 0x7054909f42d0>, <matplotlib.patches.PathPatch object at 0x7054909f4410>, <matplotlib.patches.PathPatch object at 0x7054909f4550>, <matplotlib.patches.PathPatch object at 0x7054909f4690>, <matplotlib.patches.PathPatch object at 0x7054909f47d0>, <matplotlib.patches.PathPatch object at 0x7054909f4910>, <matplotlib.patches.PathPatch object at 0x7054909f4a50>, <matplotlib.patches.PathPatch object at 0x7054909f4b90>, <matplotlib.patches.PathPatch object at 0x7054909f4cd0>, <matplotlib.patches.PathPatch object at 0x7054909f4e10>, <matplotlib.patches.PathPatch object at 0x7054909f4f50>, <matplotlib.patches.PathPatch object at 0x7054909f5090>, <matplotlib.patches.PathPatch object at 0x7054909f51d0>, <matplotlib.patches.PathPatch object at 0x7054909f5310>, <matplotlib.patches.PathPatch object at 0x7054909f5450>, <matplotlib.patches.PathPatch object at 0x7054909f5590>, <matplotlib.patches.PathPatch object at 0x7054909f56d0>, <matplotlib.patches.PathPatch object at 0x7054909f5810>, <matplotlib.patches.PathPatch object at 0x7054909f5950>, <matplotlib.patches.PathPatch object at 0x7054909f5a90>, <matplotlib.patches.PathPatch object at 0x7054909f5bd0>, <matplotlib.patches.PathPatch object at 0x7054909f5d10>, <matplotlib.patches.PathPatch object at 0x7054909f5e50>, <matplotlib.patches.PathPatch object at 0x7054909f5f90>, <matplotlib.patches.PathPatch object at 0x7054909f60d0>, <matplotlib.patches.PathPatch object at 0x7054909f6210>, <matplotlib.patches.PathPatch object at 0x7054909f6350>, <matplotlib.patches.PathPatch object at 0x7054909f6490>, <matplotlib.patches.PathPatch object at 0x7054909f65d0>, <matplotlib.patches.PathPatch object at 0x7054909f6710>, <matplotlib.patches.PathPatch object at 0x7054909f6850>, <matplotlib.patches.PathPatch object at 0x7054909f6990>, <matplotlib.patches.PathPatch object at 0x7054909f6ad0>, <matplotlib.patches.PathPatch object at 0x7054909f6c10>, <matplotlib.patches.PathPatch object at 0x7054909f6d50>, <matplotlib.patches.PathPatch object at 0x7054909f6e90>, <matplotlib.patches.PathPatch object at 0x7054909f6fd0>, <matplotlib.patches.PathPatch object at 0x7054909f7110>, <matplotlib.patches.PathPatch object at 0x7054909f7250>, <matplotlib.patches.PathPatch object at 0x7054909f7390>, <matplotlib.patches.PathPatch object at 0x7054909f74d0>, <matplotlib.patches.PathPatch object at 0x7054909f7610>, <matplotlib.patches.PathPatch object at 0x7054909f7750>, <matplotlib.patches.PathPatch object at 0x7054909f7890>, <matplotlib.patches.PathPatch object at 0x7054909f79d0>, <matplotlib.patches.PathPatch object at 0x7054909f7b10>, <matplotlib.patches.PathPatch object at 0x7054909f7c50>, <matplotlib.patches.PathPatch object at 0x7054909f7d90>, <matplotlib.patches.PathPatch object at 0x7054909f7ed0>, <matplotlib.patches.PathPatch object at 0x705490844050>, <matplotlib.patches.PathPatch object at 0x705490844190>, <matplotlib.patches.PathPatch object at 0x7054908442d0>, <matplotlib.patches.PathPatch object at 0x705490844410>, <matplotlib.patches.PathPatch object at 0x705490844550>, <matplotlib.patches.PathPatch object at 0x705490844690>, <matplotlib.patches.PathPatch object at 0x7054908447d0>, <matplotlib.patches.PathPatch object at 0x705490844910>, <matplotlib.patches.PathPatch object at 0x705490844a50>, <matplotlib.patches.PathPatch object at 0x705490844b90>, <matplotlib.patches.PathPatch object at 0x705490844cd0>, <matplotlib.patches.PathPatch object at 0x705490844e10>, <matplotlib.patches.PathPatch object at 0x705490844f50>, <matplotlib.patches.PathPatch object at 0x705490845090>, <matplotlib.patches.PathPatch object at 0x7054908451d0>, <matplotlib.patches.PathPatch object at 0x705490845310>, <matplotlib.patches.PathPatch object at 0x705490845450>, <matplotlib.patches.PathPatch object at 0x705490845590>, <matplotlib.patches.PathPatch object at 0x7054908456d0>, <matplotlib.patches.PathPatch object at 0x705490845810>, <matplotlib.patches.PathPatch object at 0x705490845950>, <matplotlib.patches.PathPatch object at 0x705490845a90>, <matplotlib.patches.PathPatch object at 0x705490845bd0>, <matplotlib.patches.PathPatch object at 0x705490845d10>, <matplotlib.patches.PathPatch object at 0x705490845e50>, <matplotlib.patches.PathPatch object at 0x705490845f90>, <matplotlib.patches.PathPatch object at 0x7054908460d0>, <matplotlib.patches.PathPatch object at 0x705490846210>, <matplotlib.patches.PathPatch object at 0x705490846350>, <matplotlib.patches.PathPatch object at 0x705490846490>, <matplotlib.patches.PathPatch object at 0x7054908465d0>, <matplotlib.patches.PathPatch object at 0x705490846710>, <matplotlib.patches.PathPatch object at 0x705490846850>, <matplotlib.patches.PathPatch object at 0x705490846990>, <matplotlib.patches.PathPatch object at 0x705490846ad0>, <matplotlib.patches.PathPatch object at 0x705490846c10>, <matplotlib.patches.PathPatch object at 0x705490846d50>, <matplotlib.patches.PathPatch object at 0x705490846e90>, <matplotlib.patches.PathPatch object at 0x705490846fd0>, <matplotlib.patches.PathPatch object at 0x705490847110>, <matplotlib.patches.PathPatch object at 0x705490847250>, <matplotlib.patches.PathPatch object at 0x705490847390>, <matplotlib.patches.PathPatch object at 0x7054908474d0>, <matplotlib.patches.PathPatch object at 0x705490847610>, <matplotlib.patches.PathPatch object at 0x705490847750>, <matplotlib.patches.PathPatch object at 0x705490847890>, <matplotlib.patches.PathPatch object at 0x7054908479d0>, <matplotlib.patches.PathPatch object at 0x705490847b10>, <matplotlib.patches.PathPatch object at 0x705490847c50>, <matplotlib.patches.PathPatch object at 0x705490847d90>, <matplotlib.patches.PathPatch object at 0x705490847ed0>, <matplotlib.patches.PathPatch object at 0x7054908a0050>, <matplotlib.patches.PathPatch object at 0x7054908a0190>, <matplotlib.patches.PathPatch object at 0x7054908a02d0>, <matplotlib.patches.PathPatch object at 0x7054908a0410>, <matplotlib.patches.PathPatch object at 0x7054908a0550>, <matplotlib.patches.PathPatch object at 0x7054908a0690>, <matplotlib.patches.PathPatch object at 0x7054908a07d0>, <matplotlib.patches.PathPatch object at 0x7054908a0910>, <matplotlib.patches.PathPatch object at 0x7054908a0a50>, <matplotlib.patches.PathPatch object at 0x7054908a0b90>, <matplotlib.patches.PathPatch object at 0x7054908a0cd0>, <matplotlib.patches.PathPatch object at 0x7054908a0e10>, <matplotlib.patches.PathPatch object at 0x7054908a0f50>, <matplotlib.patches.PathPatch object at 0x7054908a1090>, <matplotlib.patches.PathPatch object at 0x7054908a11d0>, <matplotlib.patches.PathPatch object at 0x7054908a1310>, <matplotlib.patches.PathPatch object at 0x7054908a1450>, <matplotlib.patches.PathPatch object at 0x7054908a1590>, <matplotlib.patches.PathPatch object at 0x7054908a16d0>, <matplotlib.patches.PathPatch object at 0x7054908a1810>, <matplotlib.patches.PathPatch object at 0x7054908a1950>, <matplotlib.patches.PathPatch object at 0x7054908a1a90>, <matplotlib.patches.PathPatch object at 0x7054908a1bd0>, <matplotlib.patches.PathPatch object at 0x7054908a1d10>, <matplotlib.patches.PathPatch object at 0x7054908a1e50>, <matplotlib.patches.PathPatch object at 0x7054908a1f90>, <matplotlib.patches.PathPatch object at 0x7054908a20d0>, <matplotlib.patches.PathPatch object at 0x7054908a2210>, <matplotlib.patches.PathPatch object at 0x7054908a2350>, <matplotlib.patches.PathPatch object at 0x7054908a2490>, <matplotlib.patches.PathPatch object at 0x7054908a25d0>, <matplotlib.patches.PathPatch object at 0x7054908a2710>, <matplotlib.patches.PathPatch object at 0x7054908a2850>, <matplotlib.patches.PathPatch object at 0x7054908a2990>, <matplotlib.patches.PathPatch object at 0x7054908a2ad0>, <matplotlib.patches.PathPatch object at 0x7054908a2c10>, <matplotlib.patches.PathPatch object at 0x7054908a2d50>, <matplotlib.patches.PathPatch object at 0x7054908a2e90>, <matplotlib.patches.PathPatch object at 0x7054908a2fd0>, <matplotlib.patches.PathPatch object at 0x7054908a3110>, <matplotlib.patches.PathPatch object at 0x7054908a3250>, <matplotlib.patches.PathPatch object at 0x7054908a3390>, <matplotlib.patches.PathPatch object at 0x7054908a34d0>, <matplotlib.patches.PathPatch object at 0x7054908a3610>, <matplotlib.patches.PathPatch object at 0x7054908a3750>, <matplotlib.patches.PathPatch object at 0x7054908a3890>, <matplotlib.patches.PathPatch object at 0x7054908a39d0>, <matplotlib.patches.PathPatch object at 0x7054908a3b10>, <matplotlib.patches.PathPatch object at 0x7054908a3c50>, <matplotlib.patches.PathPatch object at 0x7054908a3d90>, <matplotlib.patches.PathPatch object at 0x7054908a3ed0>, <matplotlib.patches.PathPatch object at 0x705490900050>, <matplotlib.patches.PathPatch object at 0x705490900190>, <matplotlib.patches.PathPatch object at 0x7054909002d0>, <matplotlib.patches.PathPatch object at 0x705490900410>, <matplotlib.patches.PathPatch object at 0x705490900550>, <matplotlib.patches.PathPatch object at 0x705490900690>, <matplotlib.patches.PathPatch object at 0x7054909007d0>, <matplotlib.patches.PathPatch object at 0x705490900910>, <matplotlib.patches.PathPatch object at 0x705490900a50>, <matplotlib.patches.PathPatch object at 0x705490900b90>, <matplotlib.patches.PathPatch object at 0x705490900cd0>, <matplotlib.patches.PathPatch object at 0x705490900e10>, <matplotlib.patches.PathPatch object at 0x705490900f50>, <matplotlib.patches.PathPatch object at 0x705490901090>, <matplotlib.patches.PathPatch object at 0x7054909011d0>, <matplotlib.patches.PathPatch object at 0x705490901310>, <matplotlib.patches.PathPatch object at 0x705490901450>, <matplotlib.patches.PathPatch object at 0x705490901590>, <matplotlib.patches.PathPatch object at 0x7054909016d0>, <matplotlib.patches.PathPatch object at 0x705490901810>, <matplotlib.patches.PathPatch object at 0x705490901950>, <matplotlib.patches.PathPatch object at 0x705490901a90>, <matplotlib.patches.PathPatch object at 0x705490901bd0>, <matplotlib.patches.PathPatch object at 0x705490901d10>, <matplotlib.patches.PathPatch object at 0x705490901e50>, <matplotlib.patches.PathPatch object at 0x705490901f90>, <matplotlib.patches.PathPatch object at 0x7054909020d0>, <matplotlib.patches.PathPatch object at 0x705490902210>, <matplotlib.patches.PathPatch object at 0x705490902350>, <matplotlib.patches.PathPatch object at 0x705490902490>, <matplotlib.patches.PathPatch object at 0x7054909025d0>, <matplotlib.patches.PathPatch object at 0x705490902710>, <matplotlib.patches.PathPatch object at 0x705490902850>, <matplotlib.patches.PathPatch object at 0x705490902990>, <matplotlib.patches.PathPatch object at 0x705490902ad0>, <matplotlib.patches.PathPatch object at 0x705490902c10>, <matplotlib.patches.PathPatch object at 0x705490902d50>, <matplotlib.patches.PathPatch object at 0x705490902e90>, <matplotlib.patches.PathPatch object at 0x705490902fd0>, <matplotlib.patches.PathPatch object at 0x705490903110>, <matplotlib.patches.PathPatch object at 0x705490903250>, <matplotlib.patches.PathPatch object at 0x705490903390>, <matplotlib.patches.PathPatch object at 0x7054909034d0>, <matplotlib.patches.PathPatch object at 0x705490903750>, <matplotlib.patches.PathPatch object at 0x705490903610>, <matplotlib.patches.PathPatch object at 0x705490903890>, <matplotlib.patches.PathPatch object at 0x7054909039d0>, <matplotlib.patches.PathPatch object at 0x705490903b10>, <matplotlib.patches.PathPatch object at 0x705490903c50>, <matplotlib.patches.PathPatch object at 0x705490903d90>, <matplotlib.patches.PathPatch object at 0x705490903ed0>, <matplotlib.patches.PathPatch object at 0x70549075c050>, <matplotlib.patches.PathPatch object at 0x70549075c190>, <matplotlib.patches.PathPatch object at 0x70549075c2d0>, <matplotlib.patches.PathPatch object at 0x70549075c410>, <matplotlib.patches.PathPatch object at 0x70549075c550>, <matplotlib.patches.PathPatch object at 0x70549075c690>, <matplotlib.patches.PathPatch object at 0x70549075c7d0>, <matplotlib.patches.PathPatch object at 0x70549075c910>, <matplotlib.patches.PathPatch object at 0x70549075ca50>, <matplotlib.patches.PathPatch object at 0x70549075cb90>, <matplotlib.patches.PathPatch object at 0x70549075ccd0>, <matplotlib.patches.PathPatch object at 0x70549075ce10>, <matplotlib.patches.PathPatch object at 0x70549075cf50>, <matplotlib.patches.PathPatch object at 0x70549075d090>, <matplotlib.patches.PathPatch object at 0x70549075d1d0>, <matplotlib.patches.PathPatch object at 0x70549075d310>, <matplotlib.patches.PathPatch object at 0x70549075d450>, <matplotlib.patches.PathPatch object at 0x70549075d590>, <matplotlib.patches.PathPatch object at 0x70549075d6d0>, <matplotlib.patches.PathPatch object at 0x70549075d810>, <matplotlib.patches.PathPatch object at 0x70549075d950>, <matplotlib.patches.PathPatch object at 0x70549075da90>, <matplotlib.patches.PathPatch object at 0x70549075dbd0>, <matplotlib.patches.PathPatch object at 0x70549075e210>, <matplotlib.patches.PathPatch object at 0x70549075dd10>]], cbar=None)