Cartes des secteurs de contrôle de l'espace aérien civil français

Secteurs de contrôle ACC

Dernière mise à jour de l'article : 17/07/2017.

Je suis d'un tempérament plutôt curieux. De nombreux domaines sont susceptibles de m'intéresser. Le logiciel libre, la cartographie et l'aéronautique en font partie. Un sujet technique, un brin d'informatique, une pincée de créativité et un menu défi à relever ? Lorsqu'un projet personnel réunit certains ingrédients, c'est un plaisir que d'y consacrer du temps. Pour celui-ci, c'est carton plein.

Le problème

Le service de l'information aéronautique (SIA) — dépendant de la direction générale de l'aviation civile (DGAC) — publie de nombreux documents. Il y avait notamment, jusqu'à il y a quelques années, des cartes représentant les secteurs de contrôle de l'espace aérien civil français. Ces cartes ne sont plus produites mais les coordonnées géographiques des secteurs sont publiées en HTML.

Qu'à cela ne tienne. Je m'en vais réaliser ces cartes moi-même.

Site web du SIA : www.sia.aviation-civile.gouv.fr

Logo de la DGAC
Logo de la DGAC

Le problème du problème

Je suis profondément convaincu par le logiciel libre et l'esprit qui anime ce mouvement. Et quitte à faire les choses, autant qu'elles soient bien faites.

Les cartes réalisées seront diffusées sous licence CC BY-SA. Pour ce faire, il faut bien entendu que l'ensemble des éléments utilisés soient compatibles avec cette licence. Je pense m'en sortir assez facilement pour les données cartographiques de base. Quant à celles publiées par une administration publique, je m'interroge. Aucune information légale n'est disponible. Après deux messages envoyés via le formulaire de contact disponible sur le site web du SIA — laissés sans réponse — je change de stratégie et m'intéresse au droit encadrant généralement ce type de données.

Les licences Creative Commons, article Wikipédia : https://fr.wikipedia.org/wiki/Licence_Creative_Commons

Logo CC BY-SA
Logo de la licence CC BY-SA

Le problème du problème du problème

Présent sur Diaspora*, je soumets la question à Lionel Maurel qui semble plutôt bien tâter le sujet. Ayant certainement plein d'autres trucs à faire — ici, ici ou ici —, on peut comprendre qu'il ne se soit pas penché sur mon petit soucis. Plein de bonne volonté, je contacte Romaine Lubrique ; qui me renvoie vers OpenStreetMap France. Logique. C'est le président de l'association en personne qui me répond ; et me renvoie à son tour vers le SIA.

J'ai comme qui dirait l'impression de tourner en rond.

Je tente d'envoyer un petit courriel à data.gouv.fr, sans conviction ni plus de succès. Tant pis.

Puisque personne ne semble intéressé pour m'expliquer que j'ai tort, c'est que je dois certainement avoir raison. (Et pif ! Vous ne l'avez pas vu venir celle-là, hein ?)

QGIS

Le logiciel choisi pour réaliser la carte se nomme QGIS, le « système d'information géographique libre et open source » publié sous licence GNU GPL v2. Lequel est d'ailleurs présent dans les dépôts logiciels officiels de la Debian GNU/Linux « Stretch » qui propulse mon ordinateur portable. Facile. Afin de pouvoir profiter de la dernière version du programme, un dépôt spécifique à ajouter au gestionnaire de paquets est proposé.

Site web de QGIS : www.qgis.org

Logo de QGIS
Logo de QGIS

Ma compétence en matière de cartographie se résume grossièrement à une contribution au projet OpenStreetMap. Et même si ça m'éclate, je suis loin d'être géomaticien. Je ne m'étais pas vraiment intéressé aux systèmes d'information géographiques (SIG), et la découverte de QGIS a été une excellente surprise. Ce logiciel est une merveille. Il est possible de se connecter à de nombreux serveurs Internet afin de télécharger de multiples jeux de données, ainsi que d'importer une foule de fichiers standards. Le logiciel est très puissant et le composeur de rendus truffé d'options. Il m'a fallu un peu de temps pour prendre l'outil en main, mais c'est avec plaisir que j'en découvre les fonctionnalités.

Fenêtre principale de QGIS
Fenêtre principale de QGIS
Composeur de rendu de QGIS
Composeur de rendu de QGIS

Police d'écriture

La police d'écriture choisie se nomme Alegreya. Publiée sous licence SIL OFL 1.1, son auteur est Juan Pablo del Peral. Elle peut être téléchargée en de nombreux endroits, notamment sur Font Squirrel.

