Files
wiki/memory/2026-05-02.md
2026-05-02 15:20:01 +03:00

108 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-05-02 — Дневник
## Enduro Trails — отладка прототипа (утро)
### Что делали
Долгая отладка карты грунтовок ЦФО на http://82.22.50.71:5558
### Проблемы и решения
#### 1. style.json не грузился (404 на /static/style.json)
- Путь в index.html был `/static/style.json`, а сервер отдаёт `/style.json`
- Исправлено: путь исправлен на `/style.json`
#### 2. Шрифты — demotiles.maplibre.org отдавал 404
- MapLibre зависал при инициализации
- Исправлено: переключили на `https://fonts.openmaptiles.org/{fontstack}/{range}.pbf`
#### 3. Невалидный фильтр в style.json
- `trails-path-bridleway` использовал expression синтаксис: `["in", ["get", "highway"], "literal", [...]]`
- MapLibre 4.x падал с ошибкой "Expected 2 arguments, but found 3"
- Исправлено: заменили на legacy синтаксис `["in", "highway", "path", "bridleway", "footway"]`
#### 4. Самописный MVT энкодер давал пустые тайлы
- WKB геометрия имеет тип `0x20000002` (SRID+LineString), не входил в список `(2, 1000002, 2147483650)`
- Исправлено: заменили самописный энкодер на `mapbox-vector-tile` v2.2.0 + `shapely`
#### 5. Треки смещались при зуме
- `quantize_bounds` передавался с буфером, координаты выходили за [0,4096]
- Исправлено: клиппинг строго по границе тайла через `shapely.ops.clip_by_rect`, `quantize_bounds=(west, south, east, north)` без буфера
#### 6. Y-координата перевёрнута
- `mapbox-vector-tile` v2.2.0 НЕ флипает Y по умолчанию
- MVT spec: Y=0 = север (верх)
- Исправлено: `y_coord_down=True` в encode
#### 7. index.html — дублирование window._map и незакрытые теги
- При рефакторинге initMap() файл был обрезан без `</script></body></html>`
- Исправлено: добавлены закрывающие теги
### Текущее состояние (10:09 UTC)
- Треки отображаются ✅
- OSM подложка работает ✅
- Смещение при зуме — частично исправлено, Слава говорит "стало лучше, но ещё сохраняется"
- `y_coord_down=True` применён, ждём подтверждения от Славы
### Технические детали
#### Стек на сервере (mva154, 82.22.50.71:5558)
- Docker контейнер `enduro-trails`
- FastAPI + uvicorn
- SQLite с индексами min_lon/max_lon/min_lat/max_lat
- `mapbox-vector-tile` v2.2.0, `shapely`
- БД: `/data/centralfederal.sqlite`, 1.1М треков
#### Доступ к серверу
- SSH: `sshpass -p 'пароль' ssh node@82.22.50.71` (пароль в .env как MVA154_PASSWORD)
- Контейнер: `docker exec enduro-trails ...`
- app.py на сервере: `/app/app.py` внутри контейнера
- Локальная копия: `/tmp/app_new.py` (актуальная версия)
#### Ключевые файлы
- `tasks/enduro-trails/prototype/static/style.json` — стили карты
- `tasks/enduro-trails/prototype/static/index.html` — фронтенд
- `/tmp/app_new.py` — актуальный app.py (нужно синхронизировать с workspace)
### Итоговое исправление (11:49 UTC) ✅
- Убран `clip_by_rect` в `build_mvt()` — треки отдаются целиком, MapLibre клипит на клиенте
- `y_coord_down=True` в `mapbox_vector_tile.encode` сохранён
- Слава подтвердил: треки перестали скакать при зуме
- TODO обновить PROJECT.md, TASK.md, онтологию
### TODO
- [ ] Синхронизировать `/tmp/app_new.py` с `tasks/enduro-trails/prototype/app.py`
- [ ] Обновить PROJECT.md и TASK.md для enduro-trails
- [ ] Обновить онтологию для проекта enduro-trails
### Обновлённый vibecode API key (11:27 UTC)
- Слава прислал новый ключ для провайдера vibecode: `sk-81bb8312c879e5c3aec7d02d671edcb4eab4b28cebcb32cb`
- Нужно обновить в `~/.openclaw/.env` (переменная `VIBECODE_API_KEY`)
## Enduro Trails — продолжение отладки (11:40-12:09 UTC)
### Скриншоты от Славы
- Прислал 2 пары скринов: z12.4 vs z11.8/12.0 — треки всё ещё смещаются при зуме
- "Опять пляшут" / "Ещё как прыгают!!!" — подтверждение что проблема не решена
- Ключевое наблюдение Славы: **"Треки же отражают дорогу, почему они смещаются"** — треки из OSM должны идеально ложиться на OSM подложку
### Диагностика
- Удаление `clip_by_rect` НЕ помогло — треки продолжали прыгать
- Причина: без клиппинга геометрия выходит за `quantize_bounds`, координаты >4096 ломают MapLibre
- **Найден корневой баг**: в WKB геометрии из БД координаты хранятся как `(lat, lon)`, а `wkb_to_coords()` читала их как `(lon, lat)`. Широта и долгота были перепутаны!
### Фикс (12:07 UTC)
- В `wkb_to_coords()`: `lat, lon = struct.unpack_from('<dd', data, offset)``coords.append((lon, lat))`
- Раньше было: `lon, lat = struct.unpack_from(...)` — неправильно, потому что БД хранит lat-first
- Файл обновлён в контейнере через docker cp + docker restart
### Статус: ожидает подтверждения
- Слава написал "Test" — видимо проверяет карту
- Ждём подтверждения что треки теперь ложатся на дороги OSM
### TODO
- [ ] Подтвердить визуально: треки совпадают с дорогами OSM при всех зумах
- [ ] Синхронизировать app.py с workspace: `tasks/enduro-trails/prototype/app.py`
- [ ] Обновить PROJECT.md и TASK.md для enduro-trails
- [ ] Обновить онтологию для проекта enduro-trails