osmgl 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/osmgl.cjs +2 -2
- package/dist/osmgl.cjs.map +1 -1
- package/dist/osmgl.global.js +7 -7
- package/dist/osmgl.js +2 -2
- package/dist/osmgl.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -183,6 +183,18 @@ nginx отдаёт его двумя путями — `/maps/osmgl.global.js` (
|
|
|
183
183
|
ГОЧА: на слабом профиле поверхность рисуется ЗАЛИВКОЙ (`flattened`), поэтому квадраты пишет и
|
|
184
184
|
`drawFill`. Без этого на телефоне линии лежали поверх асфальта, а на компьютере — нет.
|
|
185
185
|
|
|
186
|
+
### Линия под настилом (`depthTest`)
|
|
187
|
+
|
|
188
|
+
Поднятые линии рисуются без теста глубины: краска лежит на своём асфальте в сантиметрах, и такой
|
|
189
|
+
зазор буфер глубины не различает. Поэтому краска улицы под эстакадой проступала сквозь настил.
|
|
190
|
+
|
|
191
|
+
Слой с `"depthTest": true` проходит тест глубины (без записи), а его глубина сдвинута к камере на
|
|
192
|
+
долю расстояния (`DEPTH_NUDGE` = 0.4 %). Своё полотно в сантиметрах ниже её не закрывает, настил в
|
|
193
|
+
5–8 м над ней — закрывает. Сдвиг — одна постоянная в z клипа на кадр: `B·k/(1−k)`, где `B` — элемент
|
|
194
|
+
[14] перспективы (`Transform.projZOffset`); точка на экране не двигается. Действует только в
|
|
195
|
+
проходе поднятых линий, не на шаре и не в текстуре рельефа. Дальше ~2 км от камеры сдвиг больше
|
|
196
|
+
просвета, и краска под настилом снова видна.
|
|
197
|
+
|
|
186
198
|
### Разноцветная линия
|
|
187
199
|
|
|
188
200
|
Маршрут, раскрашенный по пробкам, — как у Яндекса:
|
|
@@ -411,6 +423,27 @@ new OsmGL.Map({ icons: { taxi: '<svg viewBox="0 0 24 24">…</svg>' } })
|
|
|
411
423
|
Настоящего шейпинга нет: перо двигается по `advance`. Кириллице, латинице и таджикскому
|
|
412
424
|
этого достаточно, арабский и иврит потребуют отдельного прохода.
|
|
413
425
|
|
|
426
|
+
### Иерархия подписей мест
|
|
427
|
+
|
|
428
|
+
Во всех пяти стилях места делятся по КЛАССУ, а не по рангу. Ранг в тайлах navigram — порядковый
|
|
429
|
+
номер внутри клетки сетки, о размере места он не говорит ничего: Худжанд с рангом 12 до z10.5 не
|
|
430
|
+
показывался вовсе. Приоритет слоя сильнее любого ранга фичи, поэтому порядок задаётся слоями:
|
|
431
|
+
|
|
432
|
+
| Слой | Что | С зума | `priority` |
|
|
433
|
+
|------|-----|--------|-----------:|
|
|
434
|
+
| `place-capital` | столица и центры областей: Душанбе, Худжанд, Бохтар, Хорог | 4 | 110 |
|
|
435
|
+
| `place-region` | области (свой источник `regions` в стиле) | 4.5 | 100 |
|
|
436
|
+
| `place-label` | остальные города и страна | 4 | 90 |
|
|
437
|
+
| `place-label-minor` | посёлки (`town`) | 7.5 | 70 |
|
|
438
|
+
| `place-label-local` | сёла, кварталы, острова | 10.5 | 55 |
|
|
439
|
+
|
|
440
|
+
Верхнего зума у областей нет. Центры стоят ВЫШЕ областей: крупное название области иначе
|
|
441
|
+
накрывает на мелком зуме свой же областной центр. Признака столицы (`capital`) в тайлах navigram
|
|
442
|
+
нет, поэтому центры выбираются по имени, в обоих написаниях (`Хуҷанд`/`Худжанд`, `Хоруғ`/`Хорог`).
|
|
443
|
+
Обычные города исключают их тем же списком (`!in`), иначе одна подпись встала бы дважды. Точек
|
|
444
|
+
областей в данных navigram нет совсем, поэтому они едут в стиле встроенным geojson-источником.
|
|
445
|
+
Проверяется `tests/places.test.mjs`.
|
|
446
|
+
|
|
414
447
|
## Планы этажей
|
|
415
448
|
|
|
416
449
|
Помещения ТЦ, вокзалов и рынков. Схема тайлов — [indoorequal](https://github.com/indoorequal/indoorequal)
|
|
@@ -692,6 +725,11 @@ CPU в экранных координатах — поэтому пережив
|
|
|
692
725
|
перенесённые сюда скриптом, чтобы карта на своём движке выглядела так же, как
|
|
693
726
|
везде в продукте:
|
|
694
727
|
|
|
728
|
+
Ледяная модель света у зданий (`ice: 1`: свет прибавляется, тёмных сторон нет, швов нет) стоит не
|
|
729
|
+
только у `ice`: её кодом получают светлая `3d`, тёмная `night` и пара «Атлас» (`atlas-day`,
|
|
730
|
+
`atlas-night`). У тёмного «Атласа» кровля — цветом стены: своей у палитры нет, и движок брал ей
|
|
731
|
+
светлую по умолчанию.
|
|
732
|
+
|
|
695
733
|
`ice` — отдельная тема со СВОЕЙ палитрой целиком, а не правка светлой. Цвета сняты
|
|
696
734
|
с растровых тайлов Baidu Maps (Луцзяцзуй, z17, 25 тайлов): земля `#f5f3f0`,
|
|
697
735
|
дороги белые с серой обводкой `#dbdbdd`, магистрали `#ffd86b`, вода `#90ddf6`,
|
|
@@ -1019,6 +1057,12 @@ map.getQuality() // { auto, profile, pixelRatio }
|
|
|
1019
1057
|
| `balanced` | ≤1.75 | ≤2560×2160 | да | ≤4 | 1024 | 0.85 |
|
|
1020
1058
|
| `low` | ≤1.25 | ≤1920×1350 | нет | ≤2 | 512 | 0.5 |
|
|
1021
1059
|
|
|
1060
|
+
На `low` и `minimal` геометрия упрощается (`simpleGeometry`): объёмные поверхности становятся
|
|
1061
|
+
плоскими заливками. Исключение — полотно дорог с настилом (`deck`): его объём даёт и высоту
|
|
1062
|
+
эстакады, и глубину, которой настил закрывает разметку под собой (`depthTest`). Пока оно
|
|
1063
|
+
упрощалось, режим «Эстакады с высотой» на слабом телефоне не делал ничего, а эмулятор Android
|
|
1064
|
+
(он определяется как `minimal`) показывал эстакады плоскими.
|
|
1065
|
+
|
|
1022
1066
|
Телефон отличается от десктопа не столько силой GPU, сколько **плотностью
|
|
1023
1067
|
экрана**: при `devicePixelRatio` 3 кадр 412×892 CSS — это 3,3 миллиона
|
|
1024
1068
|
пикселей, вдвое больше типичного окна на ноутбуке, и рисует их вчетверо более
|
|
@@ -1507,6 +1551,14 @@ node scripts/smoke.mjs # рендер в headless-браузере, 4 р
|
|
|
1507
1551
|
|
|
1508
1552
|
## Грабли, на которые уже наступили
|
|
1509
1553
|
|
|
1554
|
+
- **Перенос кадра подписей на Android и iOS (KMP) усыплял проявление.** Подпись встаёт в
|
|
1555
|
+
начале проявления, почти прозрачной. Следующие ~300 мс кадр подписей переносится на камеру
|
|
1556
|
+
(`reproject`) вместе с прозрачностью на момент раскладки и продолжения не просит. На
|
|
1557
|
+
неподвижной карте цикл кадров засыпал, и подписи оставались невидимыми до первого касания.
|
|
1558
|
+
Чаще всего это видно на мелком зуме: шрифт приезжает позже тайлов. Теперь проход подписей
|
|
1559
|
+
просит кадр, пока кадр `fading`, и на переносе тоже (`labelsFading` в `layers/Renderer.kt`).
|
|
1560
|
+
В вебе переноса нет, поэтому там этого не было. Проверяется
|
|
1561
|
+
`SymbolFrameTest.lateGlyphsArePlacedWithoutCameraMove`.
|
|
1510
1562
|
- **`ELEMENT_ARRAY_BUFFER` — состояние VAO, а не глобальное.** Создание индексного буфера
|
|
1511
1563
|
соседнего тайла, пока привязан VAO предыдущего, молча переписывало тому привязку: тайл
|
|
1512
1564
|
начинал рисовать чужими индексами по своим вершинам. Ошибок GL нет, кадр не падает — тайл
|