1.Chargement du fichier des obstacles dans GeoPandas :

In [1]:
import geopandas as gpd

url = "obstacles.geojson"
df_obstacle = gpd.read_file(url)
df_obstacle.head()
Out[1]:
description elevation height light name vertical_unit marked geometry
0 Pylône 318 167 N 22033 FT None POINT (-1.92389 48.49333)
1 Pylône 2096 177 N 23005 FT None POINT (2.17667 45.88639)
2 Pylône 2766 180 N 23006 FT None POINT (2.44333 45.91333)
3 Pylône 3120 167 N 12004 FT None POINT (3.08278 44.27500)
4 Pylône 2103 167 N 12003 FT None POINT (3.08194 44.19028)

Remarquons la présence de la colonne geometry de type POINT.


2.Calcul et ajout des unités métriques

Les hauteurs des obstacles sont indiquées en pied vertical_unit=FT. Elles seront plus compréhensibles si elles sont exprimées en mètres.

In [2]:
# renommer les colonnes existantes en ajoutant le suffixe '_ft'

df_obstacle.rename(columns={
    'elevation':'elevation_ft',
    'height':'height_ft',
    }, inplace=True)
df_obstacle.head()
Out[2]:
description elevation_ft height_ft light name vertical_unit marked geometry
0 Pylône 318 167 N 22033 FT None POINT (-1.92389 48.49333)
1 Pylône 2096 177 N 23005 FT None POINT (2.17667 45.88639)
2 Pylône 2766 180 N 23006 FT None POINT (2.44333 45.91333)
3 Pylône 3120 167 N 12004 FT None POINT (3.08278 44.27500)
4 Pylône 2103 167 N 12003 FT None POINT (3.08194 44.19028)
In [3]:
# créer les colonnes métriques avec un suffixe '_m'
# calculer ces colonnes métriques, arrondies à l'entier près

df_obstacle['elevation_m'] = (df_obstacle['elevation_ft'].astype(int) * 0.3048).astype(int)
df_obstacle['height_m'] = (df_obstacle['height_ft'].astype(int) * 0.3048).astype(int)
df_obstacle.head()
Out[3]:
description elevation_ft height_ft light name vertical_unit marked geometry elevation_m height_m
0 Pylône 318 167 N 22033 FT None POINT (-1.92389 48.49333) 96 50
1 Pylône 2096 177 N 23005 FT None POINT (2.17667 45.88639) 638 53
2 Pylône 2766 180 N 23006 FT None POINT (2.44333 45.91333) 843 54
3 Pylône 3120 167 N 12004 FT None POINT (3.08278 44.27500) 950 50
4 Pylône 2103 167 N 12003 FT None POINT (3.08194 44.19028) 640 50
In [4]:
# arranger l'ordre des colonnes

cols = df_obstacle.columns.tolist()
cols = ['description',
        'elevation_ft',
        'elevation_m',
        'height_ft',
        'height_m',
        'light',
        'marked',
        'name',
        'vertical_unit',
        'geometry',
       ]
df_obstacle = df_obstacle[cols]
df_obstacle.head()
Out[4]:
description elevation_ft elevation_m height_ft height_m light marked name vertical_unit geometry
0 Pylône 318 96 167 50 N None 22033 FT POINT (-1.92389 48.49333)
1 Pylône 2096 638 177 53 N None 23005 FT POINT (2.17667 45.88639)
2 Pylône 2766 843 180 54 N None 23006 FT POINT (2.44333 45.91333)
3 Pylône 3120 950 167 50 N None 12004 FT POINT (3.08278 44.27500)
4 Pylône 2103 640 167 50 N None 12003 FT POINT (3.08194 44.19028)

3.Filtre sur les mâts de mesure

Les obstacles à la navigation sont de différentes natures, il n'y a pas que des mâts de mesure du vent. Nous pouvons dresser la liste par types d'obstacles.

In [5]:
# visualiser les types d'obstacles

print(df_obstacle.description.unique())
['Pylône' 'Silo' 'Cheminée' 'Antenne' 'Tour' "Château d'eau"
 'Centrale thermique' 'Mât' 'Eglise' 'Eolienne(s)' 'Bâtiment' 'Câble'
 'Grue' 'Portique' 'Phare marin' 'Terril' 'Torchère' 'Treillis métallique'
 'Derrick' 'Pile de pont' 'Autre']

Dans cet exercice, seuls les mâts de mesure du vent Mât nous intéressent, nous pouvons les isoler :

In [6]:
df_mat = df_obstacle.loc[df_obstacle['description'] == 'Mât']
df_mat.head()
Out[6]:
description elevation_ft elevation_m height_ft height_m light marked name vertical_unit geometry
217 Mât 423 128 328 99 Y None 78017 FT POINT (2.13694 48.98278)
256 Mât 587 178 223 67 N None 45036 FT POINT (2.10389 47.90333)
293 Mât 492 149 164 49 N None 02037 FT POINT (3.29889 49.86472)
300 Mât 623 189 184 56 N None 27054 FT POINT (0.58472 49.39861)
482 Mât 692 210 171 52 N None 78036 FT POINT (1.92000 48.55583)

Nous pouvons calculer le nombre de mâts :

In [7]:
print("Il y a "+str(len(df_mat))+" mâts de mesure du vent répertoriés dans ce fichier.")
Il y a 979 mâts de mesure du vent répertoriés dans ce fichier.