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 de rivière dans un rayon de 50 km autour de chaque ville ?

Pour un point unique (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() : applique une fonction à chaque valeur de la Series

Series.apply(function, **kwargs)

  • function : la fonction appelée pour chaque valeur ; la valeur est passée en 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

Appeler la fonction sur une géométrie unique :

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 affectation 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...