[SF-v2 #958] 958-B4: Слои карты: будущие ЖК / скрытый склад / зоны риска #999

Closed
opened 2026-06-02 19:26:47 +00:00 by lekss361 · 3 comments
Owner

Часть EPIC #958 (Site Finder v2 / GG-форсайт). Декомпозиция критпути — ground-truth (прод-БД + код) + web-research, 2026-06-02.

Scope: SiteMap.tsx (Leaflet) имеет ConnectionPoints/CustomPoi/NSPD-слои, но нет toggleable рыночных слоёв.

Файлы: SiteMap.tsx + new MarketLayers.tsx; toggle в CpLayerControlPanel.tsx

DoD:

  • 3 toggleable Leaflet GeoJSON/CircleMarker слоя из analyze-payload (pipeline, competitors, nspd_risk_zones); будущие ЖК из cross-load (950-E5)

Зависит от: 958-B2, 950-E5
Effort: M

**Часть EPIC #958 (Site Finder v2 / GG-форсайт).** Декомпозиция критпути — ground-truth (прод-БД + код) + web-research, 2026-06-02. **Scope:** SiteMap.tsx (Leaflet) имеет ConnectionPoints/CustomPoi/NSPD-слои, но нет toggleable рыночных слоёв. **Файлы:** SiteMap.tsx + new MarketLayers.tsx; toggle в CpLayerControlPanel.tsx **DoD:** - 3 toggleable Leaflet GeoJSON/CircleMarker слоя из analyze-payload (pipeline, competitors, nspd_risk_zones); будущие ЖК из cross-load (950-E5) **Зависит от:** 958-B2, 950-E5 **Effort:** M
lekss361 added this to the Site Finder v2 — Foresight (GG-форсайт) milestone 2026-06-02 19:26:51 +00:00
lekss361 added the
GG-форсайт
scope/frontend
site-finder
labels 2026-06-02 19:26:52 +00:00
Collaborator

Статус 2026-06-05: Step 1 (backend) сделан и в проде; Step 2 (фронт-слои) отложен — решение зафиксировано.

Step 1 — backend coords (#1074, merged + verified на проде)

/analyze теперь отдаёт nullable lat/lon (EPSG:4326) для competitors[] и pipeline_24mo.top_objects[] (из domrf_kn_objects.latitude/longitude, тот же источник, что distance_m). Прод-проба: competitor ЖК «Малевич» lat=56.8605/lon=60.6177, pipeline ЖК «Азина 16» lat=56.8567/lon=60.6132. Чисто аддитивно. Это задел под слои карты — данные готовы.

⏸ Step 2 — фронт-слои карты: отложено

Причины (ground-truth по коду):

  1. В модерн-UI карта SiteMap рендерится как MiniMap фикс-размера в Секции 1 (Section1ParcelInfo), а не как полноразмерная карта. 3 переключаемых рыночных слоя + CpLayerControlPanel в мини-карту — тесно по UX, спорная ценность для normal-priority.
  2. Слой «будущие ЖК» всё равно блокирован #976 (950-E5, cross-load) — open.

Когда возвращаться: появится полноразмерная карта на экране анализа ИЛИ разблокируется #976. Backend-задел (#1074) уже готов — останется только фронт-слои поверх coords.

**Статус 2026-06-05:** Step 1 (backend) сделан и в проде; Step 2 (фронт-слои) **отложен** — решение зафиксировано. ### ✅ Step 1 — backend coords (#1074, merged + verified на проде) `/analyze` теперь отдаёт nullable `lat`/`lon` (EPSG:4326) для `competitors[]` и `pipeline_24mo.top_objects[]` (из `domrf_kn_objects.latitude/longitude`, тот же источник, что `distance_m`). Прод-проба: competitor ЖК «Малевич» lat=56.8605/lon=60.6177, pipeline ЖК «Азина 16» lat=56.8567/lon=60.6132. Чисто аддитивно. Это **задел под слои карты** — данные готовы. ### ⏸ Step 2 — фронт-слои карты: отложено Причины (ground-truth по коду): 1. В модерн-UI карта `SiteMap` рендерится как **`MiniMap` фикс-размера в Секции 1** (`Section1ParcelInfo`), а не как полноразмерная карта. 3 переключаемых рыночных слоя + `CpLayerControlPanel` в мини-карту — тесно по UX, спорная ценность для normal-priority. 2. Слой **«будущие ЖК»** всё равно блокирован **#976 (950-E5, cross-load)** — open. **Когда возвращаться:** появится полноразмерная карта на экране анализа ИЛИ разблокируется #976. Backend-задел (#1074) уже готов — останется только фронт-слои поверх coords.
Collaborator

3 из 4 слоёв карты доставлены в PR #1113 (merged): Конкуренты (вкл. по умолчанию), Будущие проекты (pipeline), Зоны риска (GeoJSON из geom_wkt, inline WKT-парсер). Тогглы в секции «Рынок» панели слоёв.

Остаётся: «будущие ЖК» (newbuilding) — ждёт API-экспозиции newbuilding_listings (таблица построена в #1108). Когда analyze начнёт отдавать newbuilding-геометрию, добавить 4-й слой по тому же паттерну (MarketLayers.tsx).

Follow-up: unit-тесты WKT-парсера + EWKT-толерантность (риск-зон нет на тестовом участке → путь рендера не покрыт прогоном).

3 из 4 слоёв карты доставлены в **PR #1113** (merged): **Конкуренты** (вкл. по умолчанию), **Будущие проекты** (pipeline), **Зоны риска** (GeoJSON из `geom_wkt`, inline WKT-парсер). Тогглы в секции «Рынок» панели слоёв. Остаётся: **«будущие ЖК»** (newbuilding) — ждёт API-экспозиции `newbuilding_listings` (таблица построена в #1108). Когда analyze начнёт отдавать newbuilding-геометрию, добавить 4-й слой по тому же паттерну (`MarketLayers.tsx`). Follow-up: unit-тесты WKT-парсера + EWKT-толерантность (риск-зон нет на тестовом участке → путь рендера не покрыт прогоном).
Collaborator

958-B4 (слои карты: будущие ЖК / скрытый склад / зоны риска) реализован и верифицирован в проде (qa-tester, 2026-06-13):

  • MarketLayers.tsx рендерит 3 toggleable слоя: competitors (markers), pipeline/future (pipeline_24mo.top_objects, dashed), risk (riskZones).
  • Backend analyze-payload содержит все источники: competitors, pipeline_24mo, nspd_risk_zones, nspd_opportunity_parcels, nspd_red_lines.
  • Frontend-типы (types/site-finder.ts) и consumer (LandTab.tsx, CpLayerControlPanel.tsx) совпадают с payload.

Закрываю как реализованное в проде.

958-B4 (слои карты: будущие ЖК / скрытый склад / зоны риска) реализован и **верифицирован в проде** (qa-tester, 2026-06-13): - `MarketLayers.tsx` рендерит 3 toggleable слоя: competitors (markers), pipeline/future (`pipeline_24mo.top_objects`, dashed), risk (`riskZones`). - Backend analyze-payload содержит все источники: `competitors`, `pipeline_24mo`, `nspd_risk_zones`, `nspd_opportunity_parcels`, `nspd_red_lines`. - Frontend-типы (`types/site-finder.ts`) и consumer (`LandTab.tsx`, `CpLayerControlPanel.tsx`) совпадают с payload. Закрываю как реализованное в проде.
Sign in to join this conversation.
No project
No assignees
2 participants
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#999
No description provided.