osmgl 0.15.0 → 0.17.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 +74 -0
- package/dist/osmgl.cjs +2 -2
- package/dist/osmgl.cjs.map +1 -1
- package/dist/osmgl.d.cts +5 -0
- package/dist/osmgl.d.ts +5 -0
- 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,49 @@ new OsmGL.Map({ icons: { taxi: '<svg viewBox="0 0 24 24">…</svg>' } })
|
|
|
411
423
|
Настоящего шейпинга нет: перо двигается по `advance`. Кириллице, латинице и таджикскому
|
|
412
424
|
этого достаточно, арабский и иврит потребуют отдельного прохода.
|
|
413
425
|
|
|
426
|
+
### Пороги подробности по зуму
|
|
427
|
+
|
|
428
|
+
Чтобы телефон не захлёбывался на общем плане города, подробность включается ступенями
|
|
429
|
+
(30.09.2026, одинаково в вебе, на Android и в iOS):
|
|
430
|
+
|
|
431
|
+
| Зум | Дома | Дороги | Детальные 3D-объекты |
|
|
432
|
+
|-----|------|--------|----------------------|
|
|
433
|
+
| до 15 | нет | линии | нет |
|
|
434
|
+
| 15–16 | плоские (`building-flat`, цвет крыши) | линии | нет |
|
|
435
|
+
| с 16 | объём, растёт до полной высоты к 16.8 | асфальт (полотно), разметка с 16.5 | нет |
|
|
436
|
+
| с 17 | объём | асфальт | есть |
|
|
437
|
+
|
|
438
|
+
На z15 кадр захватывает вчетверо больше города, чем на z16, а стены с окнами, тени и асфальт
|
|
439
|
+
на этом зуме не разглядеть. Плоский дом берёт цвет крыши объёмного слоя ссылкой
|
|
440
|
+
`{ from: 'building', property: 'roofColor' }` (поле `property` у `ColorFrom`), поэтому его красят
|
|
441
|
+
те же темы и на пороге z16 нет шва. Тайлы полотна на z15 больше не запрашиваются
|
|
442
|
+
(`minzoom` источника 16). Ниже порога моделей маска замены снимается, и на месте модели стоит
|
|
443
|
+
обычный дом.
|
|
444
|
+
|
|
445
|
+
Тесселяцию зданий это не экономит: тайл z14 — потолок источника, и воркер собирает в нём здания
|
|
446
|
+
на всех зумах выше. Экономится отрисовка: стены, окна, скругления и проход теней.
|
|
447
|
+
|
|
448
|
+
### Иерархия подписей мест
|
|
449
|
+
|
|
450
|
+
Во всех пяти стилях места делятся по КЛАССУ, а не по рангу. Ранг в тайлах navigram — порядковый
|
|
451
|
+
номер внутри клетки сетки, о размере места он не говорит ничего: Худжанд с рангом 12 до z10.5 не
|
|
452
|
+
показывался вовсе. Приоритет слоя сильнее любого ранга фичи, поэтому порядок задаётся слоями:
|
|
453
|
+
|
|
454
|
+
| Слой | Что | С зума | `priority` |
|
|
455
|
+
|------|-----|--------|-----------:|
|
|
456
|
+
| `place-capital` | столица и центры областей: Душанбе, Худжанд, Бохтар, Хорог | 4 | 110 |
|
|
457
|
+
| `place-region` | области (свой источник `regions` в стиле) | 4.5 | 100 |
|
|
458
|
+
| `place-label` | остальные города и страна | 4 | 90 |
|
|
459
|
+
| `place-label-minor` | посёлки (`town`) | 7.5 | 70 |
|
|
460
|
+
| `place-label-local` | сёла, кварталы, острова | 10.5 | 55 |
|
|
461
|
+
|
|
462
|
+
Верхнего зума у областей нет. Центры стоят ВЫШЕ областей: крупное название области иначе
|
|
463
|
+
накрывает на мелком зуме свой же областной центр. Признака столицы (`capital`) в тайлах navigram
|
|
464
|
+
нет, поэтому центры выбираются по имени, в обоих написаниях (`Хуҷанд`/`Худжанд`, `Хоруғ`/`Хорог`).
|
|
465
|
+
Обычные города исключают их тем же списком (`!in`), иначе одна подпись встала бы дважды. Точек
|
|
466
|
+
областей в данных navigram нет совсем, поэтому они едут в стиле встроенным geojson-источником.
|
|
467
|
+
Проверяется `tests/places.test.mjs`.
|
|
468
|
+
|
|
414
469
|
## Планы этажей
|
|
415
470
|
|
|
416
471
|
Помещения ТЦ, вокзалов и рынков. Схема тайлов — [indoorequal](https://github.com/indoorequal/indoorequal)
|
|
@@ -692,6 +747,11 @@ CPU в экранных координатах — поэтому пережив
|
|
|
692
747
|
перенесённые сюда скриптом, чтобы карта на своём движке выглядела так же, как
|
|
693
748
|
везде в продукте:
|
|
694
749
|
|
|
750
|
+
Ледяная модель света у зданий (`ice: 1`: свет прибавляется, тёмных сторон нет, швов нет) стоит не
|
|
751
|
+
только у `ice`: её кодом получают светлая `3d`, тёмная `night` и пара «Атлас» (`atlas-day`,
|
|
752
|
+
`atlas-night`). У тёмного «Атласа» кровля — цветом стены: своей у палитры нет, и движок брал ей
|
|
753
|
+
светлую по умолчанию.
|
|
754
|
+
|
|
695
755
|
`ice` — отдельная тема со СВОЕЙ палитрой целиком, а не правка светлой. Цвета сняты
|
|
696
756
|
с растровых тайлов Baidu Maps (Луцзяцзуй, z17, 25 тайлов): земля `#f5f3f0`,
|
|
697
757
|
дороги белые с серой обводкой `#dbdbdd`, магистрали `#ffd86b`, вода `#90ddf6`,
|
|
@@ -1019,6 +1079,12 @@ map.getQuality() // { auto, profile, pixelRatio }
|
|
|
1019
1079
|
| `balanced` | ≤1.75 | ≤2560×2160 | да | ≤4 | 1024 | 0.85 |
|
|
1020
1080
|
| `low` | ≤1.25 | ≤1920×1350 | нет | ≤2 | 512 | 0.5 |
|
|
1021
1081
|
|
|
1082
|
+
На `low` и `minimal` геометрия упрощается (`simpleGeometry`): объёмные поверхности становятся
|
|
1083
|
+
плоскими заливками. Исключение — полотно дорог с настилом (`deck`): его объём даёт и высоту
|
|
1084
|
+
эстакады, и глубину, которой настил закрывает разметку под собой (`depthTest`). Пока оно
|
|
1085
|
+
упрощалось, режим «Эстакады с высотой» на слабом телефоне не делал ничего, а эмулятор Android
|
|
1086
|
+
(он определяется как `minimal`) показывал эстакады плоскими.
|
|
1087
|
+
|
|
1022
1088
|
Телефон отличается от десктопа не столько силой GPU, сколько **плотностью
|
|
1023
1089
|
экрана**: при `devicePixelRatio` 3 кадр 412×892 CSS — это 3,3 миллиона
|
|
1024
1090
|
пикселей, вдвое больше типичного окна на ноутбуке, и рисует их вчетверо более
|
|
@@ -1507,6 +1573,14 @@ node scripts/smoke.mjs # рендер в headless-браузере, 4 р
|
|
|
1507
1573
|
|
|
1508
1574
|
## Грабли, на которые уже наступили
|
|
1509
1575
|
|
|
1576
|
+
- **Перенос кадра подписей на Android и iOS (KMP) усыплял проявление.** Подпись встаёт в
|
|
1577
|
+
начале проявления, почти прозрачной. Следующие ~300 мс кадр подписей переносится на камеру
|
|
1578
|
+
(`reproject`) вместе с прозрачностью на момент раскладки и продолжения не просит. На
|
|
1579
|
+
неподвижной карте цикл кадров засыпал, и подписи оставались невидимыми до первого касания.
|
|
1580
|
+
Чаще всего это видно на мелком зуме: шрифт приезжает позже тайлов. Теперь проход подписей
|
|
1581
|
+
просит кадр, пока кадр `fading`, и на переносе тоже (`labelsFading` в `layers/Renderer.kt`).
|
|
1582
|
+
В вебе переноса нет, поэтому там этого не было. Проверяется
|
|
1583
|
+
`SymbolFrameTest.lateGlyphsArePlacedWithoutCameraMove`.
|
|
1510
1584
|
- **`ELEMENT_ARRAY_BUFFER` — состояние VAO, а не глобальное.** Создание индексного буфера
|
|
1511
1585
|
соседнего тайла, пока привязан VAO предыдущего, молча переписывало тому привязку: тайл
|
|
1512
1586
|
начинал рисовать чужими индексами по своим вершинам. Ошибок GL нет, кадр не падает — тайл
|