11 | 12 | 2017

Информационное обеспечение ЦФС Описание структуры файла формата DMF

Информационное обеспечение ЦФС Описание структуры файла формата 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 точки