PostGIS étend PostgreSQL avec des fonctions géospatiales et constitue l'épine dorsale de nombreux systèmes de cartographie de défense DGA/EMA. Pour un système de défense nécessitant de trouver chaque piste hostile à moins de 5 kilomètres d'une unité amie, calculer des intersections de couloir pour la planification d'itinéraires, stocker des polygones complexes de zones de menace et servir tout cela à un client cartographique en temps réel — le SQL standard avec des coordonnées virgule flottante est insuffisant.
Types de géométrie PostGIS pour les données militaires
Géométrie Point : Représente un emplacement unique — position de troupe, observation de capteur, fix de géolocalisation. Pour les positions 3D incluant l'altitude : ST_MakePoint(longitude, latitude, altitude_metres).
Géométrie LineString : Représente un chemin — itinéraire de véhicule, limite de patrouille. ST_Length calcule la longueur géodésique en tenant compte de la courbure terrestre.
Géométrie Polygon : Représente une zone — zone de menace, zone d'exclusion aérienne, secteur d'artillerie, limite de zone d'opérations. ST_Contains(polygon, point) teste la contenance ; ST_Intersects(polygon, linestring) teste si un itinéraire croise une zone.
Requêtes spatiales pour les opérations de défense
Requête de proximité de menace : Trouver toutes les pistes hostiles dans un rayon de 3 km d'une unité amie. L'utilisation de ST_DWithin avec le cast ::geography assure le calcul de distance géodésique et le filtrage efficace via l'index spatial.
Analyse de couloir : Trouver toutes les pistes ayant traversé un couloir défini au cours des 6 dernières heures. Stocker le couloir comme Polygon, interroger les positions de pistes dans la fenêtre temporelle via une jointure spatiale.
Surveillance des zones de menace : Jointure spatiale entre les positions actuelles et la table des zones de menace pour les alertes automatiques dans les systèmes C2.
Performance à l'échelle : index GiST et partitionnement
Chaque colonne de géométrie participant à des requêtes spatiales doit avoir un index GiST. Le partitionnement de la table track_history par période (partitions mensuelles) réduit considérablement le coût E/S des requêtes historiques.
Intégration avec le rendu cartographique : GeoJSON et MVT
ST_AsGeoJSON convertit la géométrie au format RFC 7946 GeoJSON. PostGIS 3.0+ prend en charge ST_AsMVT (format Mapbox Vector Tile) pour le rendu côté client. Servir des tuiles directement depuis PostGIS élimine le besoin d'un serveur de tuiles séparé.
Observation clé : Utilisez le type geography (calculs géodésiques sur le sphéroïde WGS84) pour tous les calculs opérationnels de distance et de surface. Mélanger les calculs geometry et geography sans documentation explicite est une source fréquente d'erreurs positionnelles subtiles dans les systèmes DGA/EMA.