Appliquer des opérations spatiales personnalisées

Travailler avec des données géospatiales en Python

Joris Van den Bossche

Open source software developer and teacher, GeoPandas maintainer

Travailler avec des données géospatiales en Python

Longueur totale des rivières à 50 km de chaque ville ?

Pour un seul point (cairo) :

area = cairo.buffer(50000)

rivers_within_area = rivers.intersection(area)
print(rivers_within_area.length.sum() / 1000)
186.397219642
Travailler avec des données géospatiales en Python

La méthode apply()

Series.apply() : appeler une fonction sur chaque valeur de la Series

Series.apply(function, **kwargs)

  • function : fonction appelée pour chaque valeur ; la valeur est le premier argument
  • **kwargs : arguments supplémentaires transmis à la fonction

Pour une GeoSeries, la fonction est appelée comme function(geom, **kwargs) pour chaque geom de la GeoSeries

Travailler avec des données géospatiales en Python

Appliquer une opération spatiale personnalisée

La fonction à appliquer :

def river_length(geom, rivers):
    area = geom.buffer(50000)
    rivers_within_area = rivers.intersection(area)
    return rivers_within_area.length.sum() / 1000

Appel de la fonction sur une seule géométrie :

river_length(cairo, rivers=rivers)
186.3972196423455

Application à toutes les villes :

cities.geometry.apply(river_length, rivers=rivers)
Travailler avec des données géospatiales en Python

Appliquer une opération spatiale personnalisée

Application à toutes les villes :

cities.geometry.apply(river_length, rivers=rivers)
0        0.000000
1        0.000000
2      106.072198
          ...    
Travailler avec des données géospatiales en Python

Appliquer une opération spatiale personnalisée

Application à toutes les villes et attribution du résultat à une nouvelle colonne :

cities['river_length'] = cities.geometry.apply(river_length, rivers=rivers)
cities.head()
             name                       geometry  river_length
0    Vatican City    POINT (1386304.6 5146502.5)      0.000000
1      San Marino    POINT (1385011.5 5455558.1)      0.000000
2           Vaduz    POINT (1059390.7 5963928.5)    106.072198
..            ...                            ...           ...
Travailler avec des données géospatiales en Python

Passons à la pratique !

Travailler avec des données géospatiales en Python

Preparing Video For Download...