Формат навигационных баз данных ARINC 424 существует аж с 1975 года, за это время он довольно сильно эволюционировал в сторону наполнения новыми типами данных, но основной "скелет" этой базы данных, описанный в 424-ой спецификации, остался практически без изменений.
База данных в формате ARINC 424 представляет собой текстовый файл, в котором построчно закодированы аэронавигационные данные: воздушные трассы, путевые точки, навигационные средства, аэродромы (КТА), взлетно-посадочные полосы (ВПП), процедуры выхода, подхода, захода на посадку и др.
В результате получается очень большой по количеству строк файл, в котором найти нужную запись для проверки, анализа или использования для каких-либо целей весьма затруднительно, особенно, если база данных содержит информацию по всему миру, а не только по ограниченному району (региону).
Для информации: навигационная БД на весь мир состоит из 1 500 000 – 2 500 000 строк, в зависимости от поставщика данных и заказываемого объектового состава.
Немного из истории спецификации ARINC 424:
Уже несколько лет подряд навигационный комитет планирует работу над кардинально новой версии спецификации - ARINC 424A, использующей стандарт AIXM 5.1, но пока данная работа не завершена.
БД в формате ARINC 424 включает в себя различные типы данных (применительно к 19 версии спецификации):
Код раздела |
Название раздела |
Код подраздела |
Название подраздела |
A |
S |
GRID MORA |
|
D |
Navaid |
Blank B T |
VHF Navaid NDB Navaid TACAN Duplicates |
E |
Enroute |
A M P R S T U V |
Waypoints Airway Markers Holding Patterns Airways and Routes Special Activity Areas Prefered Routes Airway Restrictions Communications |
H |
Heliport |
A С D E F K S P V |
Pads Terminal Waypoints SIDs STARs Approach procedures TAA MSA SBAS Path Point Communications |
P |
Airport |
A B C D E F G I K L M N P Q R S T V |
Reference Points Gates Terminal Waypoints SIDs STARs Approach procedures Runways Localizer/Glide Slope(ILS) TAA MLS Localizer Markers Terminal NDBs SBAS Path Point GBAS Path Point Flight Planning ARR/DEP MSA GLS Station Communications |
R |
Company Routes |
Blank A H |
Company Routes Alternate Records Helicopter Operation Routes |
T |
Tables |
C G N V |
Cruising Tables Geographical Reference RNAV Name Table Communication Type |
U |
Airspace |
C F R |
Controlled Airspace FIR/UIR Restricted Airspace |
При выполнении задач проверки навигационных баз данных возможны такие ситуации, когда нужно найти среди этого массива строк необходимые записи (как иголку в стоге сена).
Существует несколько способов поиска нужной информации в базе данных ARINC 424:
Рассмотрим вариант с PowerShell более подробно.
Примечание: для составления команд необходимо знать основы и использовать документ Спецификация ARINC 424 «Базы данных для навигационных систем» соответствующей версии - в зависимости от версии используемого файла базы данных, а также знать регулярные выражения POSIX.
Windows PowerShell — расширяемое средство автоматизации от Microsoft с открытым исходным кодом[1], состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев. Впервые публично язык был продемонстрирован на Профессиональной конференции разработчиков (англ. Professional Developers Conference, PDC) в сентябре 2003 года под кодовым названием Monad.
Windows PowerShell 2.0 был выпущен в составе Windows 7, Windows 8 и Windows Server 2008 R2, а также Windows Server 2012 R2, как неотъемлемый компонент системы. Кроме того, вторая версия доступна и для других систем, таких, как Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008[2] и Windows Server 2012.
Windows PowerShell построен на базе Microsoft .NET Framework и интегрирован с ним. Дополнительно PowerShell предоставляет удобный доступ к COM, WMI и ADSI, равно как и позволяет выполнять обычные команды командной строки, чтобы создать единое окружение, в котором администраторы смогли бы выполнять различные задачи на локальных и удалённых системах.
from wikipedia
Запустить Windows PowerShell можно, конечно, через кнопку Пуск -> Выполнить
Но для простоты и удобства (чтобы не выполнять переход к папке с базой данных через консольные команды) лучше запустить PowerShell сразу в той директории, в которой находится исходная база данных, - выборку из которой и требуется сделать.
Для этого в проводнике Windows открыть нужную директорию и в адресной строке проводника просто написать PowerShell и нажать Enter.
PowerShell запустится и отобразит сразу нужную директорию, а не папку текущего пользователя на диске С:
Вставить текст команды из буфера обмена (просто кликнуть правой кнопкой мыши в окне PowerShell, и текст вставится) или написать полностью вручную:
Нажать Enter и дождаться окончания работы программы.
Если перед командой для создания выборки из базы данных добавить команду get-date; и такую же команду добавить в конце, то можно будет узнать точное время, затраченное программой PowerShell на обработку базы данных (дата и время начала и окончания работы скрипта отобразятся на экране):
Как вам результат? Из текстового файла, содержащего более 1,6 миллиона строк, PowerShell выбрал и сохранил в файл только необходимые данные и потратил на это всего лишь 47 секунд!
Текст команды для PowerShell:
get-content ARINC424-db_1607.txt -readcount 500 | foreach -process {$_ -match "^.((?!EUR|AFR).)*$"} | set-content ARINC424_WITHOUT_EUR_AFR.txt;
get-content – команда получения содержимого файла. Можно использовать сокращение – gc.
ARINC424_sample.txt – название исходного обрабатываемого файла (название должно содержать только буквы, цифры, тире, знак подчеркивания, точку, запятую).
-readcount 500 – параметр команды get-content, читать данные блоками по 500 строк (его использовать не обязательно, он только оптимизирует запрос).
foreach –process {} – цикл перебора строк
$_ – переменная, содержащая текущую строку в цикле перебора FOREACH.
-match – оператор сравнения с регулярным выражением.
"^.((?!EUR|AFR).)*$" – регулярное выражение POSIX, можно сказать - «маска» поиска.
Подробнее по частям:
^. – первым символом в строке может быть любой символ (^ – обозначение начала строки). В принципе, можно было записать и так: ^S потому что обычно первым символом в каждой строке базы данных ARINC 424 стоит буква S, что означает, что это стандартная запись (теоретически может первым символом быть буква Т - в случае, если в БД имеются пользовательские (tailored) данные авиакомпании, например, маршруты авиакомпании - см. таблицу выше);
EUR | AFR - регионы мира, записи которых будут исключены из базы данных (код региона, состоящий из трех букв всегда располагается во 2-4 столбцах). Все остальные регионы должны остаться;
set-content - команда сохранить данные в файл (можно заменить на сокращенный вариант - sc);
ARINC424_WITHOUT_EUR_AFR.txt - название файла для сохранения результата.
Текст команды для PowerShell с отображением даты и времени на экране:
get-date; get-content ARINC424-db_1607.txt -readcount 500 | foreach -process {$_ -match "^.((?!EUR|AFR).)*$"} | set-content ARINC424_WITHOUT_EUR_AFR.txt; get-date;
Текст команды для PowerShell с записью даты и времени в результирующий файл (будут записаны в начале и в конце):
get-content ARINC424-db_1607.txt -readcount 500 | foreach -begin {get-date} -process {$_ -match "^.((?!EUR|AFR).)*$"} | -end {get-date} set-content ARINC424_WITHOUT_EUR_AFR.txt;
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach -process {$_ -match "^.((?!EUR|MES|EEU|AFR|PAC|SPA).)*$"} | sc ARINC424_AMERICAS_ONLY_1607.txt; get-date;
Расшифровка команды аналогична предыдущему примеру, только в регулярном выражении POSIX добавлены дополнительные регионы мира (MES - Middle East (Ближний Восток), EEU - East Europe (Восточная Европа), PAC - Pacific (Тихоокеанская зона) и SPA - South Pacific (Южная часть Тихоокеанской зоны)).
В итоговом файле должны остаться только аэронавигационные данные по регионам USA (США), CAN (Канада), LAM (Латинская Америка), SAM (Южная Америка) и записи GRID MORA на весь мир.
Обработка данных заняла 37 секунд.
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}P UWWW"} | sc P_UWWW_1607.txt; get-date;
^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);
.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);
P UWWW – следующий (пятый) символ – буква P, затем - пробел, затем подряд буквы - UWWW.
Обработка данных (1,6 млн записей в БД) заняла всего 2 секунды - результатом был файл с аэронавигационными данными по аэродрому Самара Курумоч, содержащий 379 строк.
Таким образом, меняя в запросе ИКАО-код (в этом примере - UWWW) аэродрома, можно выбрать все записи по требуемому аэродрому.
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}P UWWW.{2}D"} | sc PD_UWWW_1607.txt; get-date;
^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);
.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);
P UWWW – следующий (пятый) символ – буква P, затем - пробел (шестой), затем подряд буквы - UWWW (7-10 столбцы);
.{2} - далее могут быть два любых символа подряд (11-12 столбцы);
D - далее должна быть буква «D» (13-ый столбец) - код подраздела.
Обработка данных (1,6 млн записей в БД) заняла также всего 2 секунды - результатом был файл с закодированными процедурами SID аэродрома Самара Курумоч (68 строк).
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}P ZBAA.{2}D" -replace "(^.{6})(.{4})(.{3})(.{6})(.{113})", ('$2'+"`t"+'$4') -replace " ", ""} | sort | gu > ZBAA_SIDs_LIST.txt; get-date;
Результат был получен также за 2 секунды, оказалось, что у аэродрома Пекин 107 процедур SID (на момент действия БД цикла AIRAC 1607).
Когда возникает вопрос, какие типы записей закодированы в базе данных и нужно получить их полный список.
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -replace "(^.{4})(.{2})(.{6})(.{1})(.{119})", ('$2'+'$4')} | sort | gu > All_Records.txt; get-date;
Выбирает уникальные записи по 5, 6 и 13 столбцам.
Код раздела, к которому относится запись, содержится всегда в 5-ом столбце, код подраздела указывается либо в 6-ом (для маршрутных записей), либо в 13-ом (для записей аэродромных объектов). Таким образом каждая строка разбивается на 5 частей:
1-4 столбцы (не нужны для обработки);
5-6 столбцы (используем);
7-12 столбцы (не нужны для обработки);
13 столбец (используем);
12-132 столбцы (не нужны для обработки).
Затем значения 5, 6 и 13 столбцов складываются в одну строку.
gu - сокращенный вариант командлета get-unique - выбирает только уникальные записи. По умолчанию сортирует результат по алфавиту.
Из-за специфики стандарта БД Arinc 424 результат получается не идеальным, и полученную выборку нужно "слегка обработать напильником" - удалить несколько лишних строк:
- 2 строки заголовка базы данных;
- повторы по коду раздела "U": UC, UF, UR (т.к. у таких записей в 13-ом столбце стоит не пробел, а возможна цифра или буква);
- повторы записей типа "EV".
Если необходимо узнать количество аэродромов в базе данных и получить из перечень.
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}P .{6}A"} | sc PA_1607.txt; get-date;
^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);
.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);
P – следующий (пятый) символ – буква P;
.{6} - далее могут быть шесть любых символов подряд (6-12 столбцы);
A - далее должна быть буква «A» (13-ый столбец) - код подраздела.
Обработка данных (1,6 млн записей в БД) заняла 6 секунд - результатом был файл со списком аэродромов (3 695 строк = 3 695 записей КТА аэродромов).
Если необходимо получить выборку всех ВПП (взлетно-посадочных полос) аэродромов из базы данных ARINC 424.
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}P .{6}G"} | sc PG_1607.txt; get-date;
^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);
.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);
P – следующий (пятый) символ – буква P;
.{6} - далее могут быть шесть любых символов подряд (6-12 столбцы);
G - далее должна быть буква «G» (13-ый столбец) - код подраздела.
Обработка данных (1,6 млн записей в БД) заняла 7 секунд - результатом был файл со списком ВПП аэродромов (8 874 строк = 8 874 торца ВПП).
Если необходимо узнать количество аэродромов в базе данных и получить из перечень.
Текст команды для PowerShell:
get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}EA.{7}A...A"} | sc EA_A-A_1607.txt; get-date;
^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);
.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);
EA – следующие символы (пятый и шестой) – буквы подряд - EA;
.{7} - далее могут быть семь любых символов подряд (7-13 столбцы);
A - далее должна быть буква «A» (14-ый столбец) - первая буква обозначения ППМ;
... - три точки = три любых символа;
A - далее должна быть буква «A» (18-ый столбец) - последняя (пятая) буква обозначения ППМ.
Обработка данных (1,6 млн записей в БД) заняла 6 секунд - результатом был файл со списком ППМ, которые начинаются и заканчиваются на букву A (546 строк = 546 ППМ).
Продолжение следует, новые варианты запросов к БД ARINC 424 с помощью Windows PowerShell будут добавлены позже.
Есть такое iOS-приложение - Garmin Pilot, которое можно было бы назвать замечательным, но с марта 2022 года она стало немного иным... Но, довольно грустной лирики, ибо есть люди, которые до сих пор пользуются этим приложеним не смотря ни на что. Итак, в некоторых случаях пилотам может понадобиться выполнять полет и контролировать местоположение ВС относительно некого трека, который был записан ранее. Если...
Код экземпляра устройства (vendor code) электронного оборудования или компонента позволяет узнать - какой именно производитель создал данное оборудование (hardware). Владение информацией о коде экземпляра устройства позволяет найти драйверы именно для этого устройства, реально совместимые с ним.
Не смотря на тесную дружбу Jeppesen и Garmin, программы и файлы этих разных производителей, увы, не дружат. И пользователям приходится ломать голову, над той или иной задачей, которая подразумевает использование файлов одного типа в программах другого типа. Например, может возникнуть необходимость отобразить какой-либо GPS-трек, записанный с помощью навигатора Garmin, на карте в программе...
Если xCode при компиляции проекта ругается на часть кода и выдает ошибку, например, такую: Thread 4: Exception: -[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] may only be called from the main thread. Это означает, что данный кусок кода должен выполняться в главном потоке, а не в дополнительном.
При обновлении программы Jepp View иногда может понадобиться код зоны покрытия навигационной БД (coverage code). В течение последних нескольких лет Jeppesen программирует и выдает своим клиентам такие серийные номера для программ при последующих обновлениях которых не нужно вводить coverage code - он уже не нужен, т.к. программа установки обновления автоматически его считывает в системе на...
Jeppesen создал JDM (Jeppesen Distribution Manager) для iOS и объявил о стратегическом альянсе с компанией Bad Elf, которая выпустила портативный аксессуар для загрузки /выгрузки данных – Bad Ef Wombat. Устройство Wombat представляет собой беспроводную систему передачи данных, а программа JDM (iOS) позволяет скачать обновления навигационных баз данных Jeppesen в iPad или в iPhone для...
Я не часто создаю промокоды, а еще реже ими пользуюсь сам и поэтому каждый раз забываю - куда код вставлять, чтобы использовать, хорошо, что у меня есть эта шпаргалка :)