Export airfield data to yaml, switch to ID keys.

This exports all the old AIRFIELD_DATA to yaml files. It's easier for
users to send fixes if it's defined this way, and they can also fix it
in their install without having to wait for a new release.

This also switches the indexes from the unstable DCS airfield names to
airfield IDs, so this fixes another case of DCS updates occasionally
breaking Liberation.

I also ended up finding quite a few typos in airfield names, and
incorrect theater names in the process. Those have been fixed.
This commit is contained in:
Dan Albert 2022-02-11 01:35:03 -08:00
parent 079f19a66e
commit 011d8a4e12
181 changed files with 2673 additions and 1547 deletions

View File

@ -71,7 +71,7 @@ class FlightGroupConfigurator:
divert = None
if self.flight.divert is not None:
divert = self.flight.divert.active_runway(
self.game.conditions, self.dynamic_runways
self.game.theater, self.game.conditions, self.dynamic_runways
)
mission_start_time, waypoints = WaypointGenerator(
@ -93,10 +93,10 @@ class FlightGroupConfigurator:
friendly=self.flight.from_cp.captured,
departure_delay=mission_start_time,
departure=self.flight.departure.active_runway(
self.game.conditions, self.dynamic_runways
self.game.theater, self.game.conditions, self.dynamic_runways
),
arrival=self.flight.arrival.active_runway(
self.game.conditions, self.dynamic_runways
self.game.theater, self.game.conditions, self.dynamic_runways
),
divert=divert,
waypoints=waypoints,

View File

@ -11,16 +11,16 @@ from dcs.coalition import Coalition
from dcs.countries import country_dict
from game import db
from game.radio.radios import RadioFrequency, RadioRegistry
from game.radio.tacan import TacanRegistry
from game.theater.bullseye import Bullseye
from game.theater import Airfield, FrontLine
from game.unitmap import UnitMap
from gen.airfields import AIRFIELD_DATA
from gen.naming import namegen
from game.missiongenerator.aircraft.aircraftgenerator import (
AircraftGenerator,
)
from game.radio.radios import RadioFrequency, RadioRegistry
from game.radio.tacan import TacanRegistry
from game.theater import Airfield, FrontLine
from game.theater.bullseye import Bullseye
from game.unitmap import UnitMap
from gen.airfields import AirfieldData
from gen.naming import namegen
from .aircraft.flightdata import FlightData
from .airsupport import AirSupport
from .airsupportgenerator import AirSupportGenerator
@ -173,8 +173,8 @@ class MissionGenerator:
def initialize_radio_registry(
self, unique_map_frequencies: set[RadioFrequency]
) -> None:
for data in AIRFIELD_DATA.values():
if data.theater == self.game.theater.terrain.name and data.atc:
for data in AirfieldData.for_theater(self.game.theater):
if data.atc is not None:
unique_map_frequencies.add(data.atc.hf)
unique_map_frequencies.add(data.atc.vhf_fm)
unique_map_frequencies.add(data.atc.vhf_am)

View File

@ -1,6 +1,9 @@
"""Radio frequency types and allocators."""
from __future__ import annotations
import itertools
import logging
import re
from dataclasses import dataclass
from typing import Dict, FrozenSet, Iterator, List, Set, Tuple
@ -35,13 +38,37 @@ class RadioFrequency:
"""
return self.hertz / 1000000
@classmethod
def parse(cls, text: str) -> RadioFrequency:
match = re.match(r"""^(\d+)(?:\.(\d{1,3}))? (MHz|kHz)$""", text)
if match is None:
raise ValueError(f"Could not parse radio frequency from {text}")
whole = int(match.group(1))
partial_str = match.group(2)
units = match.group(3)
partial = 0
if partial_str is not None:
partial = int(partial_str)
if len(partial_str) == 1:
partial *= 100
elif len(partial_str) == 2:
partial *= 10
if units == "MHz":
return MHz(whole, partial)
if units == "kHz":
return kHz(whole, partial)
raise ValueError(f"Unexpected units in radio frequency: {units}")
def MHz(num: int, khz: int = 0) -> RadioFrequency:
return RadioFrequency(num * 1000000 + khz * 1000)
def kHz(num: int) -> RadioFrequency:
return RadioFrequency(num * 1000)
def kHz(num: int, hz: int = 0) -> RadioFrequency:
return RadioFrequency(num * 1000 + hz)
@dataclass(frozen=True)

View File

@ -1,4 +1,7 @@
"""TACAN channel handling."""
from __future__ import annotations
import re
from dataclasses import dataclass
from enum import Enum
from typing import Dict, Iterator, Set
@ -45,6 +48,16 @@ class TacanChannel:
def __str__(self) -> str:
return f"{self.number}{self.band.value}"
@classmethod
def parse(cls, text: str) -> TacanChannel:
match = re.match(r"""^(\d{1,3})([XY])$""", text)
if match is None:
raise ValueError(f"Could not parse TACAN from {text}")
number = int(match.group(1))
if not number:
raise ValueError("TACAN channel cannot be 0")
return TacanChannel(number, TacanBand(match.group(2)))
class OutOfTacanChannelsError(RuntimeError):
"""Raised when all channels in this band have been allocated."""

View File

@ -7,33 +7,26 @@ import math
from abc import ABC, abstractmethod
from collections import defaultdict
from dataclasses import dataclass, field
from enum import Enum, unique, auto, IntEnum
from functools import total_ordering, cached_property
from enum import Enum, IntEnum, auto, unique
from functools import cached_property, total_ordering
from typing import (
Any,
Dict,
Iterable,
Iterator,
List,
Optional,
Sequence,
Set,
TYPE_CHECKING,
Union,
Sequence,
Iterable,
Tuple,
Union,
)
from dcs.mapping import Point
from dcs.ships import (
Forrestal,
Stennis,
KUZNECOW,
LHA_Tarawa,
Type_071,
)
from dcs.ships import Forrestal, KUZNECOW, LHA_Tarawa, Stennis, Type_071
from dcs.terrain.terrain import Airport, ParkingSlot
from dcs.unit import Unit
from dcs.unittype import FlyingType
from game import db
from game.point_with_heading import PointWithHeading
@ -45,9 +38,9 @@ from gen.runways import RunwayAssigner, RunwayData
from .base import Base
from .missiontarget import MissionTarget
from .theatergroundobject import (
BuildingGroundObject,
GenericCarrierGroundObject,
TheaterGroundObject,
BuildingGroundObject,
)
from ..ato.starttype import StartType
from ..dcs.aircrafttype import AircraftType
@ -61,6 +54,7 @@ if TYPE_CHECKING:
from game.squadrons.squadron import Squadron
from ..coalition import Coalition
from ..transfers import PendingTransfers
from . import ConflictTheater
FREE_FRONTLINE_UNIT_SUPPLY: int = 15
AMMO_DEPOT_FRONTLINE_UNIT_CONTRIBUTION: int = 12
@ -694,7 +688,10 @@ class ControlPoint(MissionTarget, ABC):
@abstractmethod
def active_runway(
self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData]
self,
theater: ConflictTheater,
conditions: Conditions,
dynamic_runways: Dict[str, RunwayData],
) -> RunwayData:
...
@ -936,10 +933,13 @@ class Airfield(ControlPoint):
self.runway_status.damage()
def active_runway(
self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData]
self,
theater: ConflictTheater,
conditions: Conditions,
dynamic_runways: Dict[str, RunwayData],
) -> RunwayData:
assigner = RunwayAssigner(conditions)
return assigner.get_preferred_runway(self.airport)
return assigner.get_preferred_runway(theater, self.airport)
@property
def airdrome_id_for_landing(self) -> Optional[int]:
@ -1019,7 +1019,10 @@ class NavalControlPoint(ControlPoint, ABC):
return False
def active_runway(
self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData]
self,
theater: ConflictTheater,
conditions: Conditions,
dynamic_runways: Dict[str, RunwayData],
) -> RunwayData:
# TODO: Assign TACAN and ICLS earlier so we don't need this.
fallback = RunwayData(
@ -1161,7 +1164,10 @@ class OffMapSpawn(ControlPoint):
return Heading.from_degrees(0)
def active_runway(
self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData]
self,
theater: ConflictTheater,
conditions: Conditions,
dynamic_runways: Dict[str, RunwayData],
) -> RunwayData:
logging.warning("TODO: Off map spawns have no runways.")
return RunwayData(
@ -1202,7 +1208,10 @@ class Fob(ControlPoint):
return self.has_helipads
def active_runway(
self, conditions: Conditions, dynamic_runways: Dict[str, RunwayData]
self,
theater: ConflictTheater,
conditions: Conditions,
dynamic_runways: Dict[str, RunwayData],
) -> RunwayData:
logging.warning("TODO: FOBs have no runways.")
return RunwayData(

File diff suppressed because it is too large Load Diff

View File

@ -3,15 +3,18 @@ from __future__ import annotations
import logging
from dataclasses import dataclass
from typing import Iterator, Optional
from typing import Iterator, Optional, TYPE_CHECKING
from dcs.terrain.terrain import Airport
from game.weather import Conditions
from game.utils import Heading
from .airfields import AIRFIELD_DATA
from game.radio.radios import RadioFrequency
from game.radio.tacan import TacanChannel
from game.utils import Heading
from game.weather import Conditions
from gen.airfields import AirfieldData
if TYPE_CHECKING:
from game.theater import ConflictTheater
@dataclass(frozen=True)
@ -27,11 +30,16 @@ class RunwayData:
@classmethod
def for_airfield(
cls, airport: Airport, runway_heading: Heading, runway_name: str
cls,
theater: ConflictTheater,
airport: Airport,
runway_heading: Heading,
runway_name: str,
) -> RunwayData:
"""Creates RunwayData for the given runway of an airfield.
Args:
theater: The theater the airport is in.
airport: The airfield the runway belongs to.
runway_heading: Heading of the runway.
runway_name: Identifier of the runway to use. e.g. "03" or "20L".
@ -41,7 +49,7 @@ class RunwayData:
tacan_callsign: Optional[str] = None
ils: Optional[RadioFrequency] = None
try:
airfield = AIRFIELD_DATA[airport.name]
airfield = AirfieldData.for_airport(theater, airport)
if airfield.atc is not None:
atc = airfield.atc.uhf
else:
@ -50,7 +58,7 @@ class RunwayData:
tacan_callsign = airfield.tacan_callsign
ils = airfield.ils_freq(runway_name)
except KeyError:
logging.warning(f"No airfield data for {airport.name}")
logging.warning(f"No airfield data for {airport.name} ({airport.id}")
return cls(
airfield_name=airport.name,
runway_heading=runway_heading,
@ -62,13 +70,15 @@ class RunwayData:
)
@classmethod
def for_pydcs_airport(cls, airport: Airport) -> Iterator[RunwayData]:
def for_pydcs_airport(
cls, theater: ConflictTheater, airport: Airport
) -> Iterator[RunwayData]:
for runway in airport.runways:
runway_number = runway.heading // 10
runway_side = ["", "L", "R"][runway.leftright]
runway_name = f"{runway_number:02}{runway_side}"
yield cls.for_airfield(
airport, Heading.from_degrees(runway.heading), runway_name
theater, airport, Heading.from_degrees(runway.heading), runway_name
)
# pydcs only exposes one runway per physical runway, so to expose
@ -77,7 +87,7 @@ class RunwayData:
runway_number = heading.degrees // 10
runway_side = ["", "R", "L"][runway.leftright]
runway_name = f"{runway_number:02}{runway_side}"
yield cls.for_airfield(airport, heading, runway_name)
yield cls.for_airfield(theater, airport, heading, runway_name)
class RunwayAssigner:
@ -89,7 +99,9 @@ class RunwayAssigner:
ideal_heading = wind.opposite
return runway.runway_heading.angle_between(ideal_heading)
def get_preferred_runway(self, airport: Airport) -> RunwayData:
def get_preferred_runway(
self, theater: ConflictTheater, airport: Airport
) -> RunwayData:
"""Returns the preferred runway for the given airport.
Right now we're only selecting runways based on whether or not
@ -97,7 +109,7 @@ class RunwayAssigner:
ILS, but we could also choose based on wind conditions, or which
direction flight plans should follow.
"""
runways = list(RunwayData.for_pydcs_airport(airport))
runways = list(RunwayData.for_pydcs_airport(theater, airport))
# Find the runway with the best headwind first.
best_runways = [runways[0]]

View File

@ -0,0 +1,26 @@
---
name: Anapa-Vityazevo
id: 12
icao: URKA
elevation: 141
runway_length: 8623
atc:
hf: 3.750 MHz
vhf_low: 38.400 MHz
vhf_high: 121 MHz
uhf: 250 MHz
runways:
"22":
outer_ndb:
callsign: AP
frequency: 443 MHz
inner_ndb:
callsign: P
frequency: 215 MHz
"04":
outer_ndb:
callsign: AN
frequency: 443 MHz
inner_ndb:
callsign: N
frequency: 215 MHz

View File

@ -0,0 +1,19 @@
---
name: Batumi
id: 22
icao: UGSB
elevation: 32
runway_length: 6792
tacan:
callsign: BTM
channel: 16X
atc:
hf: 4.250 MHz
vhf_low: 40.400 MHz
vhf_high: 131 MHz
uhf: 260 MHz
runways:
"13":
ils:
callsign: ILU
frequency: 110.300 MHz

View File

@ -0,0 +1,22 @@
---
name: Beslan
id: 32
icao: URMO
elevation: 1719
runway_length: 9327
atc:
hf: 4.750 MHz
vhf_low: 42.400 MHz
vhf_high: 141 MHz
uhf: 270 MHz
runways:
"10":
ils:
callsign: ICH
frequency: 110.500 MHz
outer_ndb:
callsign: CX
frequency: 1.005 MHz
inner_ndb:
callsign: C
frequency: 250 MHz

View File

@ -0,0 +1,14 @@
---
name: Gelendzhik
id: 17
icao: URKG
elevation: 72
runway_length: 5452
vor:
callsign: GN
frequency: 114.030 MHz
atc:
hf: 4 MHz
vhf_low: 39.400 MHz
vhf_high: 126 MHz
uhf: 255 MHz

View File

@ -0,0 +1,11 @@
---
name: Gudauta
id: 21
icao: UG23
elevation: 68
runway_length: 7839
atc:
hf: 4.200 MHz
vhf_low: 40.200 MHz
vhf_high: 120 MHz
uhf: 259 MHz

View File

@ -0,0 +1,25 @@
---
name: Kobuleti
id: 24
icao: UG5X
elevation: 59
runway_length: 7406
tacan:
callsign: KBL
channel: 67X
atc:
hf: 4.350 MHz
vhf_low: 40.800 MHz
vhf_high: 133 MHz
uhf: 262 MHz
runways:
"07":
ils:
callsign: IKB
frequency: 111.500 MHz
outer_ndb:
callsign: KT
frequency: 870 MHz
inner_ndb:
callsign: T
frequency: 490 MHz

View File

@ -0,0 +1,32 @@
---
name: Krasnodar-Center
id: 13
icao: URKL
elevation: 98
runway_length: 7659
rsbn:
callsign: MB
channel: 40
atc:
hf: 3.800 MHz
vhf_low: 38.600 MHz
vhf_high: 122 MHz
uhf: 251 MHz
runways:
"27":
outer_ndb:
callsign: OC
frequency: 625 MHz
inner_ndb:
callsign: C
frequency: 303 MHz
09:
prmg:
callsign: MB
channel: 38
outer_ndb:
callsign: MB
frequency: 625 MHz
inner_ndb:
callsign: M
frequency: 303 MHz

View File

@ -0,0 +1,29 @@
---
name: Krasnodar-Pashkovsky
id: 19
icao: URKK
elevation: 111
runway_length: 9738
vor:
callsign: KN
frequency: 115.080 MHz
atc:
hf: 4.100 MHz
vhf_low: 39.800 MHz
vhf_high: 128 MHz
uhf: 257 MHz
runways:
"23":
outer_ndb:
callsign: LD
frequency: 493 MHz
inner_ndb:
callsign: L
frequency: 240 MHz
"05":
outer_ndb:
callsign: KR
frequency: 493 MHz
inner_ndb:
callsign: K
frequency: 240 MHz

View File

@ -0,0 +1,35 @@
---
name: Krymsk
id: 15
icao: URKW
elevation: 65
runway_length: 6733
rsbn:
callsign: KW
channel: 28
atc:
hf: 3.900 MHz
vhf_low: 39 MHz
vhf_high: 124 MHz
uhf: 253 MHz
runways:
"22":
prmg:
callsign: KW
channel: 26
outer_ndb:
callsign: KW
frequency: 408 MHz
inner_ndb:
callsign: K
frequency: 803 MHz
"04":
prmg:
callsign: OX
channel: 26
outer_ndb:
callsign: OX
frequency: 408 MHz
inner_ndb:
callsign: O
frequency: 803 MHz

View File

@ -0,0 +1,19 @@
---
name: Kutaisi
id: 25
icao: UGKO
elevation: 147
runway_length: 7937
tacan:
callsign: KTS
channel: 44X
atc:
hf: 4.400 MHz
vhf_low: 41 MHz
vhf_high: 134 MHz
uhf: 263 MHz
runways:
08:
ils:
callsign: IKS
frequency: 109.750 MHz

View File

@ -0,0 +1,33 @@
---
name: Maykop-Khanskaya
id: 16
icao: URKH
elevation: 590
runway_length: 10195
rsbn:
callsign: DG
channel: 34
atc:
hf: 3.950 MHz
vhf_low: 39.200 MHz
vhf_high: 125 MHz
uhf: 254 MHz
runways:
"22":
outer_ndb:
callsign: RK
frequency: 289 MHz
inner_ndb:
callsign: R
frequency: 591 MHz
"4":
inner_ndb:
callsign: D
frequency: 591 MHz
"04":
prmg:
callsign: DG
channel: 36
outer_ndb:
callsign: DG
frequency: 289 MHz

View File

@ -0,0 +1,35 @@
---
name: Mineralnye Vody
id: 26
icao: URMM
elevation: 1049
runway_length: 12316
vor:
callsign: MN
frequency: 117.010 MHz
atc:
hf: 4.450 MHz
vhf_low: 41.200 MHz
vhf_high: 135 MHz
uhf: 264 MHz
runways:
"12":
ils:
callsign: IMD
frequency: 111.700 MHz
outer_ndb:
callsign: MD
frequency: 583 MHz
inner_ndb:
callsign: D
frequency: 283 MHz
"30":
ils:
callsign: IMW
frequency: 109.300 MHz
outer_ndb:
callsign: NR
frequency: 583 MHz
inner_ndb:
callsign: N
frequency: 283 MHz

View File

@ -0,0 +1,35 @@
---
name: Mozdok
id: 28
icao: XRMF
elevation: 507
runway_length: 7734
rsbn:
callsign: MZ
channel: 20
atc:
hf: 4.550 MHz
vhf_low: 41.600 MHz
vhf_high: 137 MHz
uhf: 266 MHz
runways:
"26":
prmg:
callsign: MZ
channel: 22
outer_ndb:
callsign: RM
frequency: 525 MHz
inner_ndb:
callsign: R
frequency: 1.006 MHz
"8":
prmg:
callsign: MZ
channel: 22
outer_ndb:
callsign: DO
frequency: 525 MHz
inner_ndb:
callsign: D
frequency: 1.006 MHz

View File

@ -0,0 +1,22 @@
---
name: Nalchik
id: 27
icao: URMN
elevation: 1410
runway_length: 7082
atc:
hf: 4.500 MHz
vhf_low: 41.400 MHz
vhf_high: 136 MHz
uhf: 265 MHz
runways:
"24":
ils:
callsign: INL
frequency: 110.500 MHz
outer_ndb:
callsign: NL
frequency: 718 MHz
inner_ndb:
callsign: N
frequency: 350 MHz

View File

@ -0,0 +1,11 @@
---
name: Novorossiysk
id: 14
icao: URKN
elevation: 131
runway_length: 5639
atc:
hf: 3.850 MHz
vhf_low: 38.800 MHz
vhf_high: 123 MHz
uhf: 252 MHz

View File

@ -0,0 +1,25 @@
---
name: Senaki-Kolkhi
id: 23
icao: UGKS
elevation: 43
runway_length: 7256
tacan:
callsign: TSK
channel: 31X
atc:
hf: 4.300 MHz
vhf_low: 40.600 MHz
vhf_high: 132 MHz
uhf: 261 MHz
runways:
09:
ils:
callsign: ITS
frequency: 108.900 MHz
outer_ndb:
callsign: BI
frequency: 335 MHz
inner_ndb:
callsign: I
frequency: 688 MHz

View File

@ -0,0 +1,16 @@
---
name: Sochi-Adler
id: 18
icao: URSS
elevation: 98
runway_length: 9686
atc:
hf: 4.050 MHz
vhf_low: 39.600 MHz
vhf_high: 127 MHz
uhf: 256 MHz
runways:
"06":
ils:
callsign: ISO
frequency: 111.100 MHz

View File

@ -0,0 +1,14 @@
---
name: Soganlug
id: 30
icao: UG24
elevation: 1474
runway_length: 7871
tacan:
callsign: GTB
channel: 25X
atc:
hf: 4.650 MHz
vhf_low: 42 MHz
vhf_high: 139 MHz
uhf: 268 MHz

View File

@ -0,0 +1,19 @@
---
name: Sukhumi-Babushara
id: 20
icao: UGSS
elevation: 43
runway_length: 11217
atc:
hf: 4.150 MHz
vhf_low: 40 MHz
vhf_high: 129 MHz
uhf: 258 MHz
runways:
"30":
outer_ndb:
callsign: AV
frequency: 489 MHz
inner_ndb:
callsign: A
frequency: 995 MHz

View File

@ -0,0 +1,35 @@
---
name: Tbilisi-Lochini
id: 29
icao: UGTB
elevation: 1573
runway_length: 7692
tacan:
callsign: GTB
channel: 25X
atc:
hf: 4.600 MHz
vhf_low: 41.800 MHz
vhf_high: 138 MHz
uhf: 267 MHz
runways:
"13":
ils:
callsign: INA
frequency: 110.300 MHz
outer_ndb:
callsign: BP
frequency: 342 MHz
inner_ndb:
callsign: B
frequency: 923 MHz
"30":
ils:
callsign: INA
frequency: 108.900 MHz
outer_ndb:
callsign: NA
frequency: 211 MHz
inner_ndb:
callsign: N
frequency: 435 MHz

View File

@ -0,0 +1,23 @@
---
name: Vaziani
id: 31
icao: UG27
elevation: 1523
runway_length: 7842
tacan:
callsign: VAS
channel: 22X
atc:
hf: 4.700 MHz
vhf_low: 42.200 MHz
vhf_high: 140 MHz
uhf: 269 MHz
runways:
"31":
ils:
callsign: IVZ
frequency: 108.750 MHz
"13":
ils:
callsign: IVZ
frequency: 108.750 MHz

View File

@ -0,0 +1,14 @@
---
name: Andersen AFB
id: 6
icao: PGUA
elevation: 545
runway_length: 10490
tacan:
callsign: UAM
channel: 54X
atc:
hf: 3.850 MHz
vhf_low: 38.600 MHz
vhf_high: 126.200 MHz
uhf: 250.100 MHz

View File

@ -0,0 +1,16 @@
---
name: Antonio B. Won Pat Intl
id: 4
icao: PGUM
elevation: 255
runway_length: 9359
atc:
hf: 3.825 MHz
vhf_low: 38.550 MHz
vhf_high: 118.100 MHz
uhf: 340.200 MHz
runways:
"06":
ils:
callsign: IGUM
frequency: 110.030 MHz

View File

@ -0,0 +1,11 @@
---
name: Rota Intl
id: 1
icao: PGRO
elevation: 568
runway_length: 6105
atc:
hf: 3.750 MHz
vhf_low: 38.400 MHz
vhf_high: 123.600 MHz
uhf: 250 MHz

View File

@ -0,0 +1,16 @@
---
name: Saipan Intl
id: 2
icao: PGSN
elevation: 213
runway_length: 7790
atc:
hf: 3.775 MHz
vhf_low: 38.450 MHz
vhf_high: 125.700 MHz
uhf: 256.900 MHz
runways:
"07":
ils:
callsign: IGSN
frequency: 109.090 MHz

View File

@ -0,0 +1,11 @@
---
name: Tinian Intl
id: 3
icao: PGWT
elevation: 240
runway_length: 7777
atc:
hf: 3.800 MHz
vhf_low: 38.500 MHz
vhf_high: 123.650 MHz
uhf: 250.050 MHz

View File

@ -0,0 +1,6 @@
---
name: Beatty
id: 5
icao: KBTY
elevation: 3173
runway_length: 5380

View File

@ -0,0 +1,6 @@
---
name: Boulder City
id: 6
icao: KBVU
elevation: 2121
runway_length: 4612

View File

@ -0,0 +1,19 @@
---
name: Creech
id: 1
icao: KINS
elevation: 3126
runway_length: 6100
tacan:
callsign: INS
channel: 87X
atc:
hf: 3.825 MHz
vhf_low: 38.550 MHz
vhf_high: 118.300 MHz
uhf: 360.600 MHz
runways:
"8":
ils:
callsign: ICRR
frequency: 108.700 MHz

View File

@ -0,0 +1,14 @@
---
name: Echo Bay
id: 7
icao: OL9
elevation: 3126
runway_length: 6100
tacan:
callsign: INS
channel: 87X
atc:
hf: 3.825 MHz
vhf_low: 38.550 MHz
vhf_high: 118.300 MHz
uhf: 360.600 MHz

View File

@ -0,0 +1,19 @@
---
name: Groom Lake
id: 2
icao: KXTA
elevation: 4494
runway_length: 11008
tacan:
callsign: GRL
channel: 18X
atc:
hf: 3.850 MHz
vhf_low: 38.600 MHz
vhf_high: 118 MHz
uhf: 250.050 MHz
runways:
"32":
ils:
callsign: GLRI
frequency: 109.300 MHz

View File

@ -0,0 +1,11 @@
---
name: Henderson Executive
id: 8
icao: KHND
elevation: 2491
runway_length: 5999
atc:
hf: 3.925 MHz
vhf_low: 38.750 MHz
vhf_high: 125.100 MHz
uhf: 250.100 MHz

View File

@ -0,0 +1,5 @@
---
name: Jean
id: 9
elevation: 2824
runway_length: 4053

View File

@ -0,0 +1,11 @@
---
name: Laughlin
id: 10
icao: KIFP
elevation: 656
runway_length: 7139
atc:
hf: 3.750 MHz
vhf_low: 38.400 MHz
vhf_high: 123.900 MHz
uhf: 250 MHz

View File

@ -0,0 +1,5 @@
---
name: Lincoln County
id: 11
elevation: 4815
runway_length: 4408

View File

@ -0,0 +1,19 @@
---
name: McCarran International
id: 3
icao: KLAS
elevation: 2169
runway_length: 10377
tacan:
callsign: LAS
channel: 116X
atc:
hf: 3.875 MHz
vhf_low: 38.650 MHz
vhf_high: 119.900 MHz
uhf: 257.800 MHz
runways:
"25":
ils:
callsign: I-LAS
frequency: 110.300 MHz

View File

@ -0,0 +1,6 @@
---
name: Mesquite
id: 13
icao: 67L
elevation: 1858
runway_length: 4937

View File

@ -0,0 +1,5 @@
---
name: Mina
id: 14
elevation: 4562
runway_length: 4222

View File

@ -0,0 +1,19 @@
---
name: Nellis
id: 4
icao: KLSV
elevation: 1841
runway_length: 9454
tacan:
callsign: LSV
channel: 12X
atc:
hf: 3.900 MHz
vhf_low: 38.700 MHz
vhf_high: 132.550 MHz
uhf: 327 MHz
runways:
"21":
ils:
callsign: IDIQ
frequency: 109.100 MHz

View File

@ -0,0 +1,11 @@
---
name: North Las Vegas
id: 15
icao: KVGT
elevation: 2228
runway_length: 4734
atc:
hf: 3.775 MHz
vhf_low: 38.450 MHz
vhf_high: 125.700 MHz
uhf: 360.750 MHz

View File

@ -0,0 +1,5 @@
---
name: Pahute Mesa
id: 16
elevation: 5056
runway_length: 5420

View File

@ -0,0 +1,6 @@
---
name: Tonopah
id: 17
icao: KTPH
elevation: 5394
runway_length: 6715

View File

@ -0,0 +1,23 @@
---
name: Tonopah Test Range
id: 18
icao: KTNX
elevation: 5534
runway_length: 11633
tacan:
callsign: TQQ
channel: 77X
atc:
hf: 3.800 MHz
vhf_low: 38.500 MHz
vhf_high: 124.750 MHz
uhf: 257.950 MHz
runways:
"14":
ils:
callsign: I-RVP
frequency: 108.300 MHz
"32":
ils:
callsign: I-UVV
frequency: 111.700 MHz

View File

@ -0,0 +1,10 @@
---
name: Argentan
id: 32
elevation: 639
runway_length: 3283
atc:
hf: 4.350 MHz
vhf_low: 39.600 MHz
vhf_high: 119.200 MHz
uhf: 251.200 MHz

View File

@ -0,0 +1,11 @@
---
name: Azeville
id: 15
icao: A-7
elevation: 74
runway_length: 3357
atc:
hf: 3.875 MHz
vhf_low: 38.650 MHz
vhf_high: 118.250 MHz
uhf: 250.250 MHz

View File

@ -0,0 +1,10 @@
---
name: Barville
id: 34
elevation: 462
runway_length: 3493
atc:
hf: 4.400 MHz
vhf_low: 39.700 MHz
vhf_high: 119.300 MHz
uhf: 251.300 MHz

View File

@ -0,0 +1,11 @@
---
name: Bazenville
id: 20
icao: B-2
elevation: 199
runway_length: 3800
atc:
hf: 4.025 MHz
vhf_low: 38.950 MHz
vhf_high: 118.550 MHz
uhf: 250.550 MHz

View File

@ -0,0 +1,11 @@
---
name: Beny-sur-Mer
id: 22
icao: B-4
elevation: 199
runway_length: 3155
atc:
hf: 4.075 MHz
vhf_low: 39.050 MHz
vhf_high: 118.650 MHz
uhf: 250.650 MHz

View File

@ -0,0 +1,11 @@
---
name: Beuzeville
id: 14
icao: A-6
elevation: 114
runway_length: 3840
atc:
hf: 3.850 MHz
vhf_low: 38.600 MHz
vhf_high: 118.200 MHz
uhf: 250.200 MHz

View File

@ -0,0 +1,11 @@
---
name: Biniville
id: 10
icao: A-24
elevation: 106
runway_length: 3283
atc:
hf: 3.750 MHz
vhf_low: 38.400 MHz
vhf_high: 118 MHz
uhf: 250 MHz

View File

@ -0,0 +1,11 @@
---
name: Brucheville
id: 5
icao: A-16
elevation: 45
runway_length: 3413
atc:
hf: 4.575 MHz
vhf_low: 40.050 MHz
vhf_high: 119.650 MHz
uhf: 251.650 MHz

View File

@ -0,0 +1,11 @@
---
name: Cardonville
id: 11
icao: A-3
elevation: 101
runway_length: 4541
atc:
hf: 3.775 MHz
vhf_low: 38.450 MHz
vhf_high: 118.050 MHz
uhf: 250.050 MHz

View File

@ -0,0 +1,11 @@
---
name: Carpiquet
id: 19
icao: B-17
elevation: 187
runway_length: 3799
atc:
hf: 3.975 MHz
vhf_low: 38.850 MHz
vhf_high: 118.450 MHz
uhf: 250.450 MHz

View File

@ -0,0 +1,10 @@
---
name: Chailey
id: 27
elevation: 134
runway_length: 5080
atc:
hf: 4.200 MHz
vhf_low: 39.300 MHz
vhf_high: 118.900 MHz
uhf: 250.900 MHz

View File

@ -0,0 +1,11 @@
---
name: Chippelle
id: 13
icao: A-5
elevation: 124
runway_length: 4643
atc:
hf: 3.825 MHz
vhf_low: 38.550 MHz
vhf_high: 118.150 MHz
uhf: 250.150 MHz

View File

@ -0,0 +1,10 @@
---
name: Conches
id: 40
elevation: 541
runway_length: 4199
atc:
hf: 4.525 MHz
vhf_low: 39.950 MHz
vhf_high: 119.550 MHz
uhf: 251.550 MHz

View File

@ -0,0 +1,11 @@
---
name: Cretteville
id: 3
icao: A-14
elevation: 95
runway_length: 4594
atc:
hf: 4.500 MHz
vhf_low: 39.900 MHz
vhf_high: 119.500 MHz
uhf: 251.500 MHz

View File

@ -0,0 +1,11 @@
---
name: Cricqueville-en-Bessin
id: 7
icao: A-2
elevation: 81
runway_length: 3459
atc:
hf: 4.625 MHz
vhf_low: 40.150 MHz
vhf_high: 119.750 MHz
uhf: 251.750 MHz

View File

@ -0,0 +1,11 @@
---
name: Deux Jumeaux
id: 12
icao: A-4
elevation: 123
runway_length: 4628
atc:
hf: 3.800 MHz
vhf_low: 38.500 MHz
vhf_high: 118.100 MHz
uhf: 250.100 MHz

View File

@ -0,0 +1,10 @@
---
name: Essay
id: 35
elevation: 507
runway_length: 3283
atc:
hf: 4.425 MHz
vhf_low: 39.750 MHz
vhf_high: 119.350 MHz
uhf: 251.350 MHz

View File

@ -0,0 +1,10 @@
---
name: Evreux
id: 26
elevation: 423
runway_length: 4296
atc:
hf: 4.175 MHz
vhf_low: 39.250 MHz
vhf_high: 118.850 MHz
uhf: 250.850 MHz

View File

@ -0,0 +1,10 @@
---
name: Ford AB
id: 31
elevation: 29
runway_length: 4296
atc:
hf: 4.325 MHz
vhf_low: 39.550 MHz
vhf_high: 119.150 MHz
uhf: 251.150 MHz

View File

@ -0,0 +1,10 @@
---
name: Funtington
id: 29
elevation: 164
runway_length: 5080
atc:
hf: 4.250 MHz
vhf_low: 39.400 MHz
vhf_high: 119 MHz
uhf: 251 MHz

View File

@ -0,0 +1,10 @@
---
name: Goulet
id: 33
elevation: 616
runway_length: 3283
atc:
hf: 4.375 MHz
vhf_low: 39.650 MHz
vhf_high: 119.250 MHz
uhf: 251.250 MHz

View File

@ -0,0 +1,10 @@
---
name: Hauterive
id: 36
elevation: 476
runway_length: 3283
atc:
hf: 4.450 MHz
vhf_low: 39.800 MHz
vhf_high: 119.400 MHz
uhf: 251.400 MHz

View File

@ -0,0 +1,11 @@
---
name: Lantheuil
id: 25
icao: B-9
elevation: 174
runway_length: 3597
atc:
hf: 4.150 MHz
vhf_low: 39.200 MHz
vhf_high: 118.800 MHz
uhf: 250.800 MHz

View File

@ -0,0 +1,11 @@
---
name: Le Molay
id: 17
icao: A-9
elevation: 104
runway_length: 3840
atc:
hf: 3.925 MHz
vhf_low: 38.750 MHz
vhf_high: 118.350 MHz
uhf: 250.350 MHz

View File

@ -0,0 +1,11 @@
---
name: Lessay
id: 8
icao: A-20
elevation: 65
runway_length: 5080
atc:
hf: 4.650 MHz
vhf_low: 40.200 MHz
vhf_high: 119.800 MHz
uhf: 251.800 MHz

View File

@ -0,0 +1,11 @@
---
name: Lignerolles
id: 2
icao: A-12
elevation: 404
runway_length: 3436
atc:
hf: 4.275 MHz
vhf_low: 39.450 MHz
vhf_high: 119.050 MHz
uhf: 251.050 MHz

View File

@ -0,0 +1,11 @@
---
name: Longues-sur-Mer
id: 18
icao: B-11
elevation: 225
runway_length: 3155
atc:
hf: 3.950 MHz
vhf_low: 38.800 MHz
vhf_high: 118.400 MHz
uhf: 250.400 MHz

View File

@ -0,0 +1,11 @@
---
name: Maupertus
id: 4
icao: A-15
elevation: 441
runway_length: 4666
atc:
hf: 4.550 MHz
vhf_low: 40 MHz
vhf_high: 119.600 MHz
uhf: 251.600 MHz

View File

@ -0,0 +1,11 @@
---
name: Meautis
id: 6
icao: A-17
elevation: 83
runway_length: 3840
atc:
hf: 4.600 MHz
vhf_low: 40.100 MHz
vhf_high: 119.700 MHz
uhf: 251.700 MHz

View File

@ -0,0 +1,10 @@
---
name: Needs Oar Point
id: 28
elevation: 30
runway_length: 5259
atc:
hf: 4.225 MHz
vhf_low: 39.350 MHz
vhf_high: 118.950 MHz
uhf: 250.950 MHz

View File

@ -0,0 +1,11 @@
---
name: Picauville
id: 16
icao: A-8
elevation: 72
runway_length: 3840
atc:
hf: 3.900 MHz
vhf_low: 38.700 MHz
vhf_high: 118.300 MHz
uhf: 250.300 MHz

View File

@ -0,0 +1,11 @@
---
name: Rucqueville
id: 23
icao: B-7
elevation: 192
runway_length: 4561
atc:
hf: 4.100 MHz
vhf_low: 39.100 MHz
vhf_high: 118.700 MHz
uhf: 250.700 MHz

View File

@ -0,0 +1,11 @@
---
name: Saint Pierre du Mont
id: 1
icao: A-1
elevation: 103
runway_length: 4737
atc:
hf: 4 MHz
vhf_low: 38.900 MHz
vhf_high: 118.500 MHz
uhf: 250.500 MHz

View File

@ -0,0 +1,11 @@
---
name: Sainte-Croix-sur-Mer
id: 21
icao: B-3
elevation: 160
runway_length: 3840
atc:
hf: 4.050 MHz
vhf_low: 39 MHz
vhf_high: 118.600 MHz
uhf: 250.600 MHz

View File

@ -0,0 +1,11 @@
---
name: Sainte-Laurent-sur-Mer
id: 9
icao: A-21
elevation: 145
runway_length: 4561
atc:
hf: 4.675 MHz
vhf_low: 40.250 MHz
vhf_high: 119.850 MHz
uhf: 251.850 MHz

View File

@ -0,0 +1,11 @@
---
name: Sommervieu
id: 24
icao: B-8
elevation: 186
runway_length: 3840
atc:
hf: 4.125 MHz
vhf_low: 39.150 MHz
vhf_high: 118.750 MHz
uhf: 250.750 MHz

View File

@ -0,0 +1,10 @@
---
name: Tangmere
id: 30
elevation: 47
runway_length: 4296
atc:
hf: 4.300 MHz
vhf_low: 39.500 MHz
vhf_high: 119.100 MHz
uhf: 251.100 MHz

View File

@ -0,0 +1,10 @@
---
name: Vrigny
id: 38
elevation: 590
runway_length: 3283
atc:
hf: 4.475 MHz
vhf_low: 39.850 MHz
vhf_high: 119.450 MHz
uhf: 251.450 MHz

View File

@ -0,0 +1,14 @@
---
name: Abu Dhabi Intl
id: 22
icao: OMAA
elevation: 91
runway_length: 12817
vor:
callsign: ADV
frequency: 114.250 MHz
atc:
hf: 4.050 MHz
vhf_low: 119.200 MHz
vhf_high: 39 MHz
uhf: 250.550 MHz

View File

@ -0,0 +1,11 @@
---
name: Abu Musa Island
id: 1
icao: OIBA
elevation: 16
runway_length: 7616
atc:
hf: 3.950 MHz
vhf_low: 122.900 MHz
vhf_high: 38.800 MHz
uhf: 250.400 MHz

View File

@ -0,0 +1,14 @@
---
name: Al Ain Intl
id: 25
icao: OMAL
elevation: 813
runway_length: 11267
vor:
callsign: ALN
frequency: 112.600 MHz
atc:
hf: 4.125 MHz
vhf_low: 119.850 MHz
vhf_high: 39.150 MHz
uhf: 250.700 MHz

View File

@ -0,0 +1,14 @@
---
name: Al-Bateen
id: 23
icao: OMAD
elevation: 11
runway_length: 6808
vor:
callsign: ALB
frequency: 114 MHz
atc:
hf: 4.075 MHz
vhf_low: 119.900 MHz
vhf_high: 39.050 MHz
uhf: 250.600 MHz

View File

@ -0,0 +1,26 @@
---
name: Al Dhafra AFB
id: 4
icao: OMAM
elevation: 52
runway_length: 11530
tacan:
callsign: MA
channel: 96X
vor:
callsign: MA
frequency: 114.900 MHz
atc:
hf: 4.300 MHz
vhf_low: 126.500 MHz
vhf_high: 39.500 MHz
uhf: 251.100 MHz
runways:
"31":
ils:
callsign: IMA
frequency: 109.100 MHz
"13":
ils:
callsign: MMA
frequency: 111.100 MHz

View File

@ -0,0 +1,20 @@
---
name: Al Maktoum Intl
id: 6
icao: OMDW
elevation: 123
runway_length: 11500
atc:
hf: 4.350 MHz
vhf_low: 118.600 MHz
vhf_high: 39.600 MHz
uhf: 251.200 MHz
runways:
"12":
ils:
callsign: IMA
frequency: 111.750 MHz
"30":
ils:
callsign: IJWA
frequency: 109.750 MHz

View File

@ -0,0 +1,23 @@
---
name: Al Minhad AFB
id: 12
icao: OMDM
elevation: 190
runway_length: 11865
tacan:
callsign: MIN
channel: 99X
atc:
hf: 3.800 MHz
vhf_low: 118.550 MHz
vhf_high: 38.500 MHz
uhf: 250.100 MHz
runways:
"27":
ils:
callsign: IMNR
frequency: 110.750 MHz
"9":
ils:
callsign: IMNW
frequency: 110.700 MHz

View File

@ -0,0 +1,22 @@
---
name: Bandar Abbas Intl
id: 2
icao: OIKB
elevation: 18
runway_length: 11640
tacan:
callsign: BND
channel: 78X
vor:
callsign: BND
frequency: 117.200 MHz
atc:
hf: 4.250 MHz
vhf_low: 118.100 MHz
vhf_high: 39.400 MHz
uhf: 251 MHz
runways:
"21":
ils:
callsign: IBND
frequency: 109.900 MHz

View File

@ -0,0 +1,14 @@
---
name: Bandar-e-Jask
id: 21
icao: OIZJ
elevation: 26
runway_length: 6842
vor:
callsign: KHM
frequency: 116.300 MHz
atc:
hf: 4.025 MHz
vhf_low: 118.150 MHz
vhf_high: 38.950 MHz
uhf: 250.500 MHz

View File

@ -0,0 +1,14 @@
---
name: Bandar Lengeh
id: 3
icao: OIBL
elevation: 80
runway_length: 7625
vor:
callsign: LEN
frequency: 114.800 MHz
atc:
hf: 4.275 MHz
vhf_low: 121.700 MHz
vhf_high: 39.450 MHz
uhf: 251.050 MHz

View File

@ -0,0 +1,20 @@
---
name: Dubai Intl
id: 5
icao: OMDB
elevation: 16
runway_length: 11018
atc:
hf: 4.325 MHz
vhf_low: 118.750 MHz
vhf_high: 39.550 MHz
uhf: 251.150 MHz
runways:
"12":
ils:
callsign: IDBR
frequency: 110.100 MHz
"30":
ils:
callsign: IDBL
frequency: 110.900 MHz

View File

@ -0,0 +1,19 @@
---
name: Fujairah Intl
id: 7
icao: OMFJ
elevation: 60
runway_length: 9437
vor:
callsign: FJV
frequency: 113.800 MHz
atc:
hf: 4.375 MHz
vhf_low: 124.600 MHz
vhf_high: 39.650 MHz
uhf: 251.250 MHz
runways:
"29":
ils:
callsign: IFJR
frequency: 111.500 MHz

Some files were not shown because too many files have changed in this diff Show More