Формат «цифрового» обозначения территорий – протокол мобильного обмена для ГИС (.PSP)
Заголовок:
2 байта – «T2» (для 2D) или «T3» (для 3D)
1 байт [T] – точность (0/1/2 – число знаков после запятой)
1 байт [B] – размер блоков координат (для Т2: «6» – по 6 байтов; «4» – по 4 байта) (для Т3: «6» – по 8 байтов; «4» – по 6 байта (добавляются 2 байта координаты Z))
6 байт – смещение по X и Y (формат смещения см. ниже) (точность смещения всегда = 0 знаков после запятой. Смещение Z всегда 0)
Описание территории:
Состоит из блоков координат объектов. Каждый блок завершается байтом #156.
Блок делится на группы:
- для T2 по 6 байт – это 2 координаты.
(6 байт = 3 байта – X; 3 байта – Y)
- для T2 по 4 байт – это 2 координаты.
(4 байт = 2 байта – X; 2 байта – Y)
- для T3 по 8 байт – это 3 координаты.
(8 байт = 3 байта –X; 3 байта – Y; 2 байта – Z).
- для T3 по 6 байт – это 3 координаты.
(6 байт = 2 байта –X; 2 байта – Y; 2 байта – Z).
Если блок состоит из одной группы, то это точка.
Если групп в блоке более одной, то это полилиния.
Если размер блока меньше 4-х байт, то это префикс.
Если блок завершается терминатором #156 #156, то это полигон.
В группе используются байты с кодами от #33 до #155.
Преобразование из Х
j:= int( X * (10 ^ [T]))
X1:= int( j / 15129 ) + 33
j:= ( j mod 15129)
X2:= int( j / 123 ) + 33
X3:= ( j mod 123) + 33
Преобразование из Y и Z
аналогично X
Преобразование ХХХ и YYY координаты:
((X1-33)*15129+(X2-33)*123+(X3-33)) / (10^[T])
((Y1-33)*15129+(Y2-33)*123+(Y3-33)) / (10^[T])
Преобразование Z координаты:
((Z-33)*123+(Z-33)) / (10^[T])
Структура Префиксов для внедрения объектов
nK #156 nP #156
Где: nK – от 1 до 3-х байт – код типа объекта;
nP – от 0 до N байт – необходимые параметры
Преобразование В штрих-код
4 байта Заголовка не изменяется.
Остальная часть побайтно перекодируется:
Байты с кодами от #33 до #125 переносятся без изменений.
Байты с кодами от #126 до #137 переносятся как К-125
Байты с кодами от #138 до #156 переносятся как К-124
Преобразование ИЗ штрих-кода
4 байта Заголовка не изменяется.
Остальная часть побайтно перекодируется:
Байты с кодами от #33 до #125 переносятся без изменений.
Байты с кодами от #1 до #12 переносятся как К+125
Байты с кодами от #14 до #32 переносятся как К+124
Предпочтительные параметры кодирования
|
Менее 150 метров |
До 1500 метров |
До 15000 метров |
Более 15000 метров |
Менее 150 точек |
Т224 |
Т214 / T226 |
Т216 / Т204 |
Т216 |
Более 150 точек |
Т224 |
Т214 |
Т204 |
---- |
Объекты (2D), включаемые посредством Префиксов
(размеры в скобках даны для блоков по 4 байта, а без скобок – для блоков по 6 байт)
Объект |
Префикс |
Параметры |
Размер (байт) |
Код |
№ |
Размер (байт) |
Описание |
Окружность |
1 |
#33 |
1, 2 |
6 (4) |
X, Y – координаты центра (учитывается смещение) |
3 |
3 |
Диаметр (с точностью, определенной в заголовке) |
Дуга в полилинии |
1 |
#34 |
1, 2 |
6 (4) |
X, Y – координаты начала (учитывается смещение) |
3 |
3 |
Показатель выпуклости (от -1 до +1) (умножено на 100000 и добавлено 100000) |
4, 5 |
6 (4) |
X, Y – координаты конца (учитывается смещение) |
Арка |
1 |
#35 |
1, 2 |
6 (4) |
X, Y – координаты центра (учитывается смещение) |
3 |
3 |
Диаметр (с точностью, определенной в заголовке) |
4, 5 |
6 |
Угол начала и угол конца арки (умножено на 100000) |
Текст |
1 |
#36 |
1, 2 |
6 (4) |
X, Y – координаты точки привязки для текста (учитывается смещение) |
3 |
2 |
Высота шрифта умноженная на 10 |
4 |
3 |
Угол поворота текста (умножено на 100000 и добавлено 100000) |
5 |
N |
Текст Текст. Используются следующие правила перекодировки: Chr(127) – переключение на латиницу. Chr(94) – переключение на кириллицу. На латинице символы не перекодируются. На кириллице ко всем символам до chr(94) добавляется 159, символ chr(95) меняется на пробел, в других случаях добавляется 157 |
Начало малого блока |
1 |
#37 |
1, 2 |
6 |
X, Y – Смещение начала блока. Внутри блока используем смещения по 2 байта, и точность 2 знака. |
3 |
N |
Название блока (этот параметр последний, и потому его размер ограничивается терминатором) |
Начало большого блока |
1 |
#44 |
1, 2 |
6 |
X, Y – Смещение начала блока. Внутри блока используем смещения по 3 байта, и точность 2 знака. |
3 |
N |
Название блока (этот параметр последний, и потому его размер ограничивается терминатором) |
Конец блока |
1 |
#38 |
|
|
Операндов нет |
Название блока (использ. автоматич) |
1 |
#39 |
|
N |
Название блока (этот параметр единственный, и потому его размер ограничивается терминатором)
ЭТОТ префикс генерируется из #37. К 3-му операнду добавляется #39 (при интерпретации) |
Эллипс |
1 |
#40 |
1, 2 |
6 (4) |
X, Y – координаты центра эллипса |
3, 4 |
6 |
Размеры большой и малой осей (с точностью в заголовке) |
5 |
3 |
Угол наклона большой оси (умножено на 100000) |
6, 7 |
6 |
Угол начала и угол конца эллипса (умножено на 100000) |
Цвет линий |
1 |
#41 |
1 |
4 |
RGB – цвет. Устанавливается текущий цвет. Действует до следующей установки, или до конца блока. |
Начало составной области (участка области) |
1 |
#42 |
1 |
2 |
Номер участка. Область состоит из отдельных участков. Участок состоит из перечисления элементов. Завершается описание области тегом #43#156#156. Описание участка завершается началом описания следующего участка, или общим терминатором области. |
Конец области |
1 |
#43 |
|
|
Операндов нет |
Формат файлов .psp
Размер поля |
Содержимое поля |
Заголовок PSP |
6 |
Размер Оглавления |
До 100 |
Общее наименование |
2 |
#13 #10 |
Оглавление (перечень описаний слоёв)
(описание каждого слоя 200 байт) |
50 |
Идентификатор слоя |
100 |
Наименование слоя |
1 |
Точность (0 / 1/ 2) |
5 |
Размер тела слоя |
2 |
Номера частей |
1 |
Флаг наличия частей |
1 |
Флаг использования цвета |
38 |
Резерв |
2 |
#13 #10 |
Слои
(содержимое слоёв следует друг за другом в соответствии с оглавлением. Каждый слой завершается комбинацией #13#10. Размер каждого слоя указан в оглавлении) |
|