diff --git a/client/demo.js b/client/demo.js index d4c68aff..d7f970df 100644 --- a/client/demo.js +++ b/client/demo.js @@ -360,7 +360,7 @@ class DemoDataGenerator { airbases(req, res){ var ret = {airbases: { ["0"]: { - callsign: "Neutral", + callsign: "Nellis", latitude: 37.3, longitude: -115.8, coalition: "neutral" diff --git a/client/public/databases/airbases/caucasus.json b/client/public/databases/airbases/caucasus.json new file mode 100644 index 00000000..5b27dcdc --- /dev/null +++ b/client/public/databases/airbases/caucasus.json @@ -0,0 +1,466 @@ +{ + "airfields": { + "Anapa-Vityazevo": { + "ICAO": "URKA", + "elevation": "141", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "214", + "ILS": "" + }, + "04": { + "magHeading": "034", + "ILS": "" + } + } + ], + "length": "9000" + } + ] + }, + "Batumi": { + "ICAO": "UGSB", + "elevation": "33", + "TACAN": "16X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "119", + "ILS": "" + }, + "31": { + "magHeading": "299", + "ILS": "" + } + } + ], + "length": "7500" + } + ] + }, + "Beslan": { + "ICAO": "URMO", + "elevation": "1722", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "086", + "ILS": "110.50" + }, + "28": { + "magHeading": "266", + "ILS": "" + } + } + ], + "length": "9600" + } + ] + }, + "Gelendzhik": { + "ICAO": "URKG", + "elevation": "72", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "19": { + "magHeading": "212", + "ILS": "" + }, + "01": { + "magHeading": "032", + "ILS": "" + } + } + ], + "length": "5400" + } + ] + }, + "Gudauta": { + "ICAO": "UG23", + "elevation": "69", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "15": { + "magHeading": "144", + "ILS": "" + }, + "33": { + "magHeading": "324", + "ILS": "" + } + } + ], + "length": "7700" + } + ] + }, + "Kobuleti": { + "ICAO": "UG5X", + "elevation": "69", + "TACAN": "67X", + "runways": [ + { + "headings": [ + { + "25": { + "magHeading": "243", + "ILS": "" + }, + "07": { + "magHeading": "063", + "ILS": "111.50" + } + } + ], + "length": "7400" + } + ] + }, + "Krasnodar-Center": { + "ICAO": "URKL", + "elevation": "98", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "259", + "ILS": "" + }, + "09": { + "magHeading": "079", + "ILS": "" + } + } + ], + "length": "7700" + } + ] + }, + "Krasnodar-Pashkovsky": { + "ICAO": "URKK", + "elevation": "112", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "23": { + "magHeading": "219", + "ILS": "" + }, + "05": { + "magHeading": "039", + "ILS": "" + } + } + ], + "length": "9600" + } + ] + }, + "Krymsk": { + "ICAO": "URKW", + "elevation": "66", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "212", + "ILS": "" + }, + "04": { + "magHeading": "032", + "ILS": "" + } + } + ], + "length": "8000" + } + ] + }, + "Kutaisi": { + "ICAO": "UGKO", + "elevation": "148", + "TACAN": "44X", + "runways": [ + { + "headings": [ + { + "25": { + "magHeading": "247", + "ILS": "" + }, + "07": { + "magHeading": "067'", + "ILS": "109.75" + } + } + ], + "length": "7700" + } + ] + }, + "Maykop-Khanskaya": { + "ICAO": "URKH", + "elevation": "591", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "211", + "ILS": "" + }, + "04": { + "magHeading": "031", + "ILS": "" + } + } + ], + "length": "10100" + } + ] + }, + "Mineralnye Vody": { + "ICAO": "URMM", + "elevation": "1050", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "108", + "ILS": "111.70" + }, + "30": { + "magHeading": "288", + "ILS": "109.30" + } + } + ], + "length": "12700" + } + ] + }, + "Mozdok": { + "ICAO": "XRMF", + "elevation": "507", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "255", + "ILS": "" + }, + "08": { + "magHeading": "075", + "ILS": "" + } + } + ], + "length": "9400" + } + ] + }, + "Nalchik": { + "ICAO": "URMN", + "elevation": "1411", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "228", + "ILS": "110.50" + }, + "06": { + "magHeading": "048'", + "ILS": "" + } + } + ], + "length": "7000" + } + ] + }, + "Novorossiysk": { + "ICAO": "URKN", + "elevation": "131", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "214", + "ILS": "" + }, + "04": { + "magHeading": "034", + "ILS": "" + } + } + ], + "length": "5400" + } + ] + }, + "Senaki-Kolkhi": { + "ICAO": "UGKS", + "elevation": "43", + "TACAN": "31X", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "" + }, + "09": { + "magHeading": "088'", + "ILS": "108.90" + } + } + ], + "length": "7400" + } + ] + }, + "Sochi-Adler": { + "ICAO": "URSS", + "elevation": "98", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "235", + "ILS": "" + }, + "06": { + "magHeading": "055", + "ILS": "111.10" + } + } + ], + "length": "9700" + } + ] + }, + "Tbilisi-Lochini": { + "ICAO": "UGTB", + "elevation": "1574", + "TACAN": "25X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "121", + "ILS": "110.30" + }, + "31": { + "magHeading": "301", + "ILS": "108.90" + } + } + ], + "length": "9300" + } + ] + }, + "Soganlug": { + "ICAO": "UG24", + "elevation": "1500", + "TACAN": "25X", + "runways": [ + { + "headings": [ + { + "14": { + "magHeading": "125", + "ILS": "" + }, + "32": { + "magHeading": "305", + "ILS": "" + } + } + ], + "length": "6500" + } + ] + }, + "Sukhumi-Babushara": { + "ICAO": "UGSS", + "elevation": "43", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "109", + "ILS": "" + }, + "30": { + "magHeading": "289", + "ILS": "" + } + } + ], + "length": "11400" + } + ] + }, + "Vaziani": { + "ICAO": "UG27", + "elevation": "1524", + "TACAN": "22X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "129", + "ILS": "108.75" + }, + "31": { + "magHeading": "309", + "ILS": "108.75" + } + } + ], + "length": "7700" + } + ] + } + } +} \ No newline at end of file diff --git a/client/public/databases/airbases/marianas.json b/client/public/databases/airbases/marianas.json new file mode 100644 index 00000000..5b27dcdc --- /dev/null +++ b/client/public/databases/airbases/marianas.json @@ -0,0 +1,466 @@ +{ + "airfields": { + "Anapa-Vityazevo": { + "ICAO": "URKA", + "elevation": "141", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "214", + "ILS": "" + }, + "04": { + "magHeading": "034", + "ILS": "" + } + } + ], + "length": "9000" + } + ] + }, + "Batumi": { + "ICAO": "UGSB", + "elevation": "33", + "TACAN": "16X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "119", + "ILS": "" + }, + "31": { + "magHeading": "299", + "ILS": "" + } + } + ], + "length": "7500" + } + ] + }, + "Beslan": { + "ICAO": "URMO", + "elevation": "1722", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "086", + "ILS": "110.50" + }, + "28": { + "magHeading": "266", + "ILS": "" + } + } + ], + "length": "9600" + } + ] + }, + "Gelendzhik": { + "ICAO": "URKG", + "elevation": "72", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "19": { + "magHeading": "212", + "ILS": "" + }, + "01": { + "magHeading": "032", + "ILS": "" + } + } + ], + "length": "5400" + } + ] + }, + "Gudauta": { + "ICAO": "UG23", + "elevation": "69", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "15": { + "magHeading": "144", + "ILS": "" + }, + "33": { + "magHeading": "324", + "ILS": "" + } + } + ], + "length": "7700" + } + ] + }, + "Kobuleti": { + "ICAO": "UG5X", + "elevation": "69", + "TACAN": "67X", + "runways": [ + { + "headings": [ + { + "25": { + "magHeading": "243", + "ILS": "" + }, + "07": { + "magHeading": "063", + "ILS": "111.50" + } + } + ], + "length": "7400" + } + ] + }, + "Krasnodar-Center": { + "ICAO": "URKL", + "elevation": "98", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "259", + "ILS": "" + }, + "09": { + "magHeading": "079", + "ILS": "" + } + } + ], + "length": "7700" + } + ] + }, + "Krasnodar-Pashkovsky": { + "ICAO": "URKK", + "elevation": "112", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "23": { + "magHeading": "219", + "ILS": "" + }, + "05": { + "magHeading": "039", + "ILS": "" + } + } + ], + "length": "9600" + } + ] + }, + "Krymsk": { + "ICAO": "URKW", + "elevation": "66", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "212", + "ILS": "" + }, + "04": { + "magHeading": "032", + "ILS": "" + } + } + ], + "length": "8000" + } + ] + }, + "Kutaisi": { + "ICAO": "UGKO", + "elevation": "148", + "TACAN": "44X", + "runways": [ + { + "headings": [ + { + "25": { + "magHeading": "247", + "ILS": "" + }, + "07": { + "magHeading": "067'", + "ILS": "109.75" + } + } + ], + "length": "7700" + } + ] + }, + "Maykop-Khanskaya": { + "ICAO": "URKH", + "elevation": "591", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "211", + "ILS": "" + }, + "04": { + "magHeading": "031", + "ILS": "" + } + } + ], + "length": "10100" + } + ] + }, + "Mineralnye Vody": { + "ICAO": "URMM", + "elevation": "1050", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "108", + "ILS": "111.70" + }, + "30": { + "magHeading": "288", + "ILS": "109.30" + } + } + ], + "length": "12700" + } + ] + }, + "Mozdok": { + "ICAO": "XRMF", + "elevation": "507", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "255", + "ILS": "" + }, + "08": { + "magHeading": "075", + "ILS": "" + } + } + ], + "length": "9400" + } + ] + }, + "Nalchik": { + "ICAO": "URMN", + "elevation": "1411", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "228", + "ILS": "110.50" + }, + "06": { + "magHeading": "048'", + "ILS": "" + } + } + ], + "length": "7000" + } + ] + }, + "Novorossiysk": { + "ICAO": "URKN", + "elevation": "131", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "214", + "ILS": "" + }, + "04": { + "magHeading": "034", + "ILS": "" + } + } + ], + "length": "5400" + } + ] + }, + "Senaki-Kolkhi": { + "ICAO": "UGKS", + "elevation": "43", + "TACAN": "31X", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "" + }, + "09": { + "magHeading": "088'", + "ILS": "108.90" + } + } + ], + "length": "7400" + } + ] + }, + "Sochi-Adler": { + "ICAO": "URSS", + "elevation": "98", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "235", + "ILS": "" + }, + "06": { + "magHeading": "055", + "ILS": "111.10" + } + } + ], + "length": "9700" + } + ] + }, + "Tbilisi-Lochini": { + "ICAO": "UGTB", + "elevation": "1574", + "TACAN": "25X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "121", + "ILS": "110.30" + }, + "31": { + "magHeading": "301", + "ILS": "108.90" + } + } + ], + "length": "9300" + } + ] + }, + "Soganlug": { + "ICAO": "UG24", + "elevation": "1500", + "TACAN": "25X", + "runways": [ + { + "headings": [ + { + "14": { + "magHeading": "125", + "ILS": "" + }, + "32": { + "magHeading": "305", + "ILS": "" + } + } + ], + "length": "6500" + } + ] + }, + "Sukhumi-Babushara": { + "ICAO": "UGSS", + "elevation": "43", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "109", + "ILS": "" + }, + "30": { + "magHeading": "289", + "ILS": "" + } + } + ], + "length": "11400" + } + ] + }, + "Vaziani": { + "ICAO": "UG27", + "elevation": "1524", + "TACAN": "22X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "129", + "ILS": "108.75" + }, + "31": { + "magHeading": "309", + "ILS": "108.75" + } + } + ], + "length": "7700" + } + ] + } + } +} \ No newline at end of file diff --git a/client/public/databases/airbases/nevada.json b/client/public/databases/airbases/nevada.json new file mode 100644 index 00000000..2eaf04df --- /dev/null +++ b/client/public/databases/airbases/nevada.json @@ -0,0 +1,558 @@ +{ + "airfields": { + "Beatty": { + "ICAO": "KBTY", + "elevation": "3173", + "TACAN": "94X", + "runways": [ + { + "headings": [ + { + "16": { + "magHeading": "168", + "ILS": "" + }, + "34": { + "magHeading": "348", + "ILS": "" + } + } + ], + "length": "5500" + } + ] + }, + "Boulder City": { + "ICAO": "KBVU", + "elevation": "2205", + "TACAN": "114X", + "runways": [ + { + "headings": [ + { + "15": { + "magHeading": "153", + "ILS": "" + }, + "33": { + "magHeading": "333", + "ILS": "" + } + } + ], + "length": "3700" + }, + { + "headings": [ + { + "27": { + "magHeading": "267", + "ILS": "" + }, + "09": { + "magHeading": "087", + "ILS": "" + } + } + ], + "length": "4400" + } + ] + }, + "Creech": { + "ICAO": "KINS", + "elevation": "3126", + "TACAN": "87X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "134", + "ILS": "" + }, + "31": { + "magHeading": "314", + "ILS": "" + } + } + ], + "length": "4700" + }, + { + "headings": [ + { + "26": { + "magHeading": "260", + "ILS": "" + }, + "08": { + "magHeading": "080", + "ILS": "108.70" + } + } + ], + "length": "8700" + } + ] + }, + "Echo Bay": { + "ICAO": "0L9", + "elevation": "1549", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "246", + "ILS": "" + }, + "06": { + "magHeading": "066", + "ILS": "" + } + } + ], + "length": "3300" + } + ] + }, + "Groom Lake": { + "ICAO": "KXTA", + "elevation": "4495", + "TACAN": "18X", + "runways": [ + { + "headings": [ + { + "14L": { + "magHeading": "145", + "ILS": "" + }, + "32R": { + "magHeading": "325", + "ILS": "109.30" + } + } + ], + "length": "11700" + }, + { + "headings": [ + { + "14R (CLOSED)": { + "magHeading": "145", + "ILS": "" + }, + "32L (CLOSED)": { + "magHeading": "325", + "ILS": "" + } + } + ], + "length": "17800" + } + ] + }, + "Henderson Executive": { + "ICAO": "KHND", + "elevation": "2493", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "17L": { + "magHeading": "168", + "ILS": "" + }, + "35R": { + "magHeading": "348", + "ILS": "" + } + } + ], + "length": "4600" + }, + { + "headings": [ + { + "17R": { + "magHeading": "168", + "ILS": "" + }, + "35L": { + "magHeading": "348", + "ILS": "" + } + } + ], + "length": "6100" + } + ] + }, + "Jean": { + "ICAO": "", + "elevation": "2825", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "02L": { + "magHeading": "020", + "ILS": "" + }, + "20R": { + "magHeading": "200", + "ILS": "" + } + } + ], + "length": "4500" + }, + { + "headings": [ + { + "02R": { + "magHeading": "020", + "ILS": "" + }, + "20L": { + "magHeading": "200", + "ILS": "" + } + } + ], + "length": "3600" + } + ] + }, + "McCarran International": { + "ICAO": "KLAS", + "elevation": "2178", + "TACAN": "116X", + "runways": [ + { + "headings": [ + { + "01L": { + "magHeading": "013", + "ILS": "" + }, + "19R": { + "magHeading": "193", + "ILS": "" + } + } + ], + "length": "8000" + }, + { + "headings": [ + { + "01R": { + "magHeading": "013", + "ILS": "" + }, + "19L": { + "magHeading": "193", + "ILS": "" + } + } + ], + "length": "8000" + }, + { + "headings": [ + { + "07L": { + "magHeading": "078", + "ILS": "" + }, + "25R": { + "magHeading": "258", + "ILS": "110.30" + } + } + ], + "length": "10600" + }, + { + "headings": [ + { + "07R": { + "magHeading": "078", + "ILS": "" + }, + "25L": { + "magHeading": "258", + "ILS": "" + } + } + ], + "length": "10100" + } + ] + }, + "Laughlin": { + "ICAO": "KIFP", + "elevation": "673", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "16": { + "magHeading": "164", + "ILS": "" + }, + "34": { + "magHeading": "344", + "ILS": "" + } + } + ], + "length": "7100" + } + ] + }, + "Lincoln County": { + "ICAO": "", + "elevation": "4816", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "17": { + "magHeading": "170", + "ILS": "" + }, + "35": { + "magHeading": "350", + "ILS": "" + } + } + ], + "length": "4500" + } + ] + }, + "Mesquite": { + "ICAO": "67L", + "elevation": "1859", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "19": { + "magHeading": "197", + "ILS": "" + }, + "01": { + "magHeading": "017", + "ILS": "" + } + } + ], + "length": "5000" + } + ] + }, + "Mina": { + "ICAO": "", + "elevation": "4560", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "140", + "ILS": "" + }, + "31": { + "magHeading": "320", + "ILS": "" + } + } + ], + "length": "4100" + } + ] + }, + "Nellis": { + "ICAO": "KLSV", + "elevation": "1849", + "TACAN": "12X", + "runways": [ + { + "headings": [ + { + "03L": { + "magHeading": "029", + "ILS": "" + }, + "21R": { + "magHeading": "209", + "ILS": "" + } + } + ], + "length": "9800" + }, + { + "headings": [ + { + "03R": { + "magHeading": "029", + "ILS": "" + }, + "21L": { + "magHeading": "209", + "ILS": "109.10" + } + } + ], + "length": "9800" + } + ] + }, + "North Las Vegas": { + "ICAO": "KVGT", + "elevation": "2228", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "25": { + "magHeading": "256", + "ILS": "" + }, + "07": { + "magHeading": "076", + "ILS": "" + } + } + ], + "length": "4900" + }, + { + "headings": [ + { + "12L": { + "magHeading": "122", + "ILS": "110.70" + }, + "30R": { + "magHeading": "302", + "ILS": "109.10" + } + } + ], + "length": "3800" + }, + { + "headings": [ + { + "12R": { + "magHeading": "122", + "ILS": "" + }, + "30L": { + "magHeading": "302", + "ILS": "" + } + } + ], + "length": "4600" + } + ] + }, + "Pahute Mesa": { + "ICAO": "", + "elevation": "5059", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "18": { + "magHeading": "182", + "ILS": "" + }, + "36": { + "magHeading": "002", + "ILS": "" + } + } + ], + "length": "5500" + } + ] + }, + "Tonopah": { + "ICAO": "KTPH", + "elevation": "5390", + "TACAN": "119X", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "113", + "ILS": "" + }, + "29": { + "magHeading": "293", + "ILS": "" + } + } + ], + "length": "5600" + }, + { + "headings": [ + { + "15": { + "magHeading": "153", + "ILS": "" + }, + "33": { + "magHeading": "333", + "ILS": "" + } + } + ], + "length": "6800" + } + ] + }, + "Tonopah Test Range": { + "ICAO": "KTNX", + "elevation": "5535", + "TACAN": "77X", + "runways": [ + { + "headings": [ + { + "14": { + "magHeading": "145", + "ILS": "108.30" + }, + "32": { + "magHeading": "325", + "ILS": "111.70" + } + } + ], + "length": "11700" + } + ] + } + } +} \ No newline at end of file diff --git a/client/public/databases/airbases/persiangulf.json b/client/public/databases/airbases/persiangulf.json new file mode 100644 index 00000000..cf3156bd --- /dev/null +++ b/client/public/databases/airbases/persiangulf.json @@ -0,0 +1,747 @@ +{ + "airfields": { + "Abu_Dhabi_International_Airport": { + "ICAO": "OMAA", + "elevation": "92", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "13L": { + "magHeading": "127", + "ILS": "" + }, + "31R": { + "magHeading": "307", + "ILS": "" + } + } + ], + "length": "13100" + }, + { + "headings": [ + { + "13R": { + "magHeading": "127", + "ILS": "" + }, + "31L": { + "magHeading": "307", + "ILS": "" + } + } + ], + "length": "13200" + } + ] + }, + "Ai_Ain_International_Airport": { + "ICAO": "OMAL", + "elevation": "814", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "19": { + "magHeading": "186", + "ILS": "" + }, + "01": { + "magHeading": "006", + "ILS": "" + } + } + ], + "length": "12800" + } + ] + }, + "abu_musa_airport": { + "ICAO": "OIBA", + "elevation": "16", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "262", + "ILS": "" + }, + "08": { + "magHeading": "082", + "ILS": "" + } + } + ], + "length": "7800" + } + ] + }, + "Dhafra_AFB": { + "ICAO": "OMAM", + "elevation": "52", + "TACAN": "96X", + "runways": [ + { + "headings": [ + { + "13L": { + "magHeading": "126", + "ILS": "111.10" + }, + "31R": { + "magHeading": "306", + "ILS": "109.10" + } + } + ], + "length": "11700" + }, + { + "headings": [ + { + "13R": { + "magHeading": "16", + "ILS": "108.70" + }, + "31L": { + "magHeading": "306", + "ILS": "108.70" + } + } + ], + "length": "11700" + } + ] + }, + "Al_Maktoum_International_Airport": { + "ICAO": "OMDW", + "elevation": "125", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "120", + "ILS": "111.75" + }, + "30": { + "magHeading": "300", + "ILS": "109.75" + } + } + ], + "length": "14400" + } + ] + }, + "Minhad_AFB": { + "ICAO": "OMDM", + "elevation": "190", + "TACAN": "99X", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "110.75" + }, + "09": { + "magHeading": "088", + "ILS": "110.70" + } + } + ], + "length": "12600" + } + ] + }, + "Al_Bateen_Airport": { + "ICAO": "OMAD", + "elevation": "12", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "127", + "ILS": "" + }, + "31": { + "magHeading": "307", + "ILS": "" + } + } + ], + "length": "7000" + } + ] + }, + "Bandar_Abbas_airfield": { + "ICAO": "OIKB", + "elevation": "29", + "TACAN": "78X", + "runways": [ + { + "headings": [ + { + "03L": { + "magHeading": "25", + "ILS": "" + }, + "21R": { + "magHeading": "205", + "ILS": "" + } + } + ], + "length": "11000" + }, + { + "headings": [ + { + "03R": { + "magHeading": "25", + "ILS": "" + }, + "21L": { + "magHeading": "205", + "ILS": "109.90" + } + } + ], + "length": "11700" + } + ] + }, + "Bandar_Lengeh_Airport": { + "ICAO": "OIBL", + "elevation": "82", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "259", + "ILS": "" + }, + "08": { + "magHeading": "079", + "ILS": "" + } + } + ], + "length": "7900" + } + ] + }, + "Bandar_e_Jask_airfield": { + "ICAO": "OIZJ", + "elevation": "26", + "TACAN": "110X", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "239", + "ILS": "" + }, + "06": { + "magHeading": "059", + "ILS": "" + } + } + ], + "length": "7300" + } + ] + }, + "Dubai_International_Airport": { + "ICAO": "OMDB", + "elevation": "16", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12L": { + "magHeading": "120", + "ILS": "110.10" + }, + "30R": { + "magHeading": "300", + "ILS": "110.90" + } + } + ], + "length": "11400" + }, + { + "headings": [ + { + "12R": { + "magHeading": "120", + "ILS": "109.50" + }, + "30L": { + "magHeading": "300", + "ILS": "111.30" + } + } + ], + "length": "11400" + } + ] + }, + "Fujarirah_AFB": { + "ICAO": "OMFJ", + "elevation": "121", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "111", + "ILS": "" + }, + "29": { + "magHeading": "291", + "ILS": "111.50" + } + } + ], + "length": "9700" + } + ] + }, + "Havadarya_AFB": { + "ICAO": "OIKP", + "elevation": "52", + "TACAN": "47X", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "257", + "ILS": "" + }, + "08": { + "magHeading": "077", + "ILS": "108.90" + } + } + ], + "length": "7200" + } + ] + }, + "Jiroft_airfield": { + "ICAO": "OIKJ", + "elevation": "2664", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "125", + "ILS": "" + }, + "31": { + "magHeading": "305", + "ILS": "" + } + } + ], + "length": "9600" + } + ] + }, + "Kerman_AFB": { + "ICAO": "OIKK", + "elevation": "5745", + "TACAN": "97X", + "runways": [ + { + "headings": [ + { + "16": { + "magHeading": "155", + "ILS": "" + }, + "34": { + "magHeading": "335", + "ILS": "" + } + } + ], + "length": "12400" + } + ] + }, + "Khasab_AFB": { + "ICAO": "OOKB", + "elevation": "102", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "19": { + "magHeading": "192", + "ILS": "110.30" + }, + "01": { + "magHeading": "012", + "ILS": "" + } + } + ], + "length": "8000" + } + ] + }, + "Kish_International_Airport": { + "ICAO": "OIBK", + "elevation": "115", + "TACAN": "112X", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "094", + "ILS": "" + }, + "28": { + "magHeading": "274", + "ILS": "" + } + } + ], + "length": "11700" + }, + { + "headings": [ + { + "09R": { + "magHeading": "094", + "ILS": "" + }, + "27L": { + "magHeading": "274", + "ILS": "" + } + } + ], + "length": "11700" + } + ] + }, + "Lar_airbase": { + "ICAO": "OISL", + "elevation": "2635", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "" + }, + "09": { + "magHeading": "088", + "ILS": "" + } + } + ], + "length": "10100" + } + ] + }, + "Lavan_Island_Airport": { + "ICAO": "OIBV", + "elevation": "75", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "110", + "ILS": "" + }, + "29": { + "magHeading": "290", + "ILS": "" + } + } + ], + "length": "8600" + } + ] + }, + "Liwa_Airbase": { + "ICAO": "OMLW", + "elevation": "400", + "TACAN": "121X", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "130", + "ILS": "" + }, + "31": { + "magHeading": "310", + "ILS": "" + } + } + ], + "length": "11600" + } + ] + }, + "Qeshm_Airport": { + "ICAO": "OIKQ", + "elevation": "26", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "23": { + "magHeading": "227", + "ILS": "" + }, + "05": { + "magHeading": "047", + "ILS": "" + } + } + ], + "length": "13600" + } + ] + }, + "Ras_Ai_Khaimah_International_Airport": { + "ICAO": "OMRK", + "elevation": "330", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "17": { + "magHeading": "163", + "ILS": "" + }, + "35": { + "magHeading": "343", + "ILS": "" + } + } + ], + "length": "12000" + } + ] + }, + "Sas_Ai_Nakheel_Airport": { + "ICAO": "OMNK", + "elevation": "10", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "16": { + "magHeading": "160", + "ILS": "" + }, + "34": { + "magHeading": "340", + "ILS": "" + } + } + ], + "length": "6000" + } + ] + }, + "Sharjah_International_Airport": { + "ICAO": "OMSJ", + "elevation": "26", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12L": { + "magHeading": "121", + "ILS": "108.55" + }, + "30R": { + "magHeading": "301", + "ILS": "111.95" + } + } + ], + "length": "10500" + }, + { + "headings": [ + { + "12R": { + "magHeading": "121", + "ILS": "" + }, + "30L": { + "magHeading": "301", + "ILS": "" + } + } + ], + "length": "10500" + } + ] + }, + "Shiraz_AFB": { + "ICAO": "OISS", + "elevation": "4879", + "TACAN": "94X", + "runways": [ + { + "headings": [ + { + "11L": { + "magHeading": "113", + "ILS": "" + }, + "29R": { + "magHeading": "293", + "ILS": "" + } + } + ], + "length": "14000" + }, + { + "headings": [ + { + "11R": { + "magHeading": "113", + "ILS": "" + }, + "29L": { + "magHeading": "293", + "ILS": "108.50" + } + } + ], + "length": "13800" + } + ] + }, + "Sir_Abu_Nuayr": { + "ICAO": "OMSN", + "elevation": "26", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "097", + "ILS": "" + }, + "28": { + "magHeading": "277", + "ILS": "" + } + } + ], + "length": "2300" + } + ] + }, + "Sirri_Island_AFB": { + "ICAO": "OIBS", + "elevation": "20", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "125", + "ILS": "" + }, + "30": { + "magHeading": "305", + "ILS": "" + } + } + ], + "length": "7900" + } + ] + }, + "Tunb_Islab_AFB": { + "ICAO": "OIGI", + "elevation": "43", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "21": { + "magHeading": "205", + "ILS": "" + }, + "03": { + "magHeading": "025", + "ILS": "" + } + } + ], + "length": "6200" + } + ] + }, + "Tonb_e_Kochak_Airport": { + "ICAO": "OITK", + "elevation": "16", + "TACAN": "89X", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "259", + "ILS": "" + }, + "08": { + "magHeading": "079", + "ILS": "" + } + } + ], + "length": "2500" + } + ] + } + } +} \ No newline at end of file diff --git a/client/public/databases/airbases/syria.json b/client/public/databases/airbases/syria.json new file mode 100644 index 00000000..e0ee84e6 --- /dev/null +++ b/client/public/databases/airbases/syria.json @@ -0,0 +1,1366 @@ +{ + "airfields": { + "Abu al-Duhur": { + "ICAO": "OS57", + "elevation": "820", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "" + }, + "09": { + "magHeading": "088", + "ILS": "" + } + } + ], + "length": "9200" + } + ] + }, + "Adana Sakirpasa": { + "ICAO": "LTAF", + "elevation": "56", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "23": { + "magHeading": "230", + "ILS": "" + }, + "05": { + "magHeading": "050", + "ILS": "108.70" + } + } + ], + "length": "8800" + } + ] + }, + "Akrotiri": { + "ICAO": "LCRA", + "elevation": "69", + "TACAN": "107X", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "106", + "ILS": "" + }, + "28": { + "magHeading": "286", + "ILS": "109.70" + } + } + ], + "length": "8800" + } + ] + }, + "Al Qusayr": { + "ICAO": "OS70", + "elevation": "1729", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "096", + "ILS": "" + }, + "28": { + "magHeading": "276", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Al-Dumayr": { + "ICAO": "OS61", + "elevation": "2067", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "240", + "ILS": "" + }, + "06": { + "magHeading": "060", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Aleppo": { + "ICAO": "OSAP", + "elevation": "1254", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "272", + "ILS": "" + }, + "09": { + "magHeading": "092", + "ILS": "" + } + } + ], + "length": "9200" + } + ] + }, + "An Nasiriyah": { + "ICAO": "OSAP", + "elevation": "1254", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "272", + "ILS": "" + }, + "09": { + "magHeading": "092", + "ILS": "" + } + } + ], + "length": "9200" + } + ] + }, + "At Tanf": { + "ICAO": "", + "elevation": "2329", + "TACAN": "", + "runways": [] + }, + "Bassel Al-Assad": { + "ICAO": "OSLK", + "elevation": "92", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "17L": { + "magHeading": "173", + "ILS": "" + }, + "35R": { + "magHeading": "353", + "ILS": "" + } + } + ], + "length": "7900" + }, + { + "headings": [ + { + "17R": { + "magHeading": "173", + "ILS": "109.10" + }, + "35L": { + "magHeading": "353", + "ILS": "" + } + } + ], + "length": "8900" + } + ] + }, + "Beirut-Rafic Hariri": { + "ICAO": "OLBA", + "elevation": "39", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "16": { + "magHeading": "164", + "ILS": "110.10" + }, + "34": { + "magHeading": "344", + "ILS": "" + } + } + ], + "length": "10300" + }, + { + "headings": [ + { + "17": { + "magHeading": "174", + "ILS": "109.50" + }, + "35": { + "magHeading": "354", + "ILS": "" + } + } + ], + "length": "7600" + }, + { + "headings": [ + { + "21": { + "magHeading": "210", + "ILS": "" + }, + "03": { + "magHeading": "030", + "ILS": "110.70" + } + } + ], + "length": "7000" + } + ] + }, + "Damascus": { + "ICAO": "OSDI", + "elevation": "2008", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "05L": { + "magHeading": "045", + "ILS": "" + }, + "23R": { + "magHeading": "225", + "ILS": "109.90" + } + } + ], + "length": "11600" + }, + { + "headings": [ + { + "05R": { + "magHeading": "045", + "ILS": "111.10" + }, + "23L": { + "magHeading": "225", + "ILS": "" + } + } + ], + "length": "11600" + } + ] + }, + "Deir ez-Zor": { + "ICAO": "OSDZ", + "elevation": "713", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "104", + "ILS": "" + }, + "28": { + "magHeading": "284", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Ercan": { + "ICAO": "LCEN", + "elevation": "312", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "110", + "ILS": "" + }, + "29": { + "magHeading": "290", + "ILS": "108.30" + } + } + ], + "length": "8700" + } + ] + }, + "Eyn Shemer": { + "ICAO": "LLES", + "elevation": "110", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "2750", + "ILS": "" + }, + "09": { + "magHeading": "095", + "ILS": "" + } + } + ], + "length": "4000" + } + ] + }, + "Gaziantep": { + "ICAO": "LTAJ", + "elevation": "2290", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "100", + "ILS": "" + }, + "28": { + "magHeading": "280", + "ILS": "109.10" + } + } + ], + "length": "9100" + } + ] + }, + "Gazipasa": { + "ICAO": "LTFG", + "elevation": "130", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "260", + "ILS": "" + }, + "08": { + "magHeading": "080", + "ILS": "108.50" + } + } + ], + "length": "7500" + } + ] + }, + "Gecitkale": { + "ICAO": "LCGK", + "elevation": "148", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "" + }, + "09": { + "magHeading": "088", + "ILS": "108.50" + } + } + ], + "length": "9100" + } + ] + }, + "H3": { + "ICAO": "", + "elevation": "2583", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "107", + "ILS": "" + }, + "29": { + "magHeading": "287", + "ILS": "" + } + } + ], + "length": "9500" + }, + { + "headings": [ + { + "24": { + "magHeading": "239", + "ILS": "" + }, + "06": { + "magHeading": "059", + "ILS": "" + } + } + ], + "length": "9800" + } + ] + }, + "H3 Northwest": { + "ICAO": "", + "elevation": "2582", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "117", + "ILS": "" + }, + "30": { + "magHeading": "297", + "ILS": "" + } + } + ], + "length": "8000" + } + ] + }, + "H3 Southwest": { + "ICAO": "", + "elevation": "2671", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "12": { + "magHeading": "116", + "ILS": "" + }, + "30": { + "magHeading": "296", + "ILS": "" + } + } + ], + "length": "8000" + } + ] + }, + "H4": { + "ICAO": "OJHR", + "elevation": "2257", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "098", + "ILS": "" + }, + "28": { + "magHeading": "278", + "ILS": "" + } + } + ], + "length": "8000" + } + ] + }, + "Haifa": { + "ICAO": "LLHA", + "elevation": "20", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "16": { + "magHeading": "157", + "ILS": "" + }, + "34": { + "magHeading": "337", + "ILS": "" + } + } + ], + "length": "3300" + } + ] + }, + "Hama": { + "ICAO": "OS58", + "elevation": "984", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "275", + "ILS": "" + }, + "09": { + "magHeading": "095", + "ILS": "" + } + } + ], + "length": "8600" + } + ] + }, + "Hatay": { + "ICAO": "LTDA", + "elevation": "253", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "219", + "ILS": "" + }, + "04": { + "magHeading": "039", + "ILS": "108.90" + } + } + ], + "length": "9600" + } + ] + }, + "Incirlik": { + "ICAO": "LTAG", + "elevation": "230", + "TACAN": "21X", + "runways": [ + { + "headings": [ + { + "23": { + "magHeading": "229", + "ILS": "111.70" + }, + "05": { + "magHeading": "049", + "ILS": "109.30" + } + } + ], + "length": "9500" + } + ] + }, + "Jirah": { + "ICAO": "OS62", + "elevation": "1173", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "095", + "ILS": "" + }, + "28": { + "magHeading": "275", + "ILS": "" + } + } + ], + "length": "9600" + } + ] + }, + "Khalkhalah": { + "ICAO": "OS69", + "elevation": "2418", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "15": { + "magHeading": "146", + "ILS": "" + }, + "33": { + "magHeading": "326", + "ILS": "" + } + } + ], + "length": "8300" + }, + { + "headings": [ + { + "25": { + "magHeading": "251", + "ILS": "" + }, + "07": { + "magHeading": "071", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Kharab Ishk": { + "ICAO": "", + "elevation": "1416", + "TACAN": "", + "runways": [] + }, + "King Hussein Air College": { + "ICAO": "OJMF", + "elevation": "2205", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "13": { + "magHeading": "127", + "ILS": "" + }, + "31": { + "magHeading": "307", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Kingsfield": { + "ICAO": "LCRE", + "elevation": "276", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "238", + "ILS": "" + }, + "06": { + "magHeading": "058", + "ILS": "" + } + } + ], + "length": "3300" + } + ] + }, + "Kiryat Shmona": { + "ICAO": "LLKS", + "elevation": "360", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "21": { + "magHeading": "213", + "ILS": "" + }, + "03": { + "magHeading": "033", + "ILS": "" + } + } + ], + "length": "3500" + } + ] + }, + "Kuweires": { + "ICAO": "OS66", + "elevation": "1201", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "095", + "ILS": "" + }, + "28": { + "magHeading": "275", + "ILS": "" + } + } + ], + "length": "7700" + } + ] + }, + "Lakatamia": { + "ICAO": "", + "elevation": "758", + "TACAN": "", + "runways": [] + }, + "Larnaca": { + "ICAO": "LCRE", + "elevation": "16", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "223", + "ILS": "110.30" + }, + "04": { + "magHeading": "043", + "ILS": "" + } + } + ], + "length": "8800" + } + ] + }, + "London": { + "ICAO": "", + "elevation": "", + "TACAN": "", + "runways": [] + }, + "Marj as Sultan North": { + "ICAO": "", + "elevation": "2008", + "TACAN": "", + "runways": [] + }, + "Marj as Sultan South": { + "ICAO": "", + "elevation": "2008", + "TACAN": "", + "runways": [] + }, + "Marj Ruhayyil": { + "ICAO": "OS63", + "elevation": "2161", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "06L": { + "magHeading": "059", + "ILS": "" + }, + "24R": { + "magHeading": "239", + "ILS": "" + } + } + ], + "length": "9400" + }, + { + "headings": [ + { + "06R": { + "magHeading": "059", + "ILS": "" + }, + "24L": { + "magHeading": "239", + "ILS": "" + } + } + ], + "length": "8400" + } + ] + }, + "Megiddo": { + "ICAO": "LLMG", + "elevation": "180", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "" + }, + "09": { + "magHeading": "088", + "ILS": "" + } + } + ], + "length": "6200" + } + ] + }, + "Mezzeh": { + "ICAO": "OS67", + "elevation": "2387", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "236", + "ILS": "" + }, + "06": { + "magHeading": "056", + "ILS": "" + } + } + ], + "length": "8800" + } + ] + }, + "Minakh": { + "ICAO": "OS71", + "elevation": "1614", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "10": { + "magHeading": "096", + "ILS": "" + }, + "28": { + "magHeading": "276", + "ILS": "" + } + } + ], + "length": "4500" + } + ] + }, + "Naqoura": { + "ICAO": "", + "elevation": "381", + "TACAN": "", + "runways": [] + }, + "Nicosia": { + "ICAO": "", + "elevation": "722", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "09": { + "magHeading": "092", + "ILS": "" + }, + "27": { + "magHeading": "272", + "ILS": "" + } + } + ], + "length": "5791" + }, + { + "headings": [ + { + "14": { + "magHeading": "148", + "ILS": "" + }, + "27": { + "magHeading": "228", + "ILS": "" + } + } + ], + "length": "8385" + } + ] + }, + "Palmyra": { + "ICAO": "OSPR", + "elevation": "1325", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "26": { + "magHeading": "259", + "ILS": "" + }, + "08": { + "magHeading": "079", + "ILS": "" + } + } + ], + "length": "9200" + } + ] + }, + "Paphos": { + "ICAO": "LCPH", + "elevation": "40", + "TACAN": "79X", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "109", + "ILS": "" + }, + "29": { + "magHeading": "289", + "ILS": "108.90" + } + } + ], + "length": "8600" + } + ] + }, + "Pinarbashi": { + "ICAO": "", + "elevation": "771", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "16": { + "magHeading": "167", + "ILS": "" + }, + "34": { + "magHeading": "347", + "ILS": "" + } + } + ], + "length": "3577" + } + ] + }, + "Qabr as Sitt": { + "ICAO": "", + "elevation": "2135", + "TACAN": "", + "runways": [] + }, + "Ramat David": { + "ICAO": "LLRD", + "elevation": "146", + "TACAN": "84X", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "105", + "ILS": "" + }, + "29": { + "magHeading": "285", + "ILS": "" + } + } + ], + "length": "7700" + }, + { + "headings": [ + { + "15": { + "magHeading": "141", + "ILS": "" + }, + "33": { + "magHeading": "321", + "ILS": "111.10" + } + } + ], + "length": "7700" + }, + { + "headings": [ + { + "27": { + "magHeading": "264", + "ILS": "" + }, + "09": { + "magHeading": "084", + "ILS": "" + } + } + ], + "length": "7600" + } + ] + }, + "Rayak": { + "ICAO": "OLRA", + "elevation": "3035", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "222", + "ILS": "" + }, + "04": { + "magHeading": "042", + "ILS": "" + } + } + ], + "length": "9400" + } + ] + }, + "Rene Mouawad": { + "ICAO": "OLKA", + "elevation": "23", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "24": { + "magHeading": "238", + "ILS": "" + }, + "06": { + "magHeading": "058", + "ILS": "" + } + } + ], + "length": "9000" + } + ] + }, + "Rosh Pina": { + "ICAO": "LLIB", + "elevation": "914", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "15": { + "magHeading": "147", + "ILS": "" + }, + "33": { + "magHeading": "327", + "ILS": "" + } + } + ], + "length": "2900" + }, + { + "headings": [ + { + "23": { + "magHeading": "229", + "ILS": "" + }, + "05": { + "magHeading": "049", + "ILS": "" + } + } + ], + "length": "3200" + } + ] + }, + "Ruwayshid": { + "ICAO": "", + "elevation": "2980", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "271", + "ILS": "" + }, + "09": { + "magHeading": "091", + "ILS": "" + } + } + ], + "length": "7000" + } + ] + }, + "Sanliurfa": { + "ICAO": "LTCS", + "elevation": "2703", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "22": { + "magHeading": "216", + "ILS": "" + }, + "04": { + "magHeading": "036", + "ILS": "" + } + } + ], + "length": "12900" + } + ] + }, + "Sayqal": { + "ICAO": "OS68", + "elevation": "2274", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "23": { + "magHeading": "235", + "ILS": "" + }, + "05": { + "magHeading": "055", + "ILS": "" + } + } + ], + "length": "7600" + }, + { + "headings": [ + { + "26": { + "magHeading": "265", + "ILS": "" + }, + "08": { + "magHeading": "085", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Shayrat": { + "ICAO": "OS65", + "elevation": "2638", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "11": { + "magHeading": "107", + "ILS": "" + }, + "29": { + "magHeading": "287", + "ILS": "" + } + } + ], + "length": "9300" + } + ] + }, + "Tabqa": { + "ICAO": "OS59", + "elevation": "1099", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "268", + "ILS": "" + }, + "09": { + "magHeading": "088", + "ILS": "" + } + } + ], + "length": "9300" + } + ] + }, + "Taftanaz": { + "ICAO": "", + "elevation": "", + "TACAN": "", + "runways": [] + }, + "Tal Siman": { + "ICAO": "", + "elevation": "", + "TACAN": "", + "runways": [] + }, + "Tha'lah": { + "ICAO": "OS60", + "elevation": "2414", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "23": { + "magHeading": "233", + "ILS": "" + }, + "05": { + "magHeading": "053", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Tiyas": { + "ICAO": "OS72", + "elevation": "1798", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "27": { + "magHeading": "265", + "ILS": "" + }, + "09": { + "magHeading": "085", + "ILS": "" + } + } + ], + "length": "9500" + } + ] + }, + "Wujah Al Hajar": { + "ICAO": "Z190", + "elevation": "641", + "TACAN": "", + "runways": [ + { + "headings": [ + { + "20": { + "magHeading": "204", + "ILS": "" + }, + "02": { + "magHeading": "024", + "ILS": "" + } + } + ], + "length": "4800" + } + ] + } + } +} \ No newline at end of file diff --git a/client/public/databases/aircraftdatabase.json b/client/public/databases/units/aircraftdatabase.json similarity index 100% rename from client/public/databases/aircraftdatabase.json rename to client/public/databases/units/aircraftdatabase.json diff --git a/client/public/databases/groundunitdatabase.json b/client/public/databases/units/groundunitdatabase.json similarity index 100% rename from client/public/databases/groundunitdatabase.json rename to client/public/databases/units/groundunitdatabase.json diff --git a/client/public/databases/helicopterdatabase.json b/client/public/databases/units/helicopterdatabase.json similarity index 100% rename from client/public/databases/helicopterdatabase.json rename to client/public/databases/units/helicopterdatabase.json diff --git a/client/public/databases/iran-iraq_fictional/aircraftdatabase.json b/client/public/databases/units/iran-iraq_fictional/aircraftdatabase.json similarity index 100% rename from client/public/databases/iran-iraq_fictional/aircraftdatabase.json rename to client/public/databases/units/iran-iraq_fictional/aircraftdatabase.json diff --git a/client/public/databases/iran-iraq_fictional/groundunitdatabase.json b/client/public/databases/units/iran-iraq_fictional/groundunitdatabase.json similarity index 100% rename from client/public/databases/iran-iraq_fictional/groundunitdatabase.json rename to client/public/databases/units/iran-iraq_fictional/groundunitdatabase.json diff --git a/client/public/databases/iran-iraq_fictional/helicopterdatabase.json b/client/public/databases/units/iran-iraq_fictional/helicopterdatabase.json similarity index 100% rename from client/public/databases/iran-iraq_fictional/helicopterdatabase.json rename to client/public/databases/units/iran-iraq_fictional/helicopterdatabase.json diff --git a/client/public/databases/iran-iraq_fictional/navyunitdatabase.json b/client/public/databases/units/iran-iraq_fictional/navyunitdatabase.json similarity index 100% rename from client/public/databases/iran-iraq_fictional/navyunitdatabase.json rename to client/public/databases/units/iran-iraq_fictional/navyunitdatabase.json diff --git a/client/public/databases/navyunitdatabase.json b/client/public/databases/units/navyunitdatabase.json similarity index 100% rename from client/public/databases/navyunitdatabase.json rename to client/public/databases/units/navyunitdatabase.json diff --git a/client/public/stylesheets/olympus.css b/client/public/stylesheets/olympus.css index 592eaffa..fabc3105 100644 --- a/client/public/stylesheets/olympus.css +++ b/client/public/stylesheets/olympus.css @@ -1074,10 +1074,6 @@ dl.ol-data-grid { row-gap: 4px; } -dl.ol-data-grid dd { - width: fit-content; -} - dl.ol-data-grid dt.icon { text-indent: 10px; } diff --git a/client/public/stylesheets/other/contextmenus.css b/client/public/stylesheets/other/contextmenus.css index 6a8494de..e292bf95 100644 --- a/client/public/stylesheets/other/contextmenus.css +++ b/client/public/stylesheets/other/contextmenus.css @@ -148,7 +148,7 @@ } #aircaft-loadout-list, -#helicopter-loadout-list { +#helicopter-loadout-list { align-content: center; display: flex; flex-direction: column; @@ -156,7 +156,7 @@ } #aircraft-unit-image, -#helicopter-unit-image { +#helicopter-unit-image { filter: invert(100%); height: 100px; margin-bottom: 10px; @@ -210,10 +210,10 @@ } .ol-context-menu .ol-slider-value { - color: var(--accent-light-blue); - cursor: pointer; - font-size: 14px; - font-weight: bold; + color: var(--accent-light-blue); + cursor: pointer; + font-size: 14px; + font-weight: bold; } .ol-context-menu .ol-slider-container { @@ -264,6 +264,9 @@ width: 16px; } + +/* Buttons */ + #center-map::before { content: url("/resources/theme/images/icons/arrows-to-eye-solid.svg"); } @@ -443,4 +446,44 @@ margin-top: 5px; text-align: center; width: 100%; +} + +/* Airbase context menu */ +#airbase-chart-data dd { + width: 60%; + font-weight: bold; +} + +#airbase-runways { + display: flex; + flex-direction: column; + row-gap: 4px; +} + +#airbase-runways>.runway { + border: 1px solid #ccc; + display: flex; + flex-direction: row; + justify-content: space-between; +} + +#airbase-runways>.runway abbr { + cursor: help; + text-decoration: none; +} + +#airbase-runways>.runway>.heading { + align-items: center; + column-gap: 4px; + display: flex; + flex-direction: row; +} + +#airbase-runways>.runway>.heading>abbr { + font-weight: var(--font-weight-bolder); + padding: 4px; +} + +#airbase-runways>.runway>.heading:last-of-type { + flex-direction: row-reverse; } \ No newline at end of file diff --git a/client/routes/api/airbases.js b/client/routes/api/airbases.js index a080c794..1c12bae8 100644 --- a/client/routes/api/airbases.js +++ b/client/routes/api/airbases.js @@ -15,69 +15,48 @@ const allowedTheatres = [ "syria" ]; - function getAirbasesData( theatreName ) { - if ( !isValidTheatre( theatreName ) ) { return false; } - return JSON.parse( fs.readFileSync( `src/airfields/${theatreName}.json` ) ).airfields - + return JSON.parse( fs.readFileSync( `public/databases/airbases/${theatreName}.json` ) ).airfields } - function isValidTheatre( theatre ) { - return ( allowedTheatres.indexOf( theatre ) > -1 ) - } - function sendInvalidTheatre( res ) { - res.status( 400 ).send( "Missing/invalid theatre name; must be one of:\n\t" + allowedTheatres.join( "\n\t" ) ); - } - /**************************************************************************************************************/ // Endpoints /**************************************************************************************************************/ - - - app.get( "/", ( req, res ) => { - sendInvalidTheatre( res ); - }); - app.get( "/:theatreName/:airbaseName", ( req, res ) => { - const airbases = getAirbasesData( req.params.theatreName ); - if ( !airbases ) { sendInvalidTheatre( res ); return; } const airbaseName = req.params.airbaseName; - if ( !airbases.hasOwnProperty( airbaseName ) ) { res.status( 404 ).send( `Unknown airbase name "${airbaseName}". Available options are:\n\t` + Object.keys( airbases ).join( "\n\t" ) ); } else { res.status( 200 ).json( airbases[ airbaseName ] ); } - - }); app.get( "/:theatreName", ( req, res ) => { - - const airbases = getAirbasesData( req.params.theatreName ); + const theatreName = req.params.theatreName.toLowerCase().replace( /\s*/g, "" ); + const airbases = getAirbasesData( theatreName ); if ( !airbases ) { sendInvalidTheatre( res ); @@ -85,9 +64,6 @@ app.get( "/:theatreName", ( req, res ) => { } res.status( 200 ).json( airbases ); - }); - - module.exports = app; \ No newline at end of file diff --git a/client/src/@types/unit.d.ts b/client/src/@types/unit.d.ts index 94bb0e7d..aced0a44 100644 --- a/client/src/@types/unit.d.ts +++ b/client/src/@types/unit.d.ts @@ -9,7 +9,7 @@ interface ObjectIconOptions { showFuel: boolean, showAmmo: boolean, showSummary: boolean, - showCallsign: boolean, + showCallsign: boolean, rotateToHeading: boolean } @@ -48,7 +48,7 @@ interface Contact { } interface Offset { - x: number, - y: number, + x: number, + y: number, z: number } \ No newline at end of file diff --git a/client/src/airfields/caucasus.json b/client/src/airfields/caucasus.json deleted file mode 100644 index 7c060874..00000000 --- a/client/src/airfields/caucasus.json +++ /dev/null @@ -1,361 +0,0 @@ -{ - "airfields": { - "Anapa-Vityazevo": { - "ICAO": "URKA", - "Elevation": "141", - "TACAN": "", - "Runways:": { - "04": { - "Mag Hdg": "034", - "Length": "9000", - "ILS": "" - }, - "22": { - "Mag Hdg": "214", - "Length": "9000", - "ILS": "" - } - } - }, - "Batumi": { - "ICAO": "UGSB", - "Elevation": "33", - "TACAN": "16X", - "Runways": { - "13": { - "Mag Hdg": "119", - "Length": "7500", - "ILS": "" - }, - "31": { - "Mag Hdg": "299", - "Length": "7500", - "ILS": "" - } - } - }, - "Beslan": { - "ICAO": "URMO", - "Elevation": "1722", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "086", - "Length": "9600", - "ILS": "110.50" - }, - "28": { - "Mag Hdg": "266", - "Length": "9600", - "ILS": "" - } - } - }, - "Gelendzhik": { - "ICAO": "URKG", - "Elevation": "72", - "TACAN": "", - "Runways": { - "01": { - "Mag Hdg": "032", - "Length": "5400", - "ILS": "" - }, - "19": { - "Mag Hdg": "212", - "Length": "5400", - "ILS": "" - } - } - }, - "Gudauta": { - "ICAO": "UG23", - "Elevation": "69", - "TACAN": "", - "Runways": { - "15": { - "Mag Hdg": "144", - "Length": "7700", - "ILS": "" - }, - "33": { - "Mag Hdg": "324", - "Length": "7700", - "ILS": "" - } - } - }, - "Kobuleti": { - "ICAO": "UG5X", - "Elevation": "69", - "TACAN": "67X", - "Runways": { - "07": { - "Mag Hdg": "063", - "Length": "7400", - "ILS": "111.50" - }, - "25": { - "Mag Hdg": "243", - "Length": "7400", - "ILS": "" - } - } - }, - "Krasnodar-Center": { - "ICAO": "URKL", - "Elevation": "98", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "079", - "Length": "7700", - "ILS": "" - }, - "27": { - "Mag Hdg": "259", - "Length": "7700", - "ILS": "" - } - } - }, - "Krasnodar-Pashkovsky": { - "ICAO": "URKK", - "Elevation": "112", - "TACAN": "", - "Runways": { - "05": { - "Mag Hdg": "039", - "Length": "9600", - "ILS": "" - }, - "23": { - "Mag Hdg": "219", - "Length": "9600", - "ILS": "" - } - } - }, - "Krymsk": { - "ICAO": "URKW", - "Elevation": "66", - "TACAN": "", - "Runways": { - "04": { - "Mag Hdg": "032", - "Length": "8000", - "ILS": "" - }, - "22": { - "Mag Hdg": "212", - "Length": "8000", - "ILS": "" - } - } - }, - "Kutaisi": { - "ICAO": "UGKO", - "Elevation": "148", - "TACAN": "44X", - "Runways": { - "07": { - "Mag Hdg": "067'", - "Length": "7700", - "ILS": "109.75" - }, - "25": { - "Mag Hdg": "247", - "Length": "7700", - "ILS": "" - } - } - }, - "Maykop-Khanskaya": { - "ICAO": "URKH", - "Elevation": "591", - "TACAN": "", - "Runways": { - "04": { - "Mag Hdg": "031", - "Length": "10100", - "ILS": "" - }, - "22": { - "Mag Hdg": "211", - "Length": "10100", - "ILS": "" - } - } - }, - "Mineralnye Vody": { - "ICAO": "URMM", - "Elevation": "1050", - "TACAN": "", - "Runways": { - "12": { - "Mag Hdg": "108", - "Length": "12700", - "ILS": "111.70" - }, - "30": { - "Mag Hdg": "288", - "Length": "12700", - "ILS": "109.30" - } - } - }, - "Mozdok": { - "ICAO": "XRMF", - "Elevation": "507", - "TACAN": "", - "Runways": { - "08": { - "Mag Hdg": "075", - "Length": "9400", - "ILS": "" - }, - "26": { - "Mag Hdg": "255", - "Length": "9400", - "ILS": "" - } - } - }, - "Nalchick": { - "ICAO": "URMN", - "Elevation": "1411", - "TACAN": "", - "Runways": { - "06": { - "Mag Hdg": "048'", - "Length": "7000", - "ILS": "" - }, - "24": { - "Mag Hdg": "228", - "Length": "7000", - "ILS": "110.50" - } - } - }, - "Novorossiysk": { - "ICAO": "URKN", - "Elevation": "131", - "TACAN": "", - "Runways": { - "04": { - "Mag Hdg": "034", - "Length": "5400", - "ILS": "" - }, - "22": { - "Mag Hdg": "214", - "Length": "5400", - "ILS": "" - } - } - }, - "Senaki-Kolkhi": { - "ICAO": "UGKS", - "Elevation": "43", - "TACAN": "31X", - "Runways": { - "09": { - "Mag Hdg": "088'", - "Length": "7400", - "ILS": "108.90" - }, - "27": { - "Mag Hdg": "268", - "Length": "7400", - "ILS": "" - } - } - }, - "Sochi-Adler": { - "ICAO": "URSS", - "Elevation": "98", - "TACAN": "", - "Runways": { - "06": { - "Mag Hdg": "055", - "Length": "9700", - "ILS": "111.10" - }, - "27": { - "Mag Hdg": "235", - "Length": "9700", - "ILS": "" - } - } - }, - "Tbilisi-Lochini": { - "ICAO": "UGTB", - "Elevation": "1574", - "TACAN": "25X", - "Runways": { - "13": { - "Mag Hdg": "121", - "Length": "9300", - "ILS": "110.30" - }, - "31": { - "Mag Hdg": "301", - "Length": "9300", - "ILS": "108.90" - } - } - }, - "Soganlug": { - "ICAO": "UG24", - "Elevation": "1500", - "TACAN": "25X", - "Runways": { - "14": { - "Mag Hdg": "125", - "Length": "6500", - "ILS": "" - }, - "32": { - "Mag Hdg": "305", - "Length": "6500", - "ILS": "" - } - } - }, - "Sukhumi-Babushara": { - "ICAO": "UGSS", - "Elevation": "43", - "TACAN": "", - "Runways": { - "12": { - "Mag Hdg": "109", - "Length": "11400", - "ILS": "" - }, - "30": { - "Mag Hdg": "289", - "Length": "11400", - "ILS": "" - } - } - }, - "Vaziani": { - "ICAO": "UG27", - "Elevation": "1524", - "TACAN": "22X", - "Runways": { - "13": { - "Mag Hdg": "129", - "Length": "7700", - "ILS": "108.75" - }, - "31": { - "Mag Hdg": "309", - "Length": "7700", - "ILS": "108.75" - } - } - } - } -} diff --git a/client/src/airfields/marianas.json b/client/src/airfields/marianas.json deleted file mode 100644 index 3451c203..00000000 --- a/client/src/airfields/marianas.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "airfields": { - "Andersen_AFB": { - "ICAO": "PGUA", - "Elevation": "606", - "TACAN": "54X", - "Runways:": { - "06L": { - "Mag Hdg": "066", - "Length": "10300", - "ILS": "109.30" - }, - "24R": { - "Mag Hdg": "246", - "Length": "10300", - "ILS": "109.35" - }, - "06R": { - "Mag Hdg": "066", - "Length": "10900", - "ILS": "110.10" - }, - "24l": { - "Mag Hdg": "246", - "Length": "10900", - "ILS": "110.15" - } - } - }, - "Antonio_B._Won_Pat_Int_Airport": { - "ICAO": "PGUM", - "Elevation": "255", - "TACAN": "105X", - "Runways:": { - "06L": { - "Mag Hdg": "066", - "Length": "10600", - "ILS": "110.30" - }, - "24R": { - "Mag Hdg": "245", - "Length": "10600", - "ILS": "" - }, - "06R": { - "Mag Hdg": "066", - "Length": "8600", - "ILS": "110.90" - }, - "24L": { - "Mag Hdg": "245", - "Length": "8600", - "ILS": "" - } - } - }, - "North_West_Field": { - "ICAO": "", - "Elevation": "522", - "TACAN": "", - "Runways:": { - "06": { - "Mag Hdg": "063", - "Length": "4500", - "ILS": "" - }, - "24": { - "Mag Hdg": "243", - "Length": "4500", - "ILS": "" - } - } - }, - "Olf_Orote_Field": { - "ICAO": "", - "Elevation": "94", - "TACAN": "", - "Runways:": { - "07": { - "Mag Hdg": "067", - "Length": "3500", - "ILS": "" - }, - "25": { - "Mag Hdg": "247", - "Length": "3500", - "ILS": "" - } - } - }, - "Pagan_Airstrip": { - "ICAO": "", - "Elevation": "49", - "TACAN": "", - "Runways:": { - "11": { - "Mag Hdg": "112", - "Length": "1800", - "ILS": "" - }, - "29": { - "Mag Hdg": "292", - "Length": "1800", - "ILS": "" - } - } - }, - "Rota_Int": { - "ICAO": "PGRO", - "Elevation": "569", - "TACAN": "", - "Runways:": { - "09": { - "Mag Hdg": "092", - "Length": "6600", - "ILS": "" - }, - "27": { - "Mag Hdg": "272", - "Length": "6600", - "ILS": "" - } - } - }, - "Saipan_Int": { - "ICAO": "PGSN", - "Elevation": "213", - "TACAN": "", - "Runways:": { - "06": { - "Mag Hdg": "068", - "Length": "6200", - "ILS": "" - }, - "24": { - "Mag Hdg": "248", - "Length": "6200", - "ILS": "" - }, - "07": { - "Mag Hdg": "068", - "Length": "10600", - "ILS": "109.90" - }, - "25": { - "Mag Hdg": "248", - "Length": "10600", - "ILS": "" - } - } - }, - "Tinian_Int": { - "ICAO": "PGWT", - "Elevation": "284", - "TACAN": "", - "Runways:": { - "08": { - "Mag Hdg": "079", - "Length": "8200", - "ILS": "" - }, - "26": { - "Mag Hdg": "259", - "Length": "8200", - "ILS": "" - } - } - } - } -} \ No newline at end of file diff --git a/client/src/airfields/nevada.json b/client/src/airfields/nevada.json deleted file mode 100644 index e94d1d4d..00000000 --- a/client/src/airfields/nevada.json +++ /dev/null @@ -1,413 +0,0 @@ -{ - "airfields": { - "BeattyAirport": { - "ICAO": "KBTY", - "Elevation": "3173", - "TACAN": "94X", - "Runways:": { - "16": { - "Mag Hdg": "168", - "Length": "5500", - "ILS": "" - }, - "34": { - "Mag Hdg": "348", - "Length": "5500", - "ILS": "" - } - } - }, - "BoulderCityAirport": { - "ICAO": "KBVU", - "Elevation": "2205", - "TACAN": "114X", - "Runways:": { - "09": { - "Mag Hdg": "087", - "Length": "4400", - "ILS": "" - }, - "27": { - "Mag Hdg": "267", - "Length": "4400", - "ILS": "" - }, - "15": { - "Mag Hdg": "153", - "Length": "3700", - "ILS": "" - }, - "33": { - "Mag Hdg": "333", - "Length": "3700", - "ILS": "" - } - } - }, - "Creech": { - "ICAO": "KINS", - "Elevation": "3126", - "TACAN": "87X", - "Runways:": { - "08": { - "Mag Hdg": "080", - "Length": "8700", - "ILS": "108.70" - }, - "26": { - "Mag Hdg": "260", - "Length": "8700", - "ILS": "" - }, - "13": { - "Mag Hdg": "134", - "Length": "4700", - "ILS": "" - }, - "31": { - "Mag Hdg": "314", - "Length": "4700", - "ILS": "" - } - } - }, - "EchoBayAirport": { - "ICAO": "0L9", - "Elevation": "1549", - "TACAN": "", - "Runways:": { - "06": { - "Mag Hdg": "066", - "Length": "3300", - "ILS": "" - }, - "24": { - "Mag Hdg": "246", - "Length": "3300", - "ILS": "" - } - } - }, - "groom": { - "ICAO": "KXTA", - "Elevation": "4495", - "TACAN": "18X", - "Runways:": { - "14L": { - "Mag Hdg": "145", - "Length": "11700", - "ILS": "" - }, - "32R": { - "Mag Hdg": "325", - "Length": "11700", - "ILS": "109.30" - }, - "14R (CLOSED)": { - "Mag Hdg": "145", - "Length": "17800", - "ILS": "" - }, - "32L (CLOSED)": { - "Mag Hdg": "325", - "Length": "17800", - "ILS": "" - } - } - }, - "HendersonExecutiveAirport": { - "ICAO": "KHND", - "Elevation": "2493", - "TACAN": "", - "Runways:": { - "17L": { - "Mag Hdg": "168", - "Length": "4600", - "ILS": "" - }, - "35R": { - "Mag Hdg": "348", - "Length": "4600", - "ILS": "" - }, - "17R": { - "Mag Hdg": "168", - "Length": "6100", - "ILS": "" - }, - "35L": { - "Mag Hdg": "348", - "Length": "6100", - "ILS": "" - } - } - }, - "JeanAirport": { - "ICAO": "", - "Elevation": "2825", - "TACAN": "", - "Runways:": { - "02L": { - "Mag Hdg": "020", - "Length": "4500", - "ILS": "" - }, - "20R": { - "Mag Hdg": "200", - "Length": "4500", - "ILS": "" - }, - "02R": { - "Mag Hdg": "020", - "Length": "3600", - "ILS": "" - }, - "20L": { - "Mag Hdg": "200", - "Length": "3600", - "ILS": "" - } - } - }, - "LasVegas": { - "ICAO": "KLAS", - "Elevation": "2178", - "TACAN": "116X", - "Runways:": { - "01L": { - "Mag Hdg": "013", - "Length": "8000", - "ILS": "" - }, - "19R": { - "Mag Hdg": "193", - "Length": "8000", - "ILS": "" - }, - "01R": { - "Mag Hdg": "013", - "Length": "8000", - "ILS": "" - }, - "19L": { - "Mag Hdg": "193", - "Length": "8000", - "ILS": "" - }, - "07L": { - "Mag Hdg": "078", - "Length": "10600", - "ILS": "" - }, - "25R": { - "Mag Hdg": "258", - "Length": "10600", - "ILS": "110.30" - }, - "07R": { - "Mag Hdg": "078", - "Length": "10100", - "ILS": "" - }, - "25L": { - "Mag Hdg": "258", - "Length": "10100", - "ILS": "" - } - } - }, - "LaughlinAirport": { - "ICAO": "KIFP", - "Elevation": "673", - "TACAN": "", - "Runways:": { - "16": { - "Mag Hdg": "164", - "Length": "7100", - "ILS": "" - }, - "34": { - "Mag Hdg": "344", - "Length": "7100", - "ILS": "" - } - } - }, - "LincolnCountyAirport": { - "ICAO": "", - "Elevation": "4816", - "TACAN": "", - "Runways:": { - "17": { - "Mag Hdg": "170", - "Length": "4500", - "ILS": "" - }, - "35": { - "Mag Hdg": "350", - "Length": "4500", - "ILS": "" - } - } - }, - "MesquiteAirport": { - "ICAO": "67L", - "Elevation": "1859", - "TACAN": "", - "Runways:": { - "01": { - "Mag Hdg": "017", - "Length": "5000", - "ILS": "" - }, - "19": { - "Mag Hdg": "197", - "Length": "5000", - "ILS": "" - } - } - }, - "MinahAirport_3Q0": { - "ICAO": "", - "Elevation": "4560", - "TACAN": "", - "Runways:": { - "13": { - "Mag Hdg": "140", - "Length": "4100", - "ILS": "" - }, - "31": { - "Mag Hdg": "320", - "Length": "4100", - "ILS": "" - } - } - }, - "nellis": { - "ICAO": "KLSV", - "Elevation": "1849", - "TACAN": "12X", - "Runways:": { - "03L": { - "Mag Hdg": "029", - "Length": "9800", - "ILS": "" - }, - "21R": { - "Mag Hdg": "209", - "Length": "9800", - "ILS": "" - }, - "03R": { - "Mag Hdg": "029", - "Length": "9800", - "ILS": "" - }, - "21L": { - "Mag Hdg": "209", - "Length": "9800", - "ILS": "109.10" - } - } - }, - "NorthLasVegasAirport": { - "ICAO": "KVGT", - "Elevation": "2228", - "TACAN": "", - "Runways:": { - "07": { - "Mag Hdg": "076", - "Length": "4900", - "ILS": "" - }, - "25": { - "Mag Hdg": "256", - "Length": "4900", - "ILS": "" - }, - "12L": { - "Mag Hdg": "122", - "Length": "3800", - "ILS": "110.70" - }, - "30R": { - "Mag Hdg": "302", - "Length": "3800", - "ILS": "109.10" - }, - "12R": { - "Mag Hdg": "122", - "Length": "4600", - "ILS": "" - }, - "30L": { - "Mag Hdg": "302", - "Length": "4600", - "ILS": "" - } - } - }, - "PahuteMesaAirstrip": { - "ICAO": "", - "Elevation": "5059", - "TACAN": "", - "Runways:": { - "18": { - "Mag Hdg": "182", - "Length": "5500", - "ILS": "" - }, - "36": { - "Mag Hdg": "002", - "Length": "5500", - "ILS": "" - } - } - }, - "TonopahAirport": { - "ICAO": "KTPH", - "Elevation": "5390", - "TACAN": "119X", - "Runways:": { - "11": { - "Mag Hdg": "113", - "Length": "5600", - "ILS": "" - }, - "29": { - "Mag Hdg": "293", - "Length": "5600", - "ILS": "" - }, - "15": { - "Mag Hdg": "153", - "Length": "6800", - "ILS": "" - }, - "33": { - "Mag Hdg": "333", - "Length": "6800", - "ILS": "" - } - } - }, - "TonopathAFB": { - "ICAO": "KTNX", - "Elevation": "5535", - "TACAN": "77X", - "Runways:": { - "14": { - "Mag Hdg": "145", - "Length": "11700", - "ILS": "108.30" - }, - "32": { - "Mag Hdg": "325", - "Length": "11700", - "ILS": "111.70" - } - } - } - } -} \ No newline at end of file diff --git a/client/src/airfields/persiangulf.json b/client/src/airfields/persiangulf.json deleted file mode 100644 index 81c3be69..00000000 --- a/client/src/airfields/persiangulf.json +++ /dev/null @@ -1,567 +0,0 @@ -{ - "airfields": { - "Abu_Dhabi_International_Airport": { - "ICAO": "OMAA", - "Elevation": "92", - "TACAN": "", - "Runways:": { - "13L": { - "Mag Hdg": "127", - "Length": "13100", - "ILS": "" - }, - "13R": { - "Mag Hdg": "127", - "Length": "13200", - "ILS": "" - }, - "31L": { - "Mag Hdg": "307", - "Length": "13100", - "ILS": "" - }, - "31R": { - "Mag Hdg": "307", - "Length": "13200", - "ILS": "" - } - } - }, - "Ai_Ain_International_Airport": { - "ICAO": "OMAL", - "Elevation": "814", - "TACAN": "", - "Runways:": { - "01": { - "Mag Hdg": "006", - "Length": "12800", - "ILS": "" - }, - "19": { - "Mag Hdg": "186", - "Length": "12800", - "ILS": "" - } - } - }, - "abu_musa_airport": { - "ICAO": "OIBA", - "Elevation": "16", - "TACAN": "", - "Runways:": { - "08": { - "Mag Hdg": "082", - "Length": "7800", - "ILS": "" - }, - "26": { - "Mag Hdg": "262", - "Length": "7800", - "ILS": "" - } - } - }, - "Dhafra_AFB": { - "ICAO": "OMAM", - "Elevation": "52", - "TACAN": "96X", - "Runways:": { - "13L": { - "Mag Hdg": "126", - "Length": "11700", - "ILS": "111.10" - }, - "31R": { - "Mag Hdg": "306", - "Length": "11700", - "ILS": "109.10" - }, - "13R": { - "Mag Hdg": "16", - "Length": "11700", - "ILS": "108.70" - }, - "31L": { - "Mag Hdg": "306", - "Length": "11700", - "ILS": "108.70" - } - } - }, - "Al_Maktoum_International_Airport": { - "ICAO": "OMDW", - "Elevation": "125", - "TACAN": "", - "Runways:": { - "12": { - "Mag Hdg": "120", - "Length": "14400", - "ILS": "111.75" - }, - "30": { - "Mag Hdg": "300", - "Length": "14400", - "ILS": "109.75" - } - } - }, - "Minhad_AFB": { - "ICAO": "OMDM", - "Elevation": "190", - "TACAN": "99X", - "Runways:": { - "09": { - "Mag Hdg": "088", - "Length": "12600", - "ILS": "110.70" - }, - "27": { - "Mag Hdg": "268", - "Length": "12600", - "ILS": "110.75" - } - } - }, - "Al_Bateen_Airport": { - "ICAO": "OMAD", - "Elevation": "12", - "TACAN": "", - "Runways:": { - "13": { - "Mag Hdg": "127", - "Length": "7000", - "ILS": "" - }, - "31": { - "Mag Hdg": "307", - "Length": "7000", - "ILS": "" - } - } - }, - "Bandar_Abbas_airfield": { - "ICAO": "OIKB", - "Elevation": "29", - "TACAN": "78X", - "Runways:": { - "03L": { - "Mag Hdg": "25", - "Length": "11000", - "ILS": "" - }, - "21R": { - "Mag Hdg": "205", - "Length": "10000", - "ILS": "" - }, - "03R": { - "Mag Hdg": "25", - "Length": "11700", - "ILS": "" - }, - "21L": { - "Mag Hdg": "205", - "Length": "11700", - "ILS": "109.90" - } - } - }, - "Bandar_Lengeh_Airport": { - "ICAO": "OIBL", - "Elevation": "82", - "TACAN": "", - "Runways:": { - "08": { - "Mag Hdg": "079", - "Length": "7900", - "ILS": "" - }, - "26": { - "Mag Hdg": "259", - "Length": "7900", - "ILS": "" - } - } - }, - "Bandar_e_Jask_airfield": { - "ICAO": "OIZJ", - "Elevation": "26", - "TACAN": "110X", - "Runways:": { - "06": { - "Mag Hdg": "059", - "Length": "7300", - "ILS": "" - }, - "24": { - "Mag Hdg": "239", - "Length": "7300", - "ILS": "" - } - } - }, - "Dubai_International_Airport": { - "ICAO": "OMDB", - "Elevation": "16", - "TACAN": "", - "Runways:": { - "12L": { - "Mag Hdg": "120", - "Length": "11400", - "ILS": "110.10" - }, - "30R": { - "Mag Hdg": "300", - "Length": "11400", - "ILS": "110.90" - }, - "12R": { - "Mag Hdg": "120", - "Length": "11400", - "ILS": "109.50" - }, - "30L": { - "Mag Hdg": "300", - "Length": "11400", - "ILS": "111.30" - } - } - }, - "Fujarirah_AFB": { - "ICAO": "OMFJ", - "Elevation": "121", - "TACAN": "", - "Runways:": { - "11": { - "Mag Hdg": "111", - "Length": "9700", - "ILS": "" - }, - "29": { - "Mag Hdg": "291", - "Length": "9700", - "ILS": "111.50" - } - } - }, - "Havadarya_AFB": { - "ICAO": "OIKP", - "Elevation": "52", - "TACAN": "47X", - "Runways:": { - "08": { - "Mag Hdg": "077", - "Length": "7200", - "ILS": "108.90" - }, - "26": { - "Mag Hdg": "257", - "Length": "7200", - "ILS": "" - } - } - }, - "Jiroft_airfield": { - "ICAO": "OIKJ", - "Elevation": "2664", - "TACAN": "", - "Runways:": { - "13": { - "Mag Hdg": "125", - "Length": "9600", - "ILS": "" - }, - "31": { - "Mag Hdg": "305", - "Length": "9600", - "ILS": "" - } - } - }, - "Kerman_AFB": { - "ICAO": "OIKK", - "Elevation": "5745", - "TACAN": "97X", - "Runways:": { - "16": { - "Mag Hdg": "155", - "Length": "12400", - "ILS": "" - }, - "34": { - "Mag Hdg": "335", - "Length": "12400", - "ILS": "" - } - } - }, - "Khasab_AFB": { - "ICAO": "OOKB", - "Elevation": "102", - "TACAN": "", - "Runways:": { - "01": { - "Mag Hdg": "012", - "Length": "8000", - "ILS": "" - }, - "19": { - "Mag Hdg": "192", - "Length": "8000", - "ILS": "110.30" - } - } - }, - "Kish_International_Airport": { - "ICAO": "OIBK", - "Elevation": "115", - "TACAN": "112X", - "Runways:": { - "10": { - "Mag Hdg": "094", - "Length": "11700", - "ILS": "" - }, - "28": { - "Mag Hdg": "274", - "Length": "11700", - "ILS": "" - }, - "09R": { - "Mag Hdg": "094", - "Length": "11700", - "ILS": "" - }, - "27L": { - "Mag Hdg": "274", - "Length": "11700", - "ILS": "" - } - } - }, - "Lar_airbase": { - "ICAO": "OISL", - "Elevation": "2635", - "TACAN": "", - "Runways:": { - "09": { - "Mag Hdg": "088", - "Length": "10100", - "ILS": "" - }, - "27": { - "Mag Hdg": "268", - "Length": "10100", - "ILS": "" - } - } - }, - "Lavan_Island_Airport": { - "ICAO": "OIBV", - "Elevation": "75", - "TACAN": "", - "Runways:": { - "11": { - "Mag Hdg": "110", - "Length": "8600", - "ILS": "" - }, - "29": { - "Mag Hdg": "290", - "Length": "8600", - "ILS": "" - } - } - }, - "Liwa_Airbase": { - "ICAO": "OMLW", - "Elevation": "400", - "TACAN": "121X", - "Runways:": { - "13": { - "Mag Hdg": "130", - "Length": "11600", - "ILS": "" - }, - "31": { - "Mag Hdg": "310", - "Length": "11600", - "ILS": "" - } - } - }, - "Qeshm_Airport": { - "ICAO": "OIKQ", - "Elevation": "26", - "TACAN": "", - "Runways:": { - "05": { - "Mag Hdg": "047", - "Length": "13600", - "ILS": "" - }, - "23": { - "Mag Hdg": "227", - "Length": "13600", - "ILS": "" - } - } - }, - "Ras_Ai_Khaimah_International_Airport": { - "ICAO": "OMRK", - "Elevation": "330", - "TACAN": "", - "Runways:": { - "17": { - "Mag Hdg": "163", - "Length": "12000", - "ILS": "" - }, - "35": { - "Mag Hdg": "343", - "Length": "12000", - "ILS": "" - } - } - }, - "Sas_Ai_Nakheel_Airport": { - "ICAO": "OMNK", - "Elevation": "10", - "TACAN": "", - "Runways:": { - "16": { - "Mag Hdg": "160", - "Length": "6000", - "ILS": "" - }, - "34": { - "Mag Hdg": "340", - "Length": "6000", - "ILS": "" - } - } - }, - "Sharjah_International_Airport": { - "ICAO": "OMSJ", - "Elevation": "26", - "TACAN": "", - "Runways:": { - "12L": { - "Mag Hdg": "121", - "Length": "10500", - "ILS": "108.55" - }, - "30R": { - "Mag Hdg": "301", - "Length": "10500", - "ILS": "111.95" - }, - "12R": { - "Mag Hdg": "121", - "Length": "10500", - "ILS": "" - }, - "30L": { - "Mag Hdg": "301", - "Length": "10500", - "ILS": "" - } - } - }, - "Shiraz_AFB": { - "ICAO": "OISS", - "Elevation": "4879", - "TACAN": "94X", - "Runways:": { - "11L": { - "Mag Hdg": "113", - "Length": "14000", - "ILS": "" - }, - "29R": { - "Mag Hdg": "293", - "Length": "14000", - "ILS": "" - }, - "11R": { - "Mag Hdg": "113", - "Length": "13800", - "ILS": "" - }, - "29L": { - "Mag Hdg": "293", - "Length": "13800", - "ILS": "108.50" - } - } - }, - "Sir_Abu_Nuayr": { - "ICAO": "OMSN", - "Elevation": "26", - "TACAN": "", - "Runways:": { - "10": { - "Mag Hdg": "097", - "Length": "2300", - "ILS": "" - }, - "28": { - "Mag Hdg": "277", - "Length": "2300", - "ILS": "" - } - } - }, - "Sirri_Island_AFB": { - "ICAO": "OIBS", - "Elevation": "20", - "TACAN": "", - "Runways:": { - "12": { - "Mag Hdg": "125", - "Length": "7900", - "ILS": "" - }, - "30": { - "Mag Hdg": "305", - "Length": "7900", - "ILS": "" - } - } - }, - "Tunb_Islab_AFB": { - "ICAO": "OIGI", - "Elevation": "43", - "TACAN": "", - "Runways:": { - "03": { - "Mag Hdg": "025", - "Length": "6200", - "ILS": "" - }, - "21": { - "Mag Hdg": "205", - "Length": "6200", - "ILS": "" - } - } - }, - "Tonb_e_Kochak_Airport": { - "ICAO": "OITK", - "Elevation": "16", - "TACAN": "89X", - "Runways:": { - "08": { - "Mag Hdg": "079", - "Length": "2500", - "ILS": "" - }, - "26": { - "Mag Hdg": "259", - "Length": "2500", - "ILS": "" - } - } - } - } -} diff --git a/client/src/airfields/syria.json b/client/src/airfields/syria.json deleted file mode 100644 index b48949b7..00000000 --- a/client/src/airfields/syria.json +++ /dev/null @@ -1,995 +0,0 @@ -{ - "airfields": { - "Abu_al-Duhur": { - "ICAO": "OS57", - "Elevation": "820", - "TACAN": "", - "Runways:": { - "09": { - "Mag Hdg": "088", - "Length": "9200", - "ILS": "" - }, - "27": { - "Mag Hdg": "268", - "Length": "9200", - "ILS": "" - } - } - }, - "Adana": { - "ICAO": "LTAF", - "Elevation": "56", - "TACAN": "", - "Runways": { - "05": { - "Mag Hdg": "050", - "Length": "8800", - "ILS": "108.70" - }, - "23": { - "Mag Hdg": "230", - "Length": "8800", - "ILS": "" - } - } - }, - "Akrotiri": { - "ICAO": "LCRA", - "Elevation": "69", - "TACAN": "107X", - "Runways": { - "10": { - "Mag Hdg": "106", - "Length": "8800", - "ILS": "" - }, - "28": { - "Mag Hdg": "286", - "Length": "8800", - "ILS": "109.70" - } - } - }, - "Al_Qusayr": { - "ICAO": "OS70", - "Elevation": "1729", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "096", - "Length": "9500", - "ILS": "" - }, - "28": { - "Mag Hdg": "276", - "Length": "9500", - "ILS": "" - } - } - }, - "Dumayr": { - "ICAO": "OS61", - "Elevation": "2067", - "TACAN": "", - "Runways": { - "06": { - "Mag Hdg": "060", - "Length": "9500", - "ILS": "" - }, - "24": { - "Mag Hdg": "240", - "Length": "9500", - "ILS": "" - } - } - }, - "Aleppo": { - "ICAO": "OSAP", - "Elevation": "1254", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "092", - "Length": "9200", - "ILS": "" - }, - "27": { - "Mag Hdg": "272", - "Length": "9200", - "ILS": "" - } - } - }, - "An_Nasiriyah": { - "ICAO": "OSAP", - "Elevation": "1254", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "092", - "Length": "9200", - "ILS": "" - }, - "27": { - "Mag Hdg": "272", - "Length": "9200", - "ILS": "" - } - } - }, - "At_Tanf": { - "ICAO": "", - "Elevation": "2329", - "TACAN": "", - "Runways": "" - }, - "Bassel_Al-Assad": { - "ICAO": "OSLK", - "Elevation": "92", - "TACAN": "", - "Runways": { - "17L": { - "Mag Hdg": "173", - "Length": "7900", - "ILS": "" - }, - "35R": { - "Mag Hdg": "353", - "Length": "7900", - "ILS": "" - }, - "17R": { - "Mag Hdg": "173", - "Length": "8900", - "ILS": "109.10" - }, - "35L": { - "Mag Hdg": "353", - "Length": "8900", - "ILS": "" - } - } - }, - "Beirut": { - "ICAO": "OLBA", - "Elevation": "39", - "TACAN": "", - "Runways": { - "03": { - "Mag Hdg": "030", - "Length": "7000", - "ILS": "110.70" - }, - "21": { - "Mag Hdg": "210", - "Length": "7000", - "ILS": "" - }, - "16": { - "Mag Hdg": "164", - "Length": "10300", - "ILS": "110.10" - }, - "34": { - "Mag Hdg": "344", - "Length": "10300", - "ILS": "" - }, - "17": { - "Mag Hdg": "174", - "Length": "7600", - "ILS": "109.50" - }, - "35": { - "Mag Hdg": "354", - "Length": "7600", - "ILS": "" - } - } - }, - "Damascus": { - "ICAO": "OSDI", - "Elevation": "2008", - "TACAN": "", - "Runways": { - "05L": { - "Mag Hdg": "045", - "Length": "11600", - "ILS": "" - }, - "23R": { - "Mag Hdg": "225", - "Length": "11600", - "ILS": "109.90" - }, - "05R": { - "Mag Hdg": "045", - "Length": "11600", - "ILS": "111.10" - }, - "23L": { - "Mag Hdg": "225", - "Length": "11600", - "ILS": "" - } - } - }, - "Deir_ez_Zor": { - "ICAO": "OSDZ", - "Elevation": "713", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "104", - "Length": "9500", - "ILS": "" - }, - "28": { - "Mag Hdg": "284", - "Length": "9500", - "ILS": "" - } - } - }, - "Ercan": { - "ICAO": "LCEN", - "Elevation": "312", - "TACAN": "", - "Runways": { - "11": { - "Mag Hdg": "110", - "Length": "8700", - "ILS": "" - }, - "29": { - "Mag Hdg": "290", - "Length": "8700", - "ILS": "108.30" - } - } - }, - "Eyn_Shemer": { - "ICAO": "LLES", - "Elevation": "110", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "095", - "Length": "4000", - "ILS": "" - }, - "27": { - "Mag Hdg": "2750", - "Length": "4000", - "ILS": "" - } - } - }, - "Gaziantep": { - "ICAO": "LTAJ", - "Elevation": "2290", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "100", - "Length": "9100", - "ILS": "" - }, - "28": { - "Mag Hdg": "280", - "Length": "9100", - "ILS": "109.10" - } - } - }, - "Gazipasa": { - "ICAO": "LTFG", - "Elevation": "130", - "TACAN": "", - "Runways": { - "08": { - "Mag Hdg": "080", - "Length": "7500", - "ILS": "108.50" - }, - "26": { - "Mag Hdg": "260", - "Length": "7500", - "ILS": "" - } - } - }, - "Gecitkale": { - "ICAO": "LCGK", - "Elevation": "148", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "088", - "Length": "9100", - "ILS": "108.50" - }, - "27": { - "Mag Hdg": "268", - "Length": "9100", - "ILS": "" - } - } - }, - "H3": { - "ICAO": "", - "Elevation": "2583", - "TACAN": "", - "Runways": { - "06": { - "Mag Hdg": "059", - "Length": "9800", - "ILS": "" - }, - "24": { - "Mag Hdg": "239", - "Length": "9800", - "ILS": "" - }, - "11": { - "Mag Hdg": "107", - "Length": "9500", - "ILS": "" - }, - "29": { - "Mag Hdg": "287", - "Length": "9500", - "ILS": "" - } - } - }, - "H3_Northwest": { - "ICAO": "", - "Elevation": "2582", - "TACAN": "", - "Runways": { - "12": { - "Mag Hdg": "117", - "Length": "8000", - "ILS": "" - }, - "30": { - "Mag Hdg": "297", - "Length": "8000", - "ILS": "" - } - } - }, - "H3_Southwest": { - "ICAO": "", - "Elevation": "2671", - "TACAN": "", - "Runways": { - "12": { - "Mag Hdg": "116", - "Length": "8000", - "ILS": "" - }, - "30": { - "Mag Hdg": "296", - "Length": "8000", - "ILS": "" - } - } - }, - "H4": { - "ICAO": "OJHR", - "Elevation": "2257", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "098", - "Length": "8000", - "ILS": "" - }, - "28": { - "Mag Hdg": "278", - "Length": "8000", - "ILS": "" - } - } - }, - "Haifa": { - "ICAO": "LLHA", - "Elevation": "20", - "TACAN": "", - "Runways": { - "16": { - "Mag Hdg": "157", - "Length": "3300", - "ILS": "" - }, - "34": { - "Mag Hdg": "337", - "Length": "3300", - "ILS": "" - } - } - }, - "Hama": { - "ICAO": "OS58", - "Elevation": "984", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "095", - "Length": "8600", - "ILS": "" - }, - "27": { - "Mag Hdg": "275", - "Length": "8600", - "ILS": "" - } - } - }, - "Hatay": { - "ICAO": "LTDA", - "Elevation": "253", - "TACAN": "", - "Runways": { - "04": { - "Mag Hdg": "039", - "Length": "9600", - "ILS": "108.90" - }, - "22": { - "Mag Hdg": "219", - "Length": "9600", - "ILS": "" - } - } - }, - "Incirlik": { - "ICAO": "LTAG", - "Elevation": "230", - "TACAN": "21X", - "Runways": { - "05": { - "Mag Hdg": "049", - "Length": "9600", - "ILS": "109.30" - }, - "23": { - "Mag Hdg": "229", - "Length": "9500", - "ILS": "111.70" - } - } - }, - "Jirah": { - "ICAO": "OS62", - "Elevation": "1173", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "095", - "Length": "9600", - "ILS": "" - }, - "28": { - "Mag Hdg": "275", - "Length": "9600", - "ILS": "" - } - } - }, - "Khalkhalah": { - "ICAO": "OS69", - "Elevation": "2418", - "TACAN": "", - "Runways": { - "07": { - "Mag Hdg": "071", - "Length": "9500", - "ILS": "" - }, - "25": { - "Mag Hdg": "251", - "Length": "9500", - "ILS": "" - }, - "15": { - "Mag Hdg": "146", - "Length": "8300", - "ILS": "" - }, - "33": { - "Mag Hdg": "326", - "Length": "8300", - "ILS": "" - } - } - }, - "Kharab_Ishk": { - "ICAO": "", - "Elevation": "1416", - "TACAN": "", - "Runways": "" - }, - "King_Hussein": { - "ICAO": "OJMF", - "Elevation": "2205", - "TACAN": "", - "Runways": { - "13": { - "Mag Hdg": "127", - "Length": "9500", - "ILS": "" - }, - "31": { - "Mag Hdg": "307", - "Length": "9500", - "ILS": "" - } - } - }, - "Kingsfield": { - "ICAO": "LCRE", - "Elevation": "276", - "TACAN": "", - "Runways": { - "06": { - "Mag Hdg": "058", - "Length": "3300", - "ILS": "" - }, - "24": { - "Mag Hdg": "238", - "Length": "3300", - "ILS": "" - } - } - }, - "Kiryat_Shmona": { - "ICAO": "LLKS", - "Elevation": "360", - "TACAN": "", - "Runways": { - "03": { - "Mag Hdg": "033", - "Length": "3500", - "ILS": "" - }, - "21": { - "Mag Hdg": "213", - "Length": "3500", - "ILS": "" - } - } - }, - "Kuweires": { - "ICAO": "OS66", - "Elevation": "1201", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "095", - "Length": "7700", - "ILS": "" - }, - "28": { - "Mag Hdg": "275", - "Length": "7700", - "ILS": "" - } - } - }, - "Lakatamia": { - "ICAO": "", - "Elevation": "758", - "TACAN": "", - "Runways": "" - }, - "Larnaca": { - "ICAO": "LCRE", - "Elevation": "16", - "TACAN": "", - "Runways": { - "04": { - "Mag Hdg": "043", - "Length": "8800", - "ILS": "" - }, - "22": { - "Mag Hdg": "223", - "Length": "8800", - "ILS": "110.30" - } - } - }, - "Marj_Al_Sultan": { - "ICAO": "", - "Elevation": "2008", - "TACAN": "", - "Runways": "" - }, - "Marj_Ruhayyil": { - "ICAO": "OS63", - "Elevation": "2161", - "TACAN": "", - "Runways": { - "06L": { - "Mag Hdg": "059", - "Length": "9400", - "ILS": "" - }, - "24R": { - "Mag Hdg": "239", - "Length": "9400", - "ILS": "" - }, - "06R": { - "Mag Hdg": "059", - "Length": "8400", - "ILS": "" - }, - "24L": { - "Mag Hdg": "239", - "Length": "8400", - "ILS": "" - } - } - }, - "Megiddo": { - "ICAO": "LLMG", - "Elevation": "180", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "088", - "Length": "6200", - "ILS": "" - }, - "27": { - "Mag Hdg": "268", - "Length": "6200", - "ILS": "" - } - } - }, - "Mezzeh": { - "ICAO": "OS67", - "Elevation": "2387", - "TACAN": "", - "Runways": { - "06": { - "Mag Hdg": "056", - "Length": "8800", - "ILS": "" - }, - "24": { - "Mag Hdg": "236", - "Length": "8800", - "ILS": "" - } - } - }, - "Minakh": { - "ICAO": "OS71", - "Elevation": "1614", - "TACAN": "", - "Runways": { - "10": { - "Mag Hdg": "096", - "Length": "4500", - "ILS": "" - }, - "28": { - "Mag Hdg": "276", - "Length": "4500", - "ILS": "" - } - } - }, - "Naqoura": { - "ICAO": "", - "Elevation": "381", - "TACAN": "", - "Runways": "" - }, - "Palmyra": { - "ICAO": "OSPR", - "Elevation": "1325", - "TACAN": "", - "Runways": { - "08": { - "Mag Hdg": "079", - "Length": "9200", - "ILS": "" - }, - "26": { - "Mag Hdg": "259", - "Length": "9200", - "ILS": "" - } - } - }, - "Paphos": { - "ICAO": "LCPH", - "Elevation": "40", - "TACAN": "79X", - "Runways": { - "11": { - "Mag Hdg": "109", - "Length": "8600", - "ILS": "" - }, - "29": { - "Mag Hdg": "289", - "Length": "8600", - "ILS": "108.90" - } - } - }, - "Qabr_al_Sitt": { - "ICAO": "", - "Elevation": "2135", - "TACAN": "", - "Runways": "" - }, - "Ramat_David": { - "ICAO": "LLRD", - "Elevation": "146", - "TACAN": "84X", - "Runways": { - "09": { - "Mag Hdg": "084", - "Length": "7600", - "ILS": "" - }, - "27": { - "Mag Hdg": "264", - "Length": "7600", - "ILS": "" - }, - "11": { - "Mag Hdg": "105", - "Length": "7700", - "ILS": "" - }, - "29": { - "Mag Hdg": "285", - "Length": "7700", - "ILS": "" - }, - "15": { - "Mag Hdg": "141", - "Length": "7700", - "ILS": "" - }, - "33": { - "Mag Hdg": "321", - "Length": "7700", - "ILS": "111.10" - } - } - }, - "Rayak": { - "ICAO": "OLRA", - "Elevation": "3035", - "TACAN": "", - "Runways": { - "04": { - "Mag Hdg": "042", - "Length": "9400", - "ILS": "" - }, - "22": { - "Mag Hdg": "222", - "Length": "9400", - "ILS": "" - } - } - }, - "Rene_Mouawad": { - "ICAO": "OLKA", - "Elevation": "23", - "TACAN": "", - "Runways": { - "06": { - "Mag Hdg": "058", - "Length": "9000", - "ILS": "" - }, - "24": { - "Mag Hdg": "238", - "Length": "9000", - "ILS": "" - } - } - }, - "Rosh_Pina": { - "ICAO": "LLIB", - "Elevation": "914", - "TACAN": "", - "Runways": { - "05": { - "Mag Hdg": "049", - "Length": "3200", - "ILS": "" - }, - "23": { - "Mag Hdg": "229", - "Length": "3200", - "ILS": "" - }, - "15": { - "Mag Hdg": "147", - "Length": "2900", - "ILS": "" - }, - "33": { - "Mag Hdg": "327", - "Length": "2900", - "ILS": "" - } - } - }, - "Ruwayshid": { - "ICAO": "", - "Elevation": "2980", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "091", - "Length": "7000", - "ILS": "" - }, - "27": { - "Mag Hdg": "271", - "Length": "7000", - "ILS": "" - } - } - }, - "Sanliurfa": { - "ICAO": "LTCS", - "Elevation": "2703", - "TACAN": "", - "Runways": { - "04": { - "Mag Hdg": "036", - "Length": "12900", - "ILS": "" - }, - "22": { - "Mag Hdg": "216", - "Length": "12900", - "ILS": "" - } - } - }, - "Sayqal": { - "ICAO": "OS68", - "Elevation": "2274", - "TACAN": "", - "Runways": { - "05": { - "Mag Hdg": "055", - "Length": "7600", - "ILS": "" - }, - "23": { - "Mag Hdg": "235", - "Length": "7600", - "ILS": "" - }, - "08": { - "Mag Hdg": "085", - "Length": "9500", - "ILS": "" - }, - "26": { - "Mag Hdg": "265", - "Length": "9500", - "ILS": "" - } - } - }, - "Shayrat": { - "ICAO": "OS65", - "Elevation": "2638", - "TACAN": "", - "Runways": { - "11": { - "Mag Hdg": "107", - "Length": "9300", - "ILS": "" - }, - "29": { - "Mag Hdg": "287", - "Length": "9300", - "ILS": "" - } - } - }, - "Tabqa": { - "ICAO": "OS59", - "Elevation": "1099", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "088", - "Length": "9300", - "ILS": "" - }, - "27": { - "Mag Hdg": "268", - "Length": "9300", - "ILS": "" - } - } - }, - "Taftanaz": { - "ICAO": "", - "Elevation": "", - "TACAN": "", - "Runways": "" - }, - "Tal_Siman": { - "ICAO": "", - "Elevation": "", - "TACAN": "", - "Runways": "" - }, - "thalah": { - "ICAO": "OS60", - "Elevation": "2414", - "TACAN": "", - "Runways": { - "05": { - "Mag Hdg": "053", - "Length": "9500", - "ILS": "" - }, - "23": { - "Mag Hdg": "233", - "Length": "9500", - "ILS": "" - } - } - }, - "Tiyas": { - "ICAO": "OS72", - "Elevation": "1798", - "TACAN": "", - "Runways": { - "09": { - "Mag Hdg": "085", - "Length": "9500", - "ILS": "" - }, - "27": { - "Mag Hdg": "265", - "Length": "9500", - "ILS": "" - } - } - }, - "Wujah_Al_Hajar": { - "ICAO": "Z190", - "Elevation": "641", - "TACAN": "", - "Runways": { - "02": { - "Mag Hdg": "024", - "Length": "4800", - "ILS": "" - }, - "20": { - "Mag Hdg": "204", - "Length": "4800", - "ILS": "" - } - } - } - } -} diff --git a/client/src/controls/airbasecontextmenu.ts b/client/src/controls/airbasecontextmenu.ts index beb6bd14..0d00d17d 100644 --- a/client/src/controls/airbasecontextmenu.ts +++ b/client/src/controls/airbasecontextmenu.ts @@ -1,6 +1,7 @@ import { getMap, getMissionHandler, getUnitsManager, setActiveCoalition } from ".."; import { BLUE_COMMANDER, GAME_MASTER, RED_COMMANDER } from "../constants/constants"; import { Airbase } from "../mission/airbase"; +import { dataPointMap } from "../other/utils"; import { ContextMenu } from "./contextmenu"; export class AirbaseContextMenu extends ContextMenu { @@ -21,12 +22,16 @@ export class AirbaseContextMenu extends ContextMenu { setAirbase(airbase: Airbase) { this.#airbase = airbase; - this.setName(airbase.getName()); - this.setProperties(airbase.getProperties()); - this.setParkings(airbase.getParkings()); - this.setCoalition(airbase.getCoalition()); - this.enableLandButton(getUnitsManager().getSelectedUnitsTypes().length == 1 && ["Aircraft", "Helicopter"].includes(getUnitsManager().getSelectedUnitsTypes()[0]) && (getUnitsManager().getSelectedUnitsCoalition() === airbase.getCoalition() || airbase.getCoalition() === "neutral")) + this.setName(this.#airbase.getName()); + this.setProperties(this.#airbase.getProperties()); + this.setParkings(this.#airbase.getParkings()); + this.setCoalition(this.#airbase.getCoalition()); + this.enableLandButton(getUnitsManager().getSelectedUnitsTypes().length == 1 && ["Aircraft", "Helicopter"].includes(getUnitsManager().getSelectedUnitsTypes()[0]) && (getUnitsManager().getSelectedUnitsCoalition() === this.#airbase.getCoalition() || this.#airbase.getCoalition() === "neutral")) this.enableSpawnButton(getMissionHandler().getCommandModeOptions().commandMode == GAME_MASTER || this.#airbase.getCoalition() == getMissionHandler().getCommandedCoalition()); + + this.#setAirbaseData(); + + this.clip(); } setName(airbaseName: string) { @@ -75,4 +80,60 @@ export class AirbaseContextMenu extends ContextMenu { getMap().getMapContextMenu().setLatLng(this.#airbase.getLatLng()); } } + + #setAirbaseData() { + if (this.#airbase && this.getContainer()) { + dataPointMap(this.getContainer() as HTMLElement, { + "coalition": this.#airbase.getCoalition(), + "airbaseName": this.#airbase.getName() + }); + + dataPointMap( this.getContainer() as HTMLElement, this.#airbase.getChartData() ); + + const runwaysContainer = this.getContainer()?.querySelector( "#airbase-runways" ) as HTMLElement; + runwaysContainer.innerHTML = ""; + + if ( runwaysContainer instanceof HTMLElement ) { + const runways = this.#airbase.getChartData().runways; + + if ( runways.length === 0 ) { + runwaysContainer.innerText = "No data"; + } else { + runways.forEach( runway => { + let runwayDiv = document.createElement( "div" ); + runwayDiv.classList.add( "runway" ); + + runway.headings.forEach( headings => { + for ( const [ heading, data ] of Object.entries( headings ) ) { + + let headingDiv = document.createElement( "div" ); + headingDiv.classList.add( "heading" ); + + let abbr = document.createElement( "abbr" ); + abbr.title = `Mag heading: ${data.magHeading}`; + abbr.innerText = heading; + + headingDiv.appendChild( abbr ); + runwayDiv.appendChild( headingDiv ); + + if ( data.ILS ) { + let ilsDiv = document.createElement( "div" ); + ilsDiv.classList.add( "ils" ); + + abbr = document.createElement( "abbr" ); + abbr.title = data.ILS; + abbr.innerText = "ILS"; + + ilsDiv.appendChild( abbr ); + headingDiv.appendChild( ilsDiv ); + } + } + }); + + runwaysContainer.appendChild( runwayDiv ); + }); + } + } + } + } } \ No newline at end of file diff --git a/client/src/mission/airbase.ts b/client/src/mission/airbase.ts index 2510d0da..e1477acd 100644 --- a/client/src/mission/airbase.ts +++ b/client/src/mission/airbase.ts @@ -2,33 +2,61 @@ import { DivIcon } from 'leaflet'; import { CustomMarker } from '../map/custommarker'; import { SVGInjector } from '@tanem/svg-injector'; -export interface AirbaseOptions -{ +export interface AirbaseOptions { name: string, position: L.LatLng } -export class Airbase extends CustomMarker -{ + +export interface AirbaseChartData { + elevation: string, + ICAO: string, + TACAN: string, + runways: AirbaseChartRunwayData[] +} + +export interface AirbaseChartRunwayData { + "headings": AirbaseChartRunwayHeadingData[], + "length": string +} + +export interface AirbaseChartRunwayHeadingData { + [index: string]: { + "magHeading": string, + "ILS": string + } +} + +export class Airbase extends CustomMarker { #name: string = ""; + #chartData: AirbaseChartData = { + elevation: "", + ICAO: "", + TACAN: "", + runways: [] + }; #coalition: string = ""; + #hasChartDataBeenSet: boolean = false; #properties: string[] = []; #parkings: string[] = []; - constructor(options: AirbaseOptions) - { + constructor(options: AirbaseOptions) { super(options.position, { riseOnHover: true }); this.#name = options.name; } + chartDataHasBeenSet() { + return this.#hasChartDataBeenSet; + } + createIcon() { - var icon = new DivIcon({ + var icon = new DivIcon({ className: 'leaflet-airbase-marker', iconSize: [40, 40], iconAnchor: [20, 20] - }); // Set the marker, className must be set to avoid white square - this.setIcon(icon); + }); // Set the marker, className must be set to avoid white square + this.setIcon(icon); var el = document.createElement("div"); el.classList.add("airbase-icon"); @@ -41,44 +69,45 @@ export class Airbase extends CustomMarker el.dataset.coalition = this.#coalition; } - setCoalition(coalition: string) - { + setCoalition(coalition: string) { this.#coalition = coalition; - ( this.getElement()?.querySelector(".airbase-icon")).dataset.coalition = this.#coalition; + (this.getElement()?.querySelector(".airbase-icon")).dataset.coalition = this.#coalition; } - getCoalition() - { + getChartData() { + return this.#chartData; + } + + getCoalition() { return this.#coalition; } - setName(name: string) - { + setName(name: string) { this.#name = name; } - getName() - { + getName() { return this.#name; } - setProperties(properties: string[]) - { + setChartData(chartData: AirbaseChartData) { + this.#hasChartDataBeenSet = true; + this.#chartData = chartData; + } + + setProperties(properties: string[]) { this.#properties = properties; } - getProperties() - { + getProperties() { return this.#properties; } - setParkings(parkings: string[]) - { + setParkings(parkings: string[]) { this.#parkings = parkings; } - getParkings() - { + getParkings() { return this.#parkings; } -} +} \ No newline at end of file diff --git a/client/src/mission/missionhandler.ts b/client/src/mission/missionhandler.ts index facf7682..301f312a 100644 --- a/client/src/mission/missionhandler.ts +++ b/client/src/mission/missionhandler.ts @@ -1,6 +1,6 @@ import { LatLng } from "leaflet"; import { getInfoPopup, getMap } from ".."; -import { Airbase } from "./airbase"; +import { Airbase, AirbaseChartData } from "./airbase"; import { Bullseye } from "./bullseye"; import { BLUE_COMMANDER, GAME_MASTER, NONE, RED_COMMANDER } from "../constants/constants"; import { refreshAll, setCommandModeOptions } from "../server/server"; @@ -49,23 +49,25 @@ export class MissionHandler { updateAirbases(data: AirbasesData) { for (let idx in data.airbases) { var airbase = data.airbases[idx] - if (this.#airbases[idx] === undefined && airbase.callsign != '') { - this.#airbases[idx] = new Airbase({ + if (this.#airbases[airbase.callsign] === undefined && airbase.callsign != '') { + this.#airbases[airbase.callsign] = new Airbase({ position: new LatLng(airbase.latitude, airbase.longitude), name: airbase.callsign }).addTo(getMap()); - this.#airbases[idx].on('contextmenu', (e) => this.#onAirbaseClick(e)); + this.#airbases[airbase.callsign].on('contextmenu', (e) => this.#onAirbaseClick(e)); + this.#loadAirbaseChartData(airbase.callsign); } - if (this.#airbases[idx] != undefined && airbase.latitude && airbase.longitude && airbase.coalition) { - this.#airbases[idx].setLatLng(new LatLng(airbase.latitude, airbase.longitude)); - this.#airbases[idx].setCoalition(airbase.coalition); + if (this.#airbases[airbase.callsign] != undefined && airbase.latitude && airbase.longitude && airbase.coalition) { + this.#airbases[airbase.callsign].setLatLng(new LatLng(airbase.latitude, airbase.longitude)); + this.#airbases[airbase.callsign].setCoalition(airbase.coalition); } } } updateMission(data: MissionData) { if (data.mission) { + /* Set the mission theatre */ if (data.mission.theatre != this.#theatre) { this.#theatre = data.mission.theatre; @@ -231,4 +233,24 @@ export class MissionHandler { #onAirbaseClick(e: any) { getMap().showAirbaseContextMenu(e.originalEvent.x, e.originalEvent.y, e.latlng, e.sourceTarget); } + + #loadAirbaseChartData(callsign: string) { + if ( !this.#theatre ) { + return; + } + + var xhr = new XMLHttpRequest(); + xhr.open('GET', `api/airbases/${this.#theatre.toLowerCase()}/${callsign}`, true); + xhr.responseType = 'json'; + xhr.onload = () => { + var status = xhr.status; + if (status === 200) { + const data = xhr.response; + this.getAirbases()[callsign].setChartData(data); + } else { + console.error(`Error retrieving data for ${callsign} airbase`) + } + }; + xhr.send(); + } } \ No newline at end of file diff --git a/client/src/unit/aircraftdatabase.ts b/client/src/unit/aircraftdatabase.ts index f7781ef3..d3f4e5cb 100644 --- a/client/src/unit/aircraftdatabase.ts +++ b/client/src/unit/aircraftdatabase.ts @@ -4,7 +4,7 @@ import { UnitDatabase } from "./unitdatabase" export class AircraftDatabase extends UnitDatabase { constructor() { - super('databases/aircraftdatabase.json'); + super('databases/units/aircraftdatabase.json'); } getCategory() { diff --git a/client/src/unit/groundunitdatabase.ts b/client/src/unit/groundunitdatabase.ts index ea17316d..2a8d7c5f 100644 --- a/client/src/unit/groundunitdatabase.ts +++ b/client/src/unit/groundunitdatabase.ts @@ -4,7 +4,7 @@ import { UnitDatabase } from "./unitdatabase" export class GroundUnitDatabase extends UnitDatabase { constructor() { - super('databases/groundunitdatabase.json'); + super('databases/units/groundunitdatabase.json'); } getSpawnPointsByName(name: string) { diff --git a/client/src/unit/helicopterdatabase.ts b/client/src/unit/helicopterdatabase.ts index 362de71b..031e9ad8 100644 --- a/client/src/unit/helicopterdatabase.ts +++ b/client/src/unit/helicopterdatabase.ts @@ -4,7 +4,7 @@ import { UnitDatabase } from "./unitdatabase" export class HelicopterDatabase extends UnitDatabase { constructor() { - super('databases/helicopterdatabase.json'); + super('databases/units/helicopterdatabase.json'); } getSpawnPointsByName(name: string) { diff --git a/client/src/unit/navyunitdatabase.ts b/client/src/unit/navyunitdatabase.ts index 5e5f7cde..5f113943 100644 --- a/client/src/unit/navyunitdatabase.ts +++ b/client/src/unit/navyunitdatabase.ts @@ -4,7 +4,7 @@ import { UnitDatabase } from "./unitdatabase" export class NavyUnitDatabase extends UnitDatabase { constructor() { - super('databases/navyunitdatabase.json'); + super('databases/units/navyunitdatabase.json'); } getSpawnPointsByName(name: string) { diff --git a/client/views/other/contextmenus.ejs b/client/views/other/contextmenus.ejs index 8511626b..fe63ffbb 100644 --- a/client/views/other/contextmenus.ejs +++ b/client/views/other/contextmenus.ejs @@ -211,12 +211,23 @@

-
- -
-

Parking available:

-
+
+
ICAO
+
+
Coalition
+
+
Elevation
+
ft
+
TACAN
+
+
+ +

Runways

+
+
+ +