Spatial relationships with GeoPandas

Lavorare con i dati geospaziali in Python

Dani Arribas-Bel

Geographic Data Science Lab (University of Liverpool)

Element-wise spatial relationship methods

brussels.within(france)
False
paris.within(france)
True
Lavorare con i dati geospaziali in Python

Element-wise spatial relationship methods

brussels.within(france)
False

For full GeoDataFrame?

cities.head()
           name                                      geometry
0  Vatican City   POINT (12.45338654497177 41.90328217996012)
1    San Marino     POINT (12.44177015780014 43.936095834768)
2         Vaduz   POINT (9.516669472907267 47.13372377429357)
3       Lobamba  POINT (31.19999710971274 -26.46666746135247)
...
Lavorare con i dati geospaziali in Python

Element-wise spatial relationship methods

The within() operation for each geometry in cities:

cities.within(france)
0      False
1      False
2      False
       ...  
240    False
241    False
242    False
Length: 243, dtype: bool
cities['geometry'][0].within(france)
False
cities['geometry'][1].within(france)
False
cities['geometry'][2].within(france)
False

...

Lavorare con i dati geospaziali in Python

Filtering by spatial relation

Filter cities depending on the within() operation:

cities[cities.within(france)]
        name                                     geometry
10    Monaco  POINT (7.406913173465057 43.73964568785249)
13   Andorra    POINT (1.51648596050552 42.5000014435459)
235    Paris   POINT (2.33138946713035 48.86863878981461)
Lavorare con i dati geospaziali in Python

Filtering by spatial relation

Which countries does the Amazon flow through?

rivers = geopandas.read_file("ne_50m_rivers_lake_centerlines.shp")
rivers.head()
              type      name                                 geometry
0  Lake Centerline      Kama  LINESTRING (51.94 55.70, 51.88 55.69...
1            River      Kama  LINESTRING (53.69 58.21, 53.68 58.27...
2  Lake Centerline      Abay  LINESTRING (37.11 11.85, 37.15 11.89...
...
amazon = rivers[rivers['name'] == 'Amazonas'].geometry.squeeze()
mask = countries.intersects(amazon)
Lavorare con i dati geospaziali in Python

Filtering by spatial relation

countries[mask]
         name      continent                                 geometry
22     Brazil  South America  POLYGON ((-57.63 -30.22, -56.29 -28....
35   Colombia  South America  POLYGON ((-66.88 1.25, -67.07 1.13, ...
124      Peru  South America  POLYGON ((-69.53 -10.95, -68.67 -12....
  • within
  • contains
  • intersects

More at https://shapely.readthedocs.io/en/latest/

Lavorare con i dati geospaziali in Python

Shapely objects

paris.within(france)
True

GeoPandas

cities.within(france)
0      False
1      False
2      False
       ...
france.intersects(amazon)
False
countries.intersects(amazon)
0      False
1      False
2      False
       ...
Lavorare con i dati geospaziali in Python

Let's practice!

Lavorare con i dati geospaziali in Python

Preparing Video For Download...