-- ============================================================================= -- 04_airports.sql — table de référence des aérodromes d'Île-de-France -- -- Sert de liste d'exclusion à l'onglet « Départs hors aérodromes » : tout point -- de décollage situé dans le rayon d'un aérodrome ACTIF est écarté des -- résultats. Chaque site a son propre rayon, ajustable indépendamment. -- -- Le rayon n'est pas la taille de l'aérodrome mais la zone dans laquelle un -- avion en montée initiale est encore attribuable à ce terrain. Il est donc -- plus large pour les grandes plateformes (trajectoires de départ étendues) -- que pour un héliport. -- -- Usage : -- docker exec -i wordpress-postgres psql -U pgz_admin -d wpz_postgres \ -- -v ON_ERROR_STOP=1 < 04_airports.sql -- ============================================================================= \set ON_ERROR_STOP on CREATE TABLE IF NOT EXISTS adsb.airports ( id serial PRIMARY KEY, code text NOT NULL UNIQUE, -- code OACI (LFPG, LFPO, ...) nom text NOT NULL, lat double precision NOT NULL, lon double precision NOT NULL, rayon_km double precision NOT NULL DEFAULT 8, type text NOT NULL DEFAULT 'aerodrome', -- aeroport|aerodrome|heliport|base actif boolean NOT NULL DEFAULT true, commentaire text ); COMMENT ON TABLE adsb.airports IS 'Aérodromes connus, utilisés comme zones d''exclusion pour la détection des ' 'départs atypiques. actif=false désactive l''exclusion sans perdre la fiche.'; COMMENT ON COLUMN adsb.airports.rayon_km IS 'Rayon d''exclusion en km : zone dans laquelle une montée initiale est ' 'considérée comme issue de ce terrain.'; -- Colonne géographique générée, pour un ST_DWithin indexable ALTER TABLE adsb.airports ADD COLUMN IF NOT EXISTS geom geography(Point,4326) GENERATED ALWAYS AS (ST_SetSRID(ST_MakePoint(lon, lat), 4326)::geography) STORED; CREATE INDEX IF NOT EXISTS airports_geom_gix ON adsb.airports USING GIST (geom); CREATE INDEX IF NOT EXISTS airports_actif_idx ON adsb.airports (actif) WHERE actif; -- ── Données de référence ───────────────────────────────────────────────────── -- Rayons de départ, à ajuster selon les résultats observés. INSERT INTO adsb.airports (code, nom, lat, lon, rayon_km, type, commentaire) VALUES ('LFPG', 'Paris-Charles de Gaulle', 49.0097, 2.5479, 15, 'aeroport', 'Doublets de pistes, départs très étalés — rayon large'), ('LFPO', 'Paris-Orly', 48.7233, 2.3794, 12, 'aeroport', 'Départs vers le sud et l''ouest'), ('LFPB', 'Paris-Le Bourget', 48.9694, 2.4414, 10, 'aeroport', 'Aviation d''affaires, trafic dense en jets'), ('LFPV', 'Vélizy-Villacoublay', 48.7744, 2.2014, 8, 'base', 'Base aérienne 107 — à ~6 km de la station, très bien captée'), ('LFPN', 'Toussus-le-Noble', 48.7519, 2.1062, 8, 'aerodrome', 'Aviation légère et écoles — fort volume de tours de piste'), ('LFPZ', 'Saint-Cyr-l''École', 48.8081, 2.0736, 6, 'aerodrome', 'Aviation légère, planeurs'), ('LFPI', 'Paris-Issy-les-Moulineaux', 48.8331, 2.2725, 4, 'heliport', 'Héliport de Paris — à ~1 km de la station, couverture excellente'), ('LFPM', 'Melun-Villaroche', 48.6047, 2.6711, 8, 'aerodrome', 'Essais en vol et aviation générale'), ('LFPT', 'Pontoise-Cormeilles', 49.0966, 2.0408, 8, 'aerodrome', 'Aviation légère, école'), ('LFPL', 'Lognes-Émerainville', 48.8228, 2.6261, 6, 'aerodrome', 'Aviation légère'), ('LFPK', 'Coulommiers-Voisins', 48.8375, 3.0161, 8, 'aerodrome', 'Limite est de la couverture'), ('LFXU', 'Les Mureaux', 48.9983, 1.9433, 6, 'aerodrome', 'Aérodrome industriel'), ('LFPU', 'Moret-Épisy', 48.3422, 2.7986, 6, 'aerodrome', 'Planeurs — souvent hors de portée'), ('LFAI', 'Nangis-Les Loges', 48.5961, 3.0067, 6, 'aerodrome', 'Aviation légère, parachutisme'), ('LFOP', 'Rouen-Vallée de Seine', 49.3842, 1.1758, 10, 'aeroport', 'Hors couverture nominale — désactivable'), ('LFOB', 'Beauvais-Tillé', 49.4544, 2.1128, 12, 'aeroport', 'Limite nord de la couverture') ON CONFLICT (code) DO NOTHING; -- Sites au-delà de la portée utile : renseignés mais désactivés par défaut, -- pour éviter d'exclure inutilement des zones où l'on ne capte rien. UPDATE adsb.airports SET actif = false WHERE code IN ('LFOP', 'LFPU'); SELECT code, nom, rayon_km, type, actif FROM adsb.airports ORDER BY actif DESC, code;