Перейти к содержанию
SimRussia.com
icebear

Формат навигационной базы данных

Рекомендуемые сообщения

База состоит из нескольких tables и views. Во view хранятся слепки таблицы нав. элементов по типам, т.е. есть аэропорты (airport), всенаправленые маяки (vor), полосы (runway), радиомаяки (ndb) и точки (fix).

Все нав. элементы базы, независимо от типа, хранятся в одной таблице. Так же в таблицах хранятся процедуры, заходы и общая информация по версии навбазы (цикл).

Процедуры и заходы имеют плоскую структуру, т.е. нет 1:n связи между процедурой/заходом и составляющими точками. Все ссылки на точки хранятся в самих процедурах/заходах. Если например заход состоит из трёх точек, то в базе содержатся ровно три записи в соответсвующей таблице, каждая из которых содержит данные процедуры для каждой из трёх точек.

Навигационная база построена согласно определённому формату плана полёта. План полёта всегда содержит аэропорт вылета (ИПМ), аэропорт прибытия (КПМ) и набор ППМ, который сами по себе имеют разные типы. Для ИПМ и КПМ можно выбрать полосу, это в свою очередь позволит для полосы ИПМ выбрать процедуру SID, а для КПМ процедуру STAR. Для полосы КПМ можно так же выбрать заход (APPROACH). Т.е. порядок выполнения плана в максимальном формате будет
ИПМ+полоса-SID-маршрут-STAR-APPROACH-КПМ+полоса. Все составляющие точки этих блоков включаются в план полёта, причём отдельно можно работать только с точками маршрута (ППМ), точки процедур и заходов удалятся или как-то менятся отдельно от самих процедур и заходов не могут. Если удаляется процедура или заход то удаляются все входящие в них точки. Заходы не могут быть использованы без процедур прибытия. Для процедур прибытия и для заходов можно выбрать переходы (transitions), при этом действует правило что на каждый тип захода или тип процедуры можно выбрать только один переход. Переходы для захода и процедуры прибытия не связаны друг с другом, можно вводить оба, можно только один, а можно обойтись вообще без них (в таком случае например последняя точка процедуры прибытия будет связана с первой точкой захода). Переходы всегда обозначены одним ППМ в плане и имеют тип TF, логика обработки плана завязана на этом.



Распределение по таблицам следующее:

Таблица approach - хранит заходы, формат полей следующий
name - ID/имя захода
runway -ID полосы, для которой построен этот заход
airport - код аэропорта, к которому привязана полоса, для которой построен заход
icaocode - ID составной точки захода
number - порядковый номер составной точки захода
altM - высота в метрах, на которой нужно пройти составную точку захода
altF - высота в футах, на которой нужно пройти составную точку захода
speedM - метрическа скорость, которую надо выдерживать при проходе составной точки захода
speedF - имперская скорость, которую надо выдерживать при проходе составной точки захода (в тамагочи не важна, т.к. АП оперирует только с метрической скоростью, однако сим сам по себе работает точнее с имперскими)
type - тип точки, соотвествует typedef PROC_FIX_TYPE из Situation.h
turn - тип разворота, соотвествует typedef PROC_FIX_TURN_TYPE из Situation.h
target - целевое значение точки, зависит от типа точки и типа разворота, для разворотов например содержит целевой азимут точки
star - ID процедуры прибытия

Таблица items - содержит все элементы базы, при этом запись и использование полей таблицы зависит от типа элемента (т.е. не для всех типов навигационных элементов используются все поля таблицы). Формат полей следующий:
icaocode - ID элемента, построеное из 12-разрядного кода ИКАО (пустые разряда опущены)
airport - ID связаного аэропорта (является в свою очередь ID аэропорта)
beacon - ID связаного маяка (для полос например маяк ИЛС, является ID маяка)
type - типа элемента в соответсвии с typedef NAV_TYPE из Situation.h
class - класс элемента соответсвии с typedef NAV_CLASS из Situation.h
poslat - позиция по долготе в десятичных градусах
poslon - позиция по широте в десятичныз градусах
code - код элемента (например VOR код ENS), зависит от типа элемента
name - имя элемента (например VOR имя YENISEISK), зависит от типа элемента
magvar - магнитное склонение
course - истиный курс
altM - высота элемента над уровнем моря в метрической системе
altF - высота элемента над уровнем моря в имперской системе
rangeM - радиус действия маяка в метрической системе
rangeF - радиус действия маяка в имперской системе
rangedmeM - радиус действия дальномера в метрической системе
rangedmeF - радиус действия дальномера в имперской системе
rangeilsM - радиус действия ИЛС в метрической системе
rangeilsF - радиус действия ИЛС в имперской системе
frequency - частота элемента, хранится в виде freq*1000 для совместимости с функциями СДК
lengthM - длина полосы в метрах
lengthF - длина полосы в футах
widthM - ширина полосы в метрах
widthF - ширина полосы в футах
number - номер полосы
designator - указатель полосы согласно typedef RWY_TYPE из Situation.h
locPoslat - позиция курсового маяка по долготе в десятичных градусах
locPoslon - позиция курсового маяка по широте в десятичных градусах

