Информационное обеспечение ЦФС Описание структуры файла формата DMF
- Подробности
-
Опубликовано 21.05.2011 17:56
Информационное обеспечение ЦФС Описание структуры файла формата DMF
(версия 1.10)
Общие положения
Файл формата DMF предназначен для хранения трехмерной картографической информации в векторном представлении (цифровой карты). Файл содержит всю информацию необходимую для визуализации/распечатки цифровой карты, как то классификатор (список слоев) содержащий правила отображения объектов, список числовых и текстовых параметров объектов карты, библиотеку условных знаков, параметры рамки и пр.
Физически файл разбит на сегменты переменной длины, каждый из которых хранит определенный вид информации о цифровой карте. Последовательность и содержимое каждого сегмента приведено в таблице:
Наименование
|
Длина, байт
|
Содержимое
|
Заголовок карты
|
946
(32+4+910)
|
Сигнатура DMF файла и общие параметры карты.
|
Слои
|
Перем
|
Классификатор цифровой карты с атрибутами визуализации
|
Параметры
|
Перем
|
Список параметров цифровой карты с атрибутами визуализации
|
Символы
|
Перем
|
Библиотека векторных условных знаков карты
|
Объекты
|
Перем
|
Координаты объектов и значения их параметров
|
При составлении данного описания приняты следующие соглашения:
· Текстовые данные указываются в одинарных кавычках ' ', Спецсимволы в тексте указываются как код, заключенный в угловые скобки <>;
· все вещественные числа в формате Real имеют длину 10 байт, если явно не указано иное;
· все целые числа в формате Integer имеют длину 4 байта, если явно не указано иное;
· строковые данные в формате ShortString[N] имеют физическую дину равную N+1 и содержат фактическую длину хранимой текстовой строки в нулевом (первом по порядку) байте;
· Тип Т3D содержит три координаты X, Y,Z как значения в формате Real;
· Тип Т3DFrame содержит четыре элемента T3D;
Заголовок карты
Заголовок содержит 32-байтную текстовую сигнатуру: 'GeoSystem DMF, Version 1.10 '<26>,
Затем 4-байтовое целое HeaderSize, определяющее длину последующего заголовка, и собственно тело заголовка, длина которого в текущей версии 910 байт. Всегда используйте поле HeaderSize для определения фактического размера заголовка. Заголовок содержит следующие бинарные поля:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
HeaderSize
|
4
|
Integer
|
Размер дальнейших данных заголовка (910)
|
Scale
|
10
|
Real
|
Знаменатель масштаба карты
|
Count
|
4
|
Integer
|
Количество топографических объектов на карте
|
Units
|
4
|
Integer
|
Зарезервировано
|
Status
|
4
|
Integer
|
Зарезервировано
|
Frame
|
120
|
T3Dframe
|
Координаты четырех углов рамки начиная с левого нижнего и далее в направлении часовой стрелки. Каждая точка рамки представлена в виде T3D (X, Y,Z как Real).
|
Name
|
256
|
ShortString
|
Наименование карты
|
LeftFile
|
256
|
ShortString
|
Имя растрового файла, содержащего левый снимок стереопары или снимок (карту) для моно режима.
|
RightFile
|
256
|
ShortString
|
Имя растрового файла, содержащего правый снимок стереопары.
|
Список слоев
Список слоев имеет переменную длину и начинается с 17-байтового заголовка, содержащего поля, приведенные ниже:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Size
|
4
|
Integer
|
Общее количество байт в списке слоев
|
Count
|
4
|
Integer
|
Количество элементов в списке слоев от 1 до Count
|
Status
|
4
|
Integer
|
Зарезервировано
|
MinService
|
4
|
Integer
|
Номер первого служебного элемента в списке слоев имеющий отрицательное значение (-10),
Служебные слои нумеруются от MinService до 0.
|
Reserve
|
1
|
Byte
|
Зарезервировано
|
Непосредственно за заголовком следуют элементы списка слоев в количестве
Count-MinService. Каждый элемент списка слоев представлен следующей структурой:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Size
|
4
|
Integer
|
Количество байт в структуре элемента (следующих за Size)
|
Status
|
4
|
Integer
|
Байт 4 (самый старший) Содержит тип объектов слоя: Полигон/полилиния-1, Полигон/полилиния(гладкая)-2, Пикет-3, Символ-4, Рамка и легенда-5, Таблица-6, ЦМР-7, Разметка листов-8, Группа слоев-0.
Байт 3 содержит состояние слоя: невидимый-3, видимый-2, помечаемый-1, редактируемый-0
Байт 1 (самый младший) содержит признак локализации объектов для слоев с типом Полигон/полилиния. Если младший бит этого байта равен 1, то данный слой содержит полигоны, иначе – полилинии.
|
ID
|
4
|
Integer
|
Код слоя
|
MinScale
|
4
|
Integer
|
Знаменатель самого крупного масштаба слоя
|
MaxScale
|
4
|
Integer
|
Знаменатель самого мелкого масштаба слоя
|
PenColor
|
4
|
Integer
|
Цвет линии объектов слоя в формате RGB
|
PenWidth
|
4
|
Integer
|
Ширина линии объектов слоя в десятых долях миллиметра в масштабе карты
|
BrushColor
|
4
|
Integer
|
Цвет заливки объектов слоя в формате RGB
|
FontColor
|
4
|
Integer
|
Цвет шрифта (зарезервировано)
|
FontSize
|
4
|
Integer
|
Размер шрифта (зарезервировано)
|
PenStyle
|
1
|
Byte
|
Тип линии объектов слоя в формате GDI
|
BrushStyle
|
1
|
Byte
|
Тип заливки объектов слоя в формате GDI
|
FontStyle
|
1
|
Byte
|
Зарезервировано
|
Name
|
Перем
|
ShortString
|
Наименование слоя: строка, фактическая длина которой содержится в первом байте
|
FontName
|
Перем
|
ShortString
|
Наименование шрифта: строка, фактическая длина которой содержится в первом байте (зарезервировано)
|
Reserve
|
4
|
Integer
|
Зарезервировано
|
ParamLength
|
4
|
Integer
|
Длина битового массива доступных слою параметров
|
Params
|
Перем
|
Bits
|
Битовый массив доступных слою параметров, содержит 1 в битах, которые соответствуют номерам параметров, доступных для объектов данного слоя.
Первые 11 бит соответствуют фиксированным параметрам (от –10 до 0).
|
Symbol
|
4
|
Integer
|
Номер символа данного слоя в библиотеке условных знаков
|
Format
|
Перем
|
ShortString
|
Зарезервировано
|
Список параметров
Список параметров имеет переменную длину и содержит 17-байтовый заголовок, содержащий бинарные поля, приведенные ниже:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Size
|
4
|
Integer
|
Общее количество байт в списке параметров
|
Count
|
4
|
Integer
|
Количество элементов в списке слоев от 1 до Count
|
Status
|
4
|
Integer
|
Зарезервировано
|
MinService
|
4
|
Integer
|
Номер первого служебного элемента в списке слоев имеющий отрицательное значение (-10),
Служебные параметры нумеруются от MinService до 0.
|
Reserve
|
1
|
Byte
|
Зарезервировано
|
Непосредственно за заголовком следуют элементы списка параметров в количестве
Count-MinService. Каждый элемент списка представлен следующей структурой:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Size
|
4
|
Integer
|
Количество байт в структуре элемента (cледующих за Size)
|
Status
|
4
|
Integer
|
Байт 4 (самый старший) Содержит тип параметра: Байт-1, Слово-2, Целое-3, Вещественное-4, Строка-5, Логическое-6, Файл (ссылка)-7, Список-8, Таблица-9. (Независимо от выбранного типа, значения всех параметров в файле хранятся в строковом виде. Тип параметра используется при сортировке, экспорте, и пр.)
Байт 3 содержит состояние параметра: невидимый-3, видимый-2, помечаемый-1, редактируемый-0
|
ID
|
4
|
Integer
|
Код параметра
|
MinScale
|
4
|
Integer
|
Знаменатель самого крупного масштаба параметра
|
MaxScale
|
4
|
Integer
|
Знаменатель самого мелкого масштаба параметра
|
PenColor
|
4
|
Integer
|
Зарезервировано
|
PenWidth
|
4
|
Integer
|
Зарезервировано
|
BrushColor
|
4
|
Integer
|
Цвет заливки параметра-подписи в формате RGB
|
FontColor
|
4
|
Integer
|
Цвет шрифта параметра-подписи в формате RGB
|
FontSize
|
4
|
Integer
|
Размер шрифта параметра-подписи в пунктах
|
PenStyle
|
1
|
Byte
|
Зарезервировано
|
BrushStyle
|
1
|
Byte
|
Тип заливки параметра-подписи в формате GDI
|
FontStyle
|
1
|
Byte
|
Стиль шрифта параметра-подписи в формате GDI
|
Name
|
Перем
|
ShortString
|
Наименование параметра: строка, фактическая длина которой содержится в первом байте
|
FontName
|
Перем
|
ShortString
|
Наименование шрифта параметра-подписи: строка, фактическая длина которой содержится в первом байте
|
Reserve
|
4
|
Integer
|
Зарезервировано
|
ParamLength
|
4
|
Integer
|
Длина битового массива доступных слою параметров
|
Params
|
Перем
|
Bits
|
Битовый массив (не используется)
|
Symbol
|
4
|
Integer
|
Номер символа параметра в библиотеке условных знаков
|
Format
|
Перем
|
ShortString
|
Маска отображения числового параметра в формате электронных таблиц.
Для параметров типа “Список” данное поле содержит список возможных значений параметра, разделенный символом “|”. Например: “Лиственный|Хвойный|Смешанный”.
|
Библиотека условных знаков
Список условных знаков имеет переменную длину и содержит 4-байтовый заголовок, содержащий бинарные поля приведенные ниже:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Count
|
4
|
Integer
|
Количество символов библиотеки от 1 до Count
|
Непосредственно за заголовком следуют элементы библиотеки в количестве Count.
Каджый элемент содержит заголовок и список графических примитивов. Структура заголовка приведена ниже:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Size
|
4
|
Integer
|
Количество байт в структуре элемента
|
HeaderSize
|
4
|
Integer
|
Размер заголовка символа (смещение до начала списка графических примитивов)
|
ID
|
4
|
Integer
|
Зарезервировано
|
Count
|
4
|
Integer
|
Число элементов в списке графических примитивов знака
|
Lengh
|
4
|
Integer
|
Длина знака в масштабе карты в микрометрах
|
Kind
|
4
|
Integer
|
Тип знака: одиночный=0, линейный-1, площадной-2, линейно-ориентированый-3, линейно-масштабируемый-4, двулинейный-5
|
Height
|
4
|
Integer
|
Высота знака в масштабе карты в микрометрах
|
Непосредственно за заголовком символа следуют графические примитивы в количестве Count. Каждый графический примитив представлен 32-байтовой структурой, приведенной в таблице:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Kind
|
1
|
Char
|
Тип примитива 'P' - Полилиния, 'C' - Окружность, 'R' - Прямоугольник, 'M' - Полукруг
|
Group
|
1
|
Byte
|
Номер группы примитива
|
PenStyle
|
1
|
Byte
|
Тип линии примитива в формате GDI
|
BrushStyle
|
1
|
Byte
|
Тип заливки примитива в формате GDI
|
PenColor
|
4
|
Integer
|
Цвет линии примитива в формате RGB
|
PenWidth
|
4
|
Integer
|
Толщина линии примитива в микронах
|
BrushColor
|
4
|
Integer
|
Цвет заливки примитива в формате RGB
|
X1
|
4
|
Integer
|
Координата X первой точки
|
Y1
|
4
|
Integer
|
Координата Y первой точки
|
X2
|
4
|
Integer
|
Координата X второй точки
|
Y2
|
4
|
Integer
|
Координата Y второй точки
|
Список объектов
Список объектов карты содержит записи переменной длины, описывающие все объекты на карте Количестве элементов в списке равно Count из заголовка карты.
Описание каждого объекта имеет переменную длину и содержит 46-байтовый заголовок, содержащий бинарные поля приведенные ниже:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Size
|
4
|
Integer
|
Количество байт в структуре элемента
|
Format
|
2
|
Word
|
Формат записи координат точек (зарезервировано = 0)
|
Count
|
4
|
Integer
|
Количество точек в объекте
|
LayerID
|
4
|
Integer
|
Код слоя объекта
|
Kind
|
4
|
Integer
|
Зарезервировано
|
Layer
|
4
|
Integer
|
Номер слоя объекта в списке слоев
|
ID
|
4
|
Integer
|
Уникальный номер объекта
|
TWhere
|
4
|
Integer
|
Зарезервировано
|
NS
|
4
|
Integer
|
Номер стереопары объекта
|
Group
|
4
|
Integer
|
Зарезервировано
|
Parent
|
4
|
Integer
|
Зарезервировано
|
SO
|
4
|
Integer
|
Угол разворота условного знака в миллионных долях градуса
|
Непосредственно за заголовком объекта следуют значения параметров объекта в виде, приведенном в таблице:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Size
|
4
|
Integer
|
Количество байт в строке описания параметров
|
Params
|
Перем
|
Char
|
Значения всех параметров объекта в текстовом виде:
<1>'Номер_параметра'<3>'Значение_параметра'<2>
|
Числа, взятые в угловые скобки, означают символы с соответствующими кодами. Так <1> означает символ с кодом 1, в отличии от '1' - символ с кодом 49.
Все описание одного параметра заключено между символами с кодами 1 и 2.
Между символами с кодами 1 и 3 идет номер параметра в текстовом виде, далее значение параметра. Если в значении параметра встречается символ с кодом 5, то следовательно данный параметр вынесен на карту в виде подписи.
Параметры подписи, начиная от <5> и до заключающей <2>, разделяются символом <5>. Возможны следующие параметры подписи:
'X-11.76' Смещение подписи от центра размаха объекта по X в м
'Y-4.59' Смещение подписи от центра размаха объекта по Y в м
'Z0' Смещение подписи от центра размаха объекта по Z в м
’L’ определяет выравнивание подписи.
После L следует числовое значение. Если перевести его в Word (2 байтовый), то значение младшего байта задает выравнивание по горизонтали 0-влево, 1-середина, 2-по правому краю. Аналогично значения старшего байта по вертикали: 0-по верху, 1(256)-по центру, 2(512)-по нижнему краю.
'O0' Угол разворота подписи
'S10' Размер шрифта в пунктах на местности (не на бумаге)
'P' Задает криволинейную подпись (Path), которая располагается вдоль контура.
Непосредственно за параметрами следует список точек объекта в количестве Count.
Структура описания точки приведена в таблице:
Наименование
|
Длина, байт
|
Тип
|
Содержимое
|
Status
|
4
|
Integer
|
Зарезервировано
|
X
|
10
|
Real
|
Координата X точки
|
Y
|
10
|
Real
|
Координата Y точки
|
Z
|
10
|
Real
|
Координата Z точки
|