Welcome to mirror list, hosted at ThFree Co, Russian Federation.

feature_structure.txt « docs - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: e882d27e8970507645dcf43bd0e40e7dce47b597 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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 по кол-ву байт

Для линейного объекта они представляют собой массив точек.
Для площадного представляют собой следующие последовательности:
- количество точек с стрипе
- сам стрип (массив точек)