Aperçu de la police d'écriture Alegreya
Police d'écriture Alegreya

Données cartographiques

Les données cartographiques choisies, élevées dans le domaine public, sont issues de Natural Earth.

Initié par des nord-américains, le projet regroupe des contributeurs de tout horizon. L'objectif est de centraliser un maximum de données cartographiques libres de droit afin de les mettre à la disposition du plus grand nombre. Tout un chacun est invité à participer.

Mes besoins étant assez rudimentaires, je ne me suis servi que de trois jeux de données : les frontières nationales, les limites départementales et les principales villes de France et du Monde. Les données aéroportuaires proposées par Natural Earth étant assez limitées, je me suis tourné vers le projet OurAirports.

Logo de Natural Earth
Logo de Natural Earth

Données du SIA

Comme je l'expliquais plus haut, le SIA publie les coordonnées géographiques des secteurs de contrôle de l'espace aérien civil national. Sur une page web, au format HTML. Laquelle contient également tout un tas de données non pertinentes pour mon projet. De quoi s'amuser un brin.

La page concernée, intitulée « ENR 3.8 Secteurs de contrôle ACC/UAC », peut être enregistrée localement. Grâce à mes dix doigts — et à grands coups de sed et de awk bien dégueulasses — j'ai confectionné un script Bash qui prend le fichier HTML original en entrée et me sort un fichier GeoJSON contenant l'ensemble des données utiles en sortie. Lequel fichier peut-être directement importé dans QGIS pour traitement. Classieux.

Le script est disponible ci-dessous. Je m'excuse par avance auprès de la confédération des ninjas ceinture noire ès Bash troisième dan pour sa piètre qualité. Je suis ouvert à toute proposition d'amélioration.

#!/bin/bash
 
# Script d'extraction des données géographiques relatives
# aux secteurs de contrôle de l'espace aérien civil français
# depuis la page HTML ENR 3.8 du service de l'information
# aéronautique (SIA, www.sia.aviation-civil.gouv.fr) en format
# GeoJSON sur la sortie standard.
#
# Auteur : Cyprien Pouzenc (cyprien@cypouz.com)
# Date de création : 2014-10-17
# Dernière modification : 2017-07-12
 
 
# Message d'aide.
helpmsg ()
{
cat << EOF
 
$(basename $0) extracts geographic data from ENR 3.8 HTML file
to GeoJSON format on standard output.
 
Usage: ./$(basename $0) input_file.html
 
EOF
}
 
if [[ $1 == "" ]] ; then
    helpmsg
    exit 0;
fi
 
 
cat "$1" |
 
# Sélection des lignes de données utiles.
grep -e "AIRSPACE.TXT_NAME\\"" \\
     -e "AIRSPACE.VAL_DIST_VER_UPPER" \\
     -e "AIRSPACE.VAL_DIST_VER_LOWER" \\
     -e "AIRSPACE_VERTEX.GEO" \\
     -e "AmdtInsertedAIRAC" |

# Suppression du formatage.
sed "
    s/^.*>\\(.*\\)<.*$/\\1/g
    /Frontière/d
    /</d
" |

# Réunion des coordonnées.
sed '/^[[:digit:]]/ {N; s/\\n/,/}' |

# Préparation/nettoyage des coordonnées.
awk 'BEGIN {
    FS=",";
}
 
function sanitize_coordinates(coordinates) {
    if (coordinates ~ /^.*°..'"'"'.."[NSEWO]/) {
        gsub(/^.*W/, "-&", coordinates)
        gsub(/[°"'"'"'NSEWO]/, " ", coordinates)
    }
        return coordinates
}
 
{
    print sanitize_coordinates($1), sanitize_coordinates($2);
}' |
 
# Conversion des coordonnées sexagécimales en décimales.
awk 'function compute_coordinates(coordinates) {
        if (coordinates ~ /^[0-9 ]*$/) {
            latitude = $1 + ($2+($3/60))/60
            longitude = $4 + ($5+($6/60))/60
            return longitude ", " latitude
        } else if (coordinates ~ /\\-[0-9 ]*$/) {
            latitude = $1 + ($2+($3/60))/60
            longitude = -(-$4 + ($5+($6/60))/60)
            return longitude ", " latitude
        } else
            return coordinates
    }
 
{
    print compute_coordinates($0);
}' |
 
