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