Таблица navigation - хранит данные по цилку базы (метаданные), на основе этих данных логика ВСС выбирает активную базу. Используется следующий формат полей:
startcycle - таймстэмп начала цикла (содержит полную дату и время)
endcycle - таймстэмп конца цикла (содержит полную дату и время)
cyclename - имя цикла (чисто информативно, видимо на пульте ВСС)
cycleversion - версия цикла (чисто информативно, видимо на пульте ВСС)

Таблицы sid и star имеют одинаковый формат, ибо код ВСС не различает тип процедур, но с другой стороны удобнее работать с двумя таблицами. Запись составляющих точек сделана по аналогии с заходами. Используется следующий формат полей:
name - имя (ID) процедуры
runway - полоса, для которой действует процедура (в виде ID нав. элемента полосы)
airport - аэропорт, для которого сделана процедура (в виде ID аэропорта)
icaocode - ID составной точки процедуры
number - порядковый номер составной точки процедуры
altM - высота в метрах, на которой нужно пройти составную точку захода
altF - высота в футах, на которой нужно пройти составную точку захода
speedM - метрическа скорость, которую надо выдерживать при проходе составной точки захода
speedF - имперская скорость, которую надо выдерживать при проходе составной точки захода (в тамагочи не важна, т.к. АП оперирует только с метрической скоростью, однако сим сам по себе работает точнее с имперскими)
type - тип точки, соотвествует typedef PROC_FIX_TYPE из Situation.h
turn - тип разворота, соотвествует typedef PROC_FIX_TURN_TYPE из Situation.h
target - целевое значение точки, зависит от типа точки и типа разворота, для разворотов например содержит целевой азимут точки
 
Декларации типов из Situation.h (Situation.h - заголовок, использующийся в коде ПНК):
 
typedef enum BEACON_TYPE{
  BCN_UNKNOWN = 0,
  BCN_VOR = 1,
  BCN_VOR_DME = 2,
  BCN_DME = 3,
  BCN_TACAN = 4,
  BCN_VORTAC = 5,
  BCN_ILS = 6,
  BCN_VOT = 7
};

typedef enum NAV_TYPE{
  NT_UNKNOWN = 0,
  NT_FIX = 1,
  NT_NDB = 2,
  NT_VOR = 3,
  NT_VOR_DME = 4,
  NT_DME = 5,
  NT_ILS = 6,
  NT_ILS_DME = 7,
  NT_HOLDING = 8,
  NT_AIRPORT = 9,
  NT_RUNWAY = 10
};

typedef enum NAV_CLASS{
  NC_UNKNOWN = 0,
  NC_NDB_COMPASS = 1,
  NC_NDB_MH = 2,
  NC_NDB_H = 3,
  NC_NDB_HH = 4,
  NC_VOR_T = 5,
  NC_VOR_L = 6,
  NC_VOR_H = 7,
  NC_ILS = 8,
  NC_VOT = 9
};

typedef enum RWY_TYPE{
  RWYT_NONE = 0,
  RWYT_LEFT = 1,
  RWYT_RIGHT = 2,
  RWYT_CENTER = 3
};

typedef enum PROC_FIX_TYPE{
  PFT_IF = 0,
  PFT_TF = 1,
  PFT_RF = 2,
  PFT_CF = 3,
  PFT_DF = 4,
  PFT_FA = 5,
  PFT_FC = 6,
  PFT_FD = 7,
  PFT_FM = 8,
  PFT_CA = 9,
  PFT_CD = 10,
  PFT_CI = 11,
  PFT_CR = 12,
  PFT_AF = 13,
  PFT_VA = 14,
  PFT_VD = 15,
  PFT_VI = 16,
  PFT_VM = 17,
  PFT_VR = 18,
  PFT_PI = 19,
  PFT_HA = 20,
  PFT_HF = 21,
  PFT_HM = 22
};

typedef enum PROC_FIX_TURN_TYPE{
  PFTT_NONE = 0,
  PFTT_LEFT = 1,
  PFTT_RIGHT = 2
};

typedef enum PROC_TYPE{
  PC_SID = 0,
  PC_STAR = 1,
  PC_APPROACH = 2,
  PC_NOPROC = 3
};
 
Изменено пользователем icebear
  • Поддержу 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×