G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G...
Transcript of G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G...
![Page 1: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/1.jpg)
GEOS in the Python ecosystemJoris Van den Bossche, FOSS4G Belgium, October 24, 2019
https://github.com/jorisvandenbossche/talks/
@jorisvdbossche
1 / 29
![Page 2: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/2.jpg)
About meJoris Van den Bossche
Background: PhD bio-science engineer, air quality research
Open source enthusiast: pandas core dev, geopandas maintainer, scikit-
learn contributor
Currently freelance open source developer and teacher, working part-time
on Apache Arrow (at Ursa Labs)
https://github.com/jorisvandenbossche Twitter: @jorisvdbossche
2 / 29
![Page 3: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/3.jpg)
GEOS
3 / 29
![Page 4: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/4.jpg)
Vector processing in QGIS
4 / 29
![Page 5: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/5.jpg)
Vector processing in QGIS
➡ using the GEOS library under the hood.4 / 29
![Page 6: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/6.jpg)
Vector processing in PostgisExample from https://postgis.net/workshops/postgis-intro/:
SELECT subways.name AS subway_name, neighborhoods.name AS neighborhood_name, neighborhoods.boroname AS boroughFROM nyc_neighborhoods AS neighborhoodsJOIN nyc_subway_stations AS subwaysON ST_Contains(neighborhoods.geom, subways.geom)WHERE subways.name = 'Broad St';
5 / 29
![Page 7: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/7.jpg)
Vector processing in PostgisExample from https://postgis.net/workshops/postgis-intro/:
SELECT subways.name AS subway_name, neighborhoods.name AS neighborhood_name, neighborhoods.boroname AS boroughFROM nyc_neighborhoods AS neighborhoodsJOIN nyc_subway_stations AS subwaysON ST_Contains(neighborhoods.geom, subways.geom)WHERE subways.name = 'Broad St';
➡ using the GEOS library under the hood.5 / 29
![Page 8: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/8.jpg)
Vector processing in R (sf)Snippets from presentation last year(https://pokyah.shinyapps.io/foss4GBXL2018):
library(sf)
belgium = sf::st_as_sf( rnaturalearth::ne_states(country = 'belgium'))wallonia = belgium %>% dplyr::filter(region == "Walloon")grid = sf::st_intersection( grid, sf::st_transform(wallonia, crs = 3812))
6 / 29
![Page 9: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/9.jpg)
Vector processing in R (sf)Snippets from presentation last year(https://pokyah.shinyapps.io/foss4GBXL2018):
library(sf)
belgium = sf::st_as_sf( rnaturalearth::ne_states(country = 'belgium'))wallonia = belgium %>% dplyr::filter(region == "Walloon")grid = sf::st_intersection( grid, sf::st_transform(wallonia, crs = 3812))
➡ using the GEOS library under the hood.6 / 29
![Page 10: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/10.jpg)
Vector processing in PythonUsing Shapely and GeoPandas:
import geopandasimport shapely.geometry
districts = geopandas.read_file("paris_districts.gpkg")notre_dame = shapely.geometry.Point(452321, 5411311)
# filter districts that contain the pointdistricts[districts.contains(notre_dame)]
7 / 29
![Page 11: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/11.jpg)
Vector processing in PythonUsing Shapely and GeoPandas:
import geopandasimport shapely.geometry
districts = geopandas.read_file("paris_districts.gpkg")notre_dame = shapely.geometry.Point(452321, 5411311)
# filter districts that contain the pointdistricts[districts.contains(notre_dame)]
➡ using the GEOS library under the hood.7 / 29
![Page 12: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/12.jpg)
GEOS
Geometry Engine Open Source
C/C++ port of a subset of Java Topology Suite (JTS)
Most widely used geospatial C++ geometry library
Implements geometry objects (simple features), spatial predicate functions
and spatial operations, prepared geometries, STR spatial index, WKT/WKB
encoding and decoding
Used under the hood by many applications (GDAL, QGIS, PostGIS, MapServer,GRASS, GeoDjango, ...)
geos.osgeo.org
8 / 29
![Page 13: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/13.jpg)
Simple featuresSimple feature access - OGC / ISO standard:
9 / 29
![Page 15: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/15.jpg)
Spatial operations
11 / 29
![Page 16: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/16.jpg)
Spatial operations
12 / 29
![Page 17: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/17.jpg)
GEOS
Geometry Engine Open Source
C/C++ port of a subset of Java Topology Suite (JTS)
Most widely used geospatial C++ geometry library
Implements geometry objects (simple features), spatial predicate functions
and spatial operations, prepared geometries, STR spatial index, WKT/WKB
encoding and decoding
Used under the hood by many applications (GDAL, QGIS, PostGIS, MapServer,GRASS, GeoDjango, ...)
geos.osgeo.org
13 / 29
![Page 18: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/18.jpg)
GEOS in the Python ecosystem
14 / 29
![Page 19: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/19.jpg)
ShapelyPython package for the manipulation and analysis of geometric objects
Pythonic interface to GEOS
15 / 29
![Page 20: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/20.jpg)
ShapelyPython package for the manipulation and analysis of geometric objects
Pythonic interface to GEOS
>>> from shapely.geometry import Point, LineString, Polygon
>>> point = Point(1, 1)>>> line = LineString([(0, 0), (1, 2), (2, 2)])>>> poly = line.buffer(1)
>>> poly.contains(point)True
15 / 29
![Page 21: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/21.jpg)
ShapelyPython package for the manipulation and analysis of geometric objects
Pythonic interface to GEOS
>>> from shapely.geometry import Point, LineString, Polygon
>>> point = Point(1, 1)>>> line = LineString([(0, 0), (1, 2), (2, 2)])>>> poly = line.buffer(1)
>>> poly.contains(point)True
Nice interface to GEOS, but: single objects, no attributes
15 / 29
![Page 22: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/22.jpg)
GeoPandasMake working with tabular geospatial data in python easier by combiningShapely and pandas
Extends the pandas data analysis library to work with geographic objects
and spatial operations
Combines the power of whole ecosystem of (geo) tools (pandas, geos,
shapely, gdal, fiona, pyproj, rtree, ...)
Bridge between geospatial packages and the scientific / data science stack
Documentation: http://geopandas.readthedocs.io/
16 / 29
![Page 23: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/23.jpg)
GeoPandasMake working with tabular geospatial data in python easier by combiningShapely and pandas
>>> df = geopandas.read_file("ne_110m_admin_0_countries.shp")>>> df pop_est continent name iso_a3 gdp_md_est geometry0 920938 Oceania Fiji FJI 8374.0 MULTIPOLYGON (((180.00000 ...1 53950935 Africa Tanzania TZA 150600.0 POLYGON ((33.90371 -0.9500...2 603253 Africa W. Sahara ESH 906.5 POLYGON ((-8.66559 27.6564...3 35623680 North America Canada CAN 1674000.0 MULTIPOLYGON (((-122.84000..... ... ... ... ... ... ...
>>> df = df.to_crs(epsg=3857) >>> df.geometry.area / 1e9 0 21.2833371 952.2551752 117.1023383 52166.480440.. ...
17 / 29
![Page 24: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/24.jpg)
Why is GeoPandas slow?GeoPandas stores custom Python objects in arrays
For operations, it iterates through those objects
Those Python objects each call the GEOS C operation
Pandas Data Geometry
GEOSshapely
GEOSshapely
GEOSshapely
18 / 29
![Page 25: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/25.jpg)
Why is GeoPandas slow?GeoPandas stores custom Python objects in arrays
For operations, it iterates through those objects
Those Python objects each call the GEOS C operation
class GeoSeries: ...
def distance(self, other): result = [geom.distance(other) for geom in self.geometry] return pd.Series(result)
19 / 29
![Page 26: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/26.jpg)
Introducing PyGEOS
20 / 29
![Page 27: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/27.jpg)
Introducing PyGEOSNew library that exposes geospatial operations from GEOS into Python:
array-based
fast
21 / 29
![Page 28: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/28.jpg)
Introducing PyGEOSNew library that exposes geospatial operations from GEOS into Python:
array-based
fast
Started by Casper van der Wel:https://caspervdw.github.io/Introducing-Pygeos/
GitHub repo:https://github.com/pygeos/pygeos/
21 / 29
![Page 29: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/29.jpg)
Array-basedInstead of (using Shapely)
[poly.contains(point) for point in points]
you can do
pygeos.contains(poly, points)
22 / 29
![Page 30: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/30.jpg)
FastBenchmark for 1M points: contained in or distance to a polygon
Significant performance increase: 80x (contains) to 5x (distance) for thisexample
23 / 29
![Page 31: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/31.jpg)
Numpy "universal functions"Numpy universal functions (ufuncs) are vectorized functions that work onarrays element-by-element supporting numpy features such as broadcasting
Demo!
24 / 29
![Page 32: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/32.jpg)
Running in parallel (WIP)Possibility to run in parallel (releasing the GIL)
Combination with Dask (https://dask.org/):
# with pygeos, single coreres1 = pygeos.distance(points, poly)
# chunked using dask, multi-threadedpoints_chunked = dask.array.from_array(points, chunks=100_000)res2 = points_chunked.map_blocks(pygeos.distance, poly, dtype=float)
25 / 29
![Page 33: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/33.jpg)
Running in parallel (WIP)Possibility to run in parallel (releasing the GIL)
Combination with Dask (https://dask.org/):
# with pygeos, single coreres1 = pygeos.distance(points, poly)
# chunked using dask, multi-threadedpoints_chunked = dask.array.from_array(points, chunks=100_000)res2 = points_chunked.map_blocks(pygeos.distance, poly, dtype=float)
-> 3x speed-up on my 4 core laptop
25 / 29
![Page 34: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/34.jpg)
PyGEOS implementation ?pygeos.Geometry Python C extension type holding pointer to GEOS
Geometry object
Extension type ensures garbage collection on the Python level, but the
pointer is accessible from C without overhead
The ufuncs are implemented in C using the numpy C API
26 / 29
![Page 35: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/35.jpg)
Further workSpeed-up GeoPandas by leveraging PyGEOS
27 / 29
![Page 36: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/36.jpg)
Further workSpeed-up GeoPandas by leveraging PyGEOS
Integration with Shapely?
27 / 29
![Page 37: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/37.jpg)
Further workSpeed-up GeoPandas by leveraging PyGEOS
Integration with Shapely?
Spatial index (STRTree), spatial join
Prepared geometries
More coverage of GEOS functions
...
https://github.com/pygeos/pygeos/issues
27 / 29
![Page 38: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/38.jpg)
Want to try out? Contribute?Docs: https://pygeos.readthedocs.io
Install using conda:
$ conda install --channel conda-forge pygeos
Contribute: https://github.com/pygeos/pygeos/
28 / 29
![Page 39: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/39.jpg)
Want to try out? Contribute?Docs: https://pygeos.readthedocs.io
Install using conda:
$ conda install --channel conda-forge pygeos
Contribute: https://github.com/pygeos/pygeos/
Feedback and contributions very welcome!
28 / 29
![Page 40: G EOS i n t he P yth on ecosy stem Van den... · GR A SS, GeoDjango, ...) geos.osgeo.org 13 / 29. G EOS i n t he P yth on ecosy stem 14 / 29. S h a p e l y P ython package for the](https://reader035.fdocuments.us/reader035/viewer/2022070911/5fb362ca1d10063dc371528b/html5/thumbnails/40.jpg)
Thanks for listening! Questions?
Thanks to Casper Van der Wel for the collaboration
Those slides:
https://github.com/jorisvandenbossche/talks/
jorisvandenbossche.github.io/talks/2019_FOSS4GBE_pygeos
http://pygeos.readthedocs.io
29 / 29