fix(site-finder): сети и точки подключения на карте Раздела 3 (#1961) #1998

Merged
bot-backend merged 1 commit from fix/report-map-points-1961 into main 2026-06-27 13:00:15 +00:00
Collaborator

Батч аудита (эпик #1953). code-reviewer APPROVE (численно подтвердил репроекцию).

«Где эти точки на карте» — реальный баг, 3 причины:

  • Sub-bug C (FIXED, фронт) — точки подключения = полигоны в EPSG:3857, не lat/lon. Прод отдаёт connection-points как Polygon/MultiPolygon в Меркаторе ([6739509, 7732776]), а extractLatLon обрабатывал только Point в 4326 → маркеры улетали «в океан». Добавлены: outer-ring центроид для Polygon/MultiPolygon + авто-репроекция 3857→4326 (эвристика по диапазону: |x|>180 ⇒ Меркатор, диапазоны 4326/3857 непересекающиеся). Ревью: прод-точка → lon 60.54 / lat 56.87 (центр ЕКБ). +7 тестов (центроид + репроекция + graceful-skip).
  • Sub-bug B (FIXED, фронт) — рассинхрон радиусов. Таблица 2км, карта 500м (1 объект vs 153). Введён UTILITY_COVERAGE_RADIUS_M = 2000, дефолт хука 500→2000 (единственный caller — Section2; 2000 = backend max). Карта совпала со столбцом «В 2 км».
  • Sub-bug A (частично, фронт) — источник таблицы без слоя. Таблица «Сети» = osm_noise_sources_ekb (без geom в payload, тонкие подтипы); карта = osm_utility_infrastructure_ekb (coarser power/water/gas). Фронт-конвергенция: карта показывает те же сети в том же 2км + честная микрокопия table↔map. Полное 1:1 требует backend (вернуть ST_AsGeoJSON(geom) для osm_noise_sources_ekb в utilities.summary) — отмечено для follow-up, backend не трогал.

Качество

  • tsc clean; next lint clean; prettier 3.9.0 clean; site-finder vitest 79 passed (+7 новых).
  • Leaflet остаётся dynamic ssr:false; UI-токены, Lucide, aria. OSM-слой репроекцию НЕ делает (он в 4326 — консистентно).

Refs #1961 (фронт-часть; backend-geom для полного 1:1 — отдельный follow-up).

Батч аудита (эпик #1953). code-reviewer ✅ APPROVE (численно подтвердил репроекцию). «Где эти точки на карте» — реальный баг, 3 причины: - **Sub-bug C (FIXED, фронт) — точки подключения = полигоны в EPSG:3857, не lat/lon.** Прод отдаёт connection-points как Polygon/MultiPolygon в **Меркаторе** (`[6739509, 7732776]`), а `extractLatLon` обрабатывал только Point в 4326 → маркеры улетали «в океан». Добавлены: outer-ring центроид для Polygon/MultiPolygon + авто-репроекция 3857→4326 (эвристика по диапазону: `|x|>180 ⇒ Меркатор`, диапазоны 4326/3857 непересекающиеся). Ревью: прод-точка → lon 60.54 / lat 56.87 (центр ЕКБ). +7 тестов (центроид + репроекция + graceful-skip). - **Sub-bug B (FIXED, фронт) — рассинхрон радиусов.** Таблица 2км, карта 500м (1 объект vs 153). Введён `UTILITY_COVERAGE_RADIUS_M = 2000`, дефолт хука 500→2000 (единственный caller — Section2; 2000 = backend max). Карта совпала со столбцом «В 2 км». - **Sub-bug A (частично, фронт) — источник таблицы без слоя.** Таблица «Сети» = `osm_noise_sources_ekb` (без geom в payload, тонкие подтипы); карта = `osm_utility_infrastructure_ekb` (coarser power/water/gas). Фронт-конвергенция: карта показывает те же сети в том же 2км + честная микрокопия table↔map. **Полное 1:1 требует backend** (вернуть `ST_AsGeoJSON(geom)` для osm_noise_sources_ekb в `utilities.summary`) — отмечено для follow-up, backend не трогал. ## Качество - tsc clean; next lint clean; prettier 3.9.0 clean; site-finder vitest **79 passed** (+7 новых). - Leaflet остаётся `dynamic ssr:false`; UI-токены, Lucide, aria. OSM-слой репроекцию НЕ делает (он в 4326 — консистентно). Refs #1961 (фронт-часть; backend-geom для полного 1:1 — отдельный follow-up).
bot-backend added 1 commit 2026-06-27 12:57:46 +00:00
fix(site-finder): show networks & connection points on Раздел 3 map (#1961)
All checks were successful
CI / changes (pull_request) Successful in 8s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m3s
CI / openapi-codegen-check (pull_request) Successful in 1m54s
1bbc032316
The "Сети" section table summarised engineering networks and distances, but
users could not see those points on the map. Three root causes:

- Connection-points layer was always empty: NSPD engineering_structures
  (cat 36328) arrive as Polygon/MultiPolygon in EPSG:3857 (prod: 587 Polygon
  + 298 MultiPolygon, zero Point), but extractLatLon only handled Point in
  EPSG:4326. Extend it to compute the outer-ring centroid for
  Polygon/MultiPolygon and reproject 3857→4326 (frontend math, no backend
  change), so the 10+ connection points render as markers with popups.
- Map vs table coverage mismatch: the table counts "В 2 км" while the OSM
  utility-infrastructure layer fetched only 500 m (1 object inside 500 m vs
  153 within 2 km). Raise the hook default to a shared
  UTILITY_COVERAGE_RADIUS_M = 2000 so the map matches the table column.
- Coherence microcopy: clarify that the map shows the same networks as the
  table (2 km), plus NSPD connection points and protection zones.

Adds unit tests for extractLatLon polygon-centroid + 3857→4326 reprojection.

Refs #1961
bot-backend merged commit 3cd1605c5c into main 2026-06-27 13:00:15 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1998
No description provided.