В FlightAware ПО должно изящно обрабатывать все виды странных и удивительных ситуаций, которые возникают в мире авиации. Пока мы, программисты, надеемся, что все данные, связанные с этим миром, хорошо структурированы и чисты, в нем властвует хаос.
Во время проектирования типов данных и схем для мира авиации можно сделать много предположений, которые на самом деле оказываются неверными. Точно так же, как когда‑то Патрик Маккензи написал «Заблуждения программистов об именах», ниже я перечислил некоторые заблуждения об авиации, в которые каждый может легко впасть. Хотя многие из них возникают вследствие неправильного понимания этой области, некоторые всё же смогли «покусать» наших клиентов, а другие создавали нам проблемы на протяжении многих лет.
Все перечисленные ниже заблуждения отлично иллюстрируют ситуации, которые Hyperfeed (наша система отслеживания перелетов) должна уметь обрабатывать, чтобы наш сайт, приложения и API получали единообразную и структурированную информацию.
Авиаперелеты
-
Самолеты вылетают из гейта [выхода на посадку. Здесь и далее — прим. переводчика]
-
Самолеты, которые вылетают из гейта, покидают его ровно один раз. [Cм. на taxi time].
-
Рейсы отправляются в течение нескольких часов после планируемого времени вылета.
-
Рейсы отправляются в течение дня после назначенного времени в расписании.
-
У рейсов есть расписание.
-
Перелеты начинаются и завершаются в аэропортах.
-
Воздушные судна (за исключением вертолетов) вылетают и приземляются в аэропортах.
-
Перелет длится максимум 12 часов или около того.
-
Окей, длится максимум несколько дней?
-
Перелеты идентифицируются номером, состоящим из кода авиакомпании и набора цифр, например, UAL1234.
-
Перелеты могут быть идентифицированы либо номером рейса, либо номером регистрации судна, например, N1234, B6459 или FHUVL.
-
Идентификатор рейса (например, B6459) — это однозначно лишь одно из: либо номер регистрации воздушного судна (B-6459), либо номер рейса (B6 459), либо что‑то еще.
-
У одного рейса не может быть несколько номеров.
-
У рейсов с несколькими номерами должен быть какой‑то «главный» номер.
-
Номер конкретного рейса никогда не меняется.
-
Номер на посадочном талоне — это то же самое, что используют пилоты и командно‑диспетчерский пункт для идентификации рейса.
-
Номера рейсов одной авиакомпании не могут содержать код, принадлежащий какой‑то другой, не относящейся к ней авиакомпании.
-
В один и тот же день не может быть рейсов с одним и тем же номером.
-
Так, ну уж точно не должно совершаться одновременно двух рейсов с одним номером?
-
Ладно, хорошо... Два отдельных рейса от одной и той же крупной авиакомпании, которые отправляются в пределах нескольких минут, не могут иметь один и тот же номер? Верно?..
Аэропорты
-
Местоположение аэропортов никогда не меняется. [Аэропорт Ататюрк (Стамбул) раньше имел IST в качестве кода IATA. После открытия аэропорта Стамбул (Стамбул), старый аэропорт получил код ISL, а новый IST.]
-
Названия терминалов и гейтов должны следовать какой‑то единообразной схеме.
-
Взлетно‑посадочная полоса используется только одним аэропортом.
-
У аэропортов должно быть два идентификатора: четырехбуквенный от ICAO и трёхбуквенный от IATA. [ICAO — Международная организация гражданской авиации, учреждение ООН, устанавливает нормы авиации в мире; IATA — Международная ассоциация воздушного транспорта, создана для сотрудничества авиакомпаний. Чаще всего вы видите именно коды IATA, например, DME для аэропорта Домодедово.]
-
Аэропорты всегда имеют ICAO, IATA и какой‑то внутренний код. [В России есть отдельный внутренний код, например, у Домодедово — ДМД.]
-
В США Министерство Транспорта всегда присваивает один каноничный код к каждому аэропорту, над которым у него есть юрисдикция.
-
Ни у одного аэропорта не может быть несколько кодов IATA.
-
В США коды ICAO всех аэропортов начинаются с буквы K.
-
Для тех аэропортов США, у которых ICAO коды начинаются с буквы K, оставшиеся три символа совпадают с его кодом IATA.
-
По коду ICAO можно определить географический регион аэропорта.
-
Все, что имеет код IATA — аэропорт. [IATA индексирует не только аэропорты или аэродромы, но железнодорожные станции и другие не относящиеся к авиации объекты.]
-
Все, что имеет код ICAO находится на Земле. [У кратера Езеро на Марсе есть собственный код ICAO — JZRO].
-
У аэропортов есть хоть какой‑то хорошо известный идентификатор.
Авиакомпании
-
Каждая авиакомпания обладает уникальным кодом IATA.
-
Каждая авиакомпания обладает только одним кодом IATA или ICAO.
-
По внешнему виду воздушного судна можно точно определить, какая авиакомпания производит рейс.
-
Авиакомпании присваивают номера определенным маршрутам.
-
Авиакомпании присваивают номера только своим рейсам.
-
Авиакомпании присваивают номера только рейсам. [Очень интересный случай: аэропорты MLH и BSL являются фактически одним аэропортом, но находятся на территории двух разных стран. Так как на этих территориях разное ценообразование и правовые нормы, то в зависимости от того, в какой из этих «аэропортов» прилетит самолет, может меняться цена на рейс. Но при этом юридический перенос из одного аэропорта в другой нужно было объяснять интересным способом — перелетом в одну минуту.]
Навигация
-
Путевые (навигационные) точки имеют уникальные названия. [Путевые точки определяют точку в пространстве, с их помощью строятся воздушные маршруты.]
-
Понятие «высота» — единственное и общеизвестное. [Существует 6 видов высоты (если верить статье) в авиации: высота по прибору, абсолютная высота, истинная высота, высота, барометрическая высота и высота по плотности.]
-
Поставщики аэронавигационного обсуживания (ПАНО; Air Navigation Service Provider) предоставляют корректную информацию о перелете. [ПАНО предоставляют услуги по контролю воздушного трафика, погоды, навигации и т. д.]
-
Хорошо, их информация достаточно корректная, они хотя бы не сообщат, что самолет вылетел, если он на самом деле не покидал аэропорт.
-
Если полетный план отменен, то рейс точно не состоится.
-
Хотя бы информация с их радаров точно определяет каждое судно.
-
Положение судна, которое попало в зону видимости двух радаров, определяется ими согласованно и одинаково.
-
Если нам приходит информация, что самолет вылетел в определенный аэропорт назначения, значит изначально существовало намерение туда прилететь.
-
Если самолет изменил аэродром назначения, значит он больше не изменится.
Транспондеры и ADS-B
-
ADS‑B сообщения приходят только от воздушного судна. [ADS‑B — система, передающая информацию о самолете в реальном времени — положение, скорость и др. Сообщения от этой системы общедоступны.]
-
ADS‑B сообщения приходят только от воздушного судна и наземного транспорта аэропорта.
-
ADS‑B сообщения приходят от транспорта какого‑то определенного типа.
-
GPS‑координаты в этих сообщениях точные.
-
GPS‑координаты в этих сообщениях точны с какой‑то заявленной погрешностью.
-
Идентификатор рейса в этих сообщениях — корректный.
-
Транспондеры всегда настроены передавать корректную информацию о типе воздушного судна (самолет, вертолет, беспилотник и т. д.)
-
В сообщениях ADS‑B всегда можно определить регистрационный номер судна.
-
Транспондеры запрограммированы передавать корректный Mode S адрес [ ‑уникальный код, присвоенный судну].
-
Все транспондеры на одном судне передают один и тот же Mode S адрес.
-
Никто не установит идентификатор полета на что‑то странное, например, NULL.
-
Транспондер не будут забывать перепрограммировать, когда регистрация судна меняется.
-
ADS‑B сообщения всегда приходят в том же виде, в котором они были отправлены.
-
Никто никогда не отправит неверное ADS‑B сообщение.
-
Транспондеры никогда не ломаются, и крысы никогда не грызут кабели.
Спасибо всем моим коллегам, кто помог составить этот список заблуждений: Mark Duell, Paul Durandt, Karina Elizondo, Matt Higgins, Thomas Kyanko, Nathan Reed и Amy Szczepanski.

Ben Burwell
Ben is a Senior Software Engineer on the Flight Tracking team.
Примечание от переводчика: я постарался найти переводы соответствующих статей и тредов, если же их не было, я оставлял оригинальную ссылку и небольшое пояснение.
Автор: artembakhanov