Feature format specification.

This commit is contained in:
vng 2011-01-12 23:33:56 +02:00 committed by Alex Zolotarev
parent 86f85373c5
commit 05450b06ed

View file

@ -0,0 +1,43 @@
1-й байт:
0. кол-во типов (1-8, пишем 0-7, 3 бита)
3. имя
4. слой
5. точка
6. линия
7. площадной
2-й и 3-й байт (только для линейного и\или площадного объекта):
* 4 бита кол-ва внутренних точек для линейного объекта:
- 0 - геометрия вынесена, идем читать маску смещений и смещения;
- 2 - 0 байт на маску упрощения;
- 3-6 - 1 байт на маску упрощения;
- 7-10 - 2 бму;
- 11-14 - 3 бму;
* 4 бита кол-ва внутренних треугольников для площадного объекта:
- 0 - геометрия вынесена, идем читать маску смещений и смещения;
- >0 - кол-во треугольников одного стрипа (для нескольких стрипов геометрия выносится);
* по 4 бита для маски смещений для линейного и площадного объекта.
Маска смещений опряделяет наличие вынесенной геометрии для i-го масштабного ряда (из 4-х по соотв. биту).
2-й и 3-й байт актуально могут быть расположены в одном байте, когда объект одного типа или геометрия не вынесена.
Реально это будет 2 байта когда объект сразу линейный и площадной и у него вынесена геометрия.
Следующие байты:
* пишем имя, слой, точка
* пишем геометрию ...
- маска упрощения для линейного объекта (1-3 байта):
Маска упрощения в 1 байт кодирует видимость 4-х точек в 4-х масштабных рядах (по 2 бита), т.е.
равна значению масштабного ряда, с которого точка уже видна.
- массив точек геометрии (треугольников стрипа) по извесному количеству VarInt64
* ... или пишем массив смещений на вынесенную геометрию (количество берем из маски смещений)
Вынесенная геометрия для масштаба представляет собой блок:
- размер геометрии в байтах
- сериализованные VarInt64 по кол-ву байт
Для линейного объекта они представляют собой массив точек.
Для площадного представляют собой следующие последовательности:
- количество точек с стрипе
- сам стрип (массив точек)