# Formatage GeoJSON.
sed '/^[[:alpha:]]/ {
    N; N;
    s/ *\\n/, /g;
    s/ $//;
    s/^/    { "type": "Feature",\\n      \\"properties\\": {\\n        \\"description\\": \\"/;
    s/$/"\\n      },\\n      "geometry": {\\n        "type": "Polygon",\\n        "coordinates": [\\n          [/
}' |
sed '/^-\\?[[:digit:]]/ {s/^.*$/            [&]/}' |
sed ':x; /[-\\?[[:digit:]].*]$/ {s/]\\n/],\\n/; N; bx}' |
sed '/[[:digit:]]]$/ s/$/\\n          ]\\n        ]\\n      }\\n    },/' |
sed '1i { "type": "FeatureCollection",\\n  "features": [' |
sed '$c\\    }\\n  ]\\n}'

Pour s'en servir, rien de plus simple. Si le script est enregistré dans un fichier nommé parse_enr38.sh, la page web originale dans un fichier nommé page.html et que l'on souhaite récupérer les données au format GeoJSON dans un fichier nommé data.geojson, il suffit d’exécuter la commande suivante :

./parse_enr38.sh page.html > data.geojson

Le résultat obtenu peut être téléchargé ici (GeoJSON, 129 ko).

À noter que les secteurs de contrôle ne sont pas triés. Ce travail est à réaliser manuellement dans QGIS afin de les regrouper comme bon nous semble.

Voilà enfin de quoi faire joujou !

Secteurs de contrôle

L'espace aérien civil français est découpé en de nombreux secteurs de contrôle géographiques et altimétriques. Les cinq centres de contrôles régionaux, couvrant l'intégralité du territoire national, sont chargés du trafic en croisière — ou « en route » — tandis que les nombreux centres de contrôles d'approche s'occupent des abords d'aérodromes. Les communications s'opèrent par radio. Chaque secteur dispose de sa propre fréquence. Néanmoins, en fonction du trafic, les secteurs peuvent être regroupés afin d'en faciliter la gestion à moindre personnel. Ainsi, durant son trajet, un avion va traverser de multiples secteurs, changeant régulièrement d'interlocuteur et de fréquence.

Le contrôle aérien, article Wikipédia : https://fr.wikipedia.org/wiki/Contrôle_aérien

Produire une carte des secteurs de contrôle n'est pas une mince affaire. Globalement, on peut définir une couche de secteurs de basse altitude (Area Control Center, ACC) et trois couches de secteurs de haute altitude (Upper Area Control, UAC) ; chaque zone géographique disposant alors de quatre niveaux de navigation. Dans les faits, ce n'est pas aussi simple. Les secteurs ne disposent pas systématiquement de limites communes, dans le plan comme dans l'espace. On peut trouver deux couches de basse altitude, jusqu'à cinq couches de haute altitude et trois couches intermédiaires de cas particuliers... Sans même parler des plafonds et planchers obliques. Un sacré bazar. Aussi, il paraît compliqué de réaliser une synthèse à la fois juste et claire. Et l'on peut alors comprendre que le SIA ait arrêté de produire une telle carte.

Il faut donc faire des choix. On peut décider d'être exhaustif et réaliser de nombreuses cartes afin de reproduire l'ensemble des secteurs de contrôle ; et rater ainsi l'intérêt initial de la représentation cartographique qui se veut une lecture facilitée d'un jeu de données. Soit on décide de tricher. C'est ce que j'ai fait.

Si l'on s'en tient au modèle simplifié, il est possible de tracer deux cartes aussi génériques que possible. L'une pour l'espace inférieur, l'autre pour l'espace supérieur. Elles sont globalement justes, sauf à y regarder dans le détail. La région parisienne — au nord de Valence, donc — est certainement la plus entachée d'erreurs, tant l'enchevêtrement des secteurs y est complexe.

Les choix que j'ai fait sont certainement discutables. Aussi, j'invite quiconque maîtrisant le sujet à éclairer ma lanterne afin d'améliorer le rendu.

Téléchargement

Les cartes sont disponibles en haute résolution aux liens suivants :

Secteurs de contrôle ACC
Carte des secteurs de contrôle ACC
Secteurs de contrôle UAC
Carte des secteurs de contrôle UAC

    Journal des modifications

    17/07/2017 — Réécriture du script d'extraction des données — qui ne sont plus publiées en PDF mais en HTML. Mise à jour des cartes. Amélioration du rendu.
    11/03/2015 — Nouvelle source de données pour les aéroports. Ajout des capitales des états limitrophes.
    20/02/2015 — Distinction des secteurs de contrôles de chaque FIR (flight information region, région d'information de vol) par des couleurs différentes.

    Vus : 1558
    Publié par Cyprien Pouzenc : 27