Формат «цифрового» обозначения территорий – протокол мобильного обмена для ГИС (.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. Размер каждого слоя указан в оглавлении)
|
|