Формат навигационных баз данных ARINC 424 существует аж с 1975 года, за это время он довольно сильно эволюционировал в сторону наполнения новыми типами данных, но основной "скелет" этой базы данных, описанный в 424-ой спецификации, остался практически без изменений.

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

База данных в формате ARINC 424 представляет собой текстовый файл, в котором построчно закодированы аэронавигационные данные: воздушные трассы, путевые точки, навигационные средства, аэродромы (КТА), взлетно-посадочные полосы (ВПП), процедуры выхода, подхода, захода на посадку и др.




В результате получается очень большой по количеству строк файл, в котором найти нужную запись для проверки, анализа или использования для каких-либо целей весьма затруднительно, особенно, если база данных содержит информацию по всему миру, а не только по ограниченному району (региону).

Для информации: навигационная БД на весь мир состоит из 1 500 000 – 2 500 000 строк, в зависимости от поставщика данных и заказываемого объектового состава.

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

 

Немного из истории спецификации ARINC 424:

  • 1973 год - на собрании очередного навигационного комитета было принято решение и заложен фундамент для создания спецификации для баз данных для навигационных систем.
  • 1975 год - документ "Спецификация ARINC 424" был впервые опубликован.
  • 1980 год - редакция спецификации - 424-1.
  • 1982 год - редакция спецификации - 424-3.
  • 1993 год - редакция спецификации - 424-11.
  • 1995 год - редакция спецификации - 424-13.
  • 1999 год - редакция спецификации - 424-14.
  • 2000 год - редакция спецификации - 424-15.
  • 2004 год - редакция спецификации - 424-17.
  • 2008 год - редакция спецификации - 424-19.
  • 2011 год - редакция спецификации - 424-20.
  • 2016 год - редакция спецификации - 424-21.

Уже несколько лет подряд навигационный комитет планирует работу над кардинально новой версии спецификации - 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

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:

  • экспорт записей в реляционную базу данных SQL, Access (сложно, трудоемкий и длительный процесс подготовки, требующий специального ПО, настроек и др.);
  • использование специализированных программ, например эту или эту;
  • ручной поиск в текстовом редакторе Notepad, Notepad++ и др. (очень трудоемко, неудобно и не продуктивно);
  • использование Windows PowerShell.

Рассмотрим вариант с 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

 

Запуск PowerShell

Запустить Windows PowerShell можно, конечно, через кнопку Пуск -> Выполнить

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

Но для простоты и удобства (чтобы не выполнять переход к папке с базой данных через консольные команды) лучше запустить PowerShell сразу в той директории, в которой находится исходная база данных, - выборку из которой и требуется сделать.

Для этого в проводнике Windows открыть нужную директорию и в адресной строке проводника просто написать PowerShell и нажать Enter.

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

 

PowerShell запустится и отобразит сразу нужную директорию, а не папку текущего пользователя на диске С:

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

 

Задача 1: Удалить из базы данных записи по всем объектам определенных географических зон:

Например, Европу (EUR) и Африку (AFR).

Вставить текст команды из буфера обмена (просто кликнуть правой кнопкой мыши в окне PowerShell, и текст вставится) или написать полностью вручную:

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

Нажать Enter и дождаться окончания работы программы.

Если перед командой для создания выборки из базы данных добавить команду get-date; и такую же команду добавить в конце, то можно будет узнать точное время, затраченное программой PowerShell на обработку базы данных (дата и время начала и окончания работы скрипта отобразятся на экране):

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

Как вам результат? Из текстового файла, содержащего более 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 строк (его использовать не обязательно, он только оптимизирует запрос).

foreachprocess {} – цикл перебора строк

$_ – переменная, содержащая текущую строку в цикле перебора 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;




 

Задача 2: Удалить из навигационной базы данных все записи кроме Северной и Южной Америк:

Текст команды для 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 (Южная часть Тихоокеанской зоны)).

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424

В итоговом файле должны остаться только аэронавигационные данные по регионам USA (США), CAN (Канада), LAM (Латинская Америка), SAM (Южная Америка) и записи GRID MORA на весь мир.

Обработка данных заняла 37 секунд.

 

 

Задача 3: Выбрать из навигационной базы данных все записи по аэродрому Самара Курумоч

Текст команды для PowerShell:

get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}P UWWW"} | sc P_UWWW_1607.txt; get-date;
Расшифровка регулярного выражения POSIX:

^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);

.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);

P UWWW – следующий (пятый) символ – буква P, затем - пробел, затем подряд буквы - UWWW.

Обработка данных (1,6 млн записей в БД) заняла всего 2 секунды - результатом был файл с аэронавигационными данными по аэродрому Самара Курумоч, содержащий 379 строк.

Таким образом, меняя в запросе ИКАО-код (в этом примере - UWWW) аэродрома, можно выбрать все записи по требуемому аэродрому.

 

 

Задача 4: Выбрать из навигационной базы данных все записи процедур SID аэродрома Самара Курумоч

Текст команды для 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;
Расшифровка регулярного выражения POSIX:

^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);

.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);

P UWWW – следующий (пятый) символ – буква P, затем - пробел (шестой), затем подряд буквы - UWWW (7-10 столбцы);

.{2} - далее могут быть два любых символа подряд (11-12 столбцы);

D - далее должна быть буква «D» (13-ый столбец) - код подраздела.

Обработка данных (1,6 млн записей в БД) заняла также всего 2 секунды - результатом был файл с закодированными процедурами SID аэродрома Самара Курумоч (68 строк).

 

 

Задача 5: Выбрать из навигационной базы данных все записи процедур SID аэродрома Пекин (Beijing Capital) и сформировать список названий процедур SID (только уникальные, без повторов) вида «[ИКАО-код а/д]     [название процедуры]»

Текст команды для 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).

 

 

Задача 5: Получить список типов записей БД

Когда возникает вопрос, какие типы записей закодированы в базе данных и нужно получить их полный список.

Текст команды для 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".

 

 

Задача 6: Выбрать из навигационной базы данных все записи по аэродромам (PA-records)

Если необходимо узнать количество аэродромов в базе данных и получить из перечень.

Текст команды для PowerShell:

get-date; gc ARINC424-db_1607.txt -readcount 500 | foreach {$_ -match "^S.{3}P .{6}A"} | sc PA_1607.txt; get-date;

Расшифровка регулярного выражения POSIX:

^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);

.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);

P – следующий (пятый) символ – буква P;

.{6} - далее могут быть шесть любых символов подряд (6-12 столбцы);

A - далее должна быть буква «A» (13-ый столбец) - код подраздела.

Обработка данных (1,6 млн записей в БД) заняла 6 секунд - результатом был файл со списком аэродромов (3 695 строк = 3 695 записей КТА аэродромов).

 

 

Задача 7: Выбрать из навигационной базы данных все записи по ВПП аэродромов (PG-records)

Если необходимо получить выборку всех ВПП (взлетно-посадочных полос) аэродромов из базы данных 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;

Расшифровка регулярного выражения POSIX:

^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);

.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);

P – следующий (пятый) символ – буква P;

.{6} - далее могут быть шесть любых символов подряд (6-12 столбцы);

G - далее должна быть буква «G» (13-ый столбец) - код подраздела.

Обработка данных (1,6 млн записей в БД) заняла 7 секунд - результатом был файл со списком ВПП аэродромов (8 874 строк = 8 874 торца ВПП).

 

 

Задача 8: Выбрать из навигационной базы данных все записи маршрутных ППМ (EA-records), начинающиеся и заканчивающиеся на букву "A"

Если необходимо узнать количество аэродромов в базе данных и получить из перечень.

Текст команды для 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;

Расшифровка регулярного выражения POSIX:

^S – первым символом в строке должна быть буква «S» (^ – обозначение начала строки);

.{3} – далее могут быть три любых символа подряд (второй, третий и четвертый столбцы);

EA – следующие символы (пятый и шестой) – буквы подряд - EA;

.{7} - далее могут быть семь любых символов подряд (7-13 столбцы);

A - далее должна быть буква «A» (14-ый столбец) - первая буква обозначения ППМ;

... - три точки = три любых символа;

A - далее должна быть буква «A» (18-ый столбец) - последняя (пятая) буква обозначения ППМ.

Обработка данных (1,6 млн записей в БД) заняла 6 секунд - результатом был файл со списком ППМ, которые начинаются и заканчиваются на букву A (546 строк = 546 ППМ).

Использование Power Shell для работы с навигационными базами данных в формате ARINC 424 Продолжение следует, новые варианты запросов к БД ARINC 424 с помощью Windows PowerShell будут добавлены позже.

Добавить комментарий

Вы можете авторизоваться с помощью социальных сетей:
     

Или заполнить форму:


Защитный код
Обновить

Яндекс.Метрика