Access A2: Endpoint /parcels/{cad}/isochrones (walk/car 10/15/30 мин) + UI #40

Closed
opened 2026-05-11 20:16:19 +00:00 by lekss361 · 2 comments
lekss361 commented 2026-05-11 20:16:19 +00:00 (Migrated from github.com)

Эшелон: 🟡 Accessibility — routing вместо straight-line

Контекст / проблема

После OSRM (A1) — нужен endpoint и UI чтобы девелопер увидел реальные изохроны 10/15/30 мин (пешком/на машине). Сейчас «школа в 800м» абстрактно, изохроны делают это наглядно.

Что сделать

Backend

  1. Endpoint GET /api/v1/parcels/{cad_num}/isochrones?modes=walk,car&times=10,15,30
  2. Internal call OSRM /table или /isochrone (если plugin доступен), либо grid-sampling через /route для построения convex hull
  3. Cache result в Redis на 7 дней (изохроны меняются редко при OSM update)
  4. Response: GeoJSON FeatureCollection, polygons per (mode, time) bucket

Frontend

  1. В SiteMap.tsx — новый Leaflet layer group «Изохроны»
  2. Toggle buttons: walk/car × 10/15/30
  3. Polygon colors: walk-green / car-blue, opacity per time
  4. Legend

Acceptance

  • Изохрона walk-15min для участка в Центре охватывает ожидаемые улицы
  • Polygons валидны (ST_IsValid)
  • First load <3s, cached <100ms

Owner

backend-engineer (endpoint + cache) + frontend-engineer (Leaflet layer + toggles)

Effort

1–1.5 дня

Dependencies

  • A1 (OSRM service running)

Risks / open

  • OSRM open-source isochrone — не идеальный. Можно alternative: GraphHopper Isochrone API (free tier).
  • Polygons могут быть «дырявыми» — нужен post-processing simplify
  • Closes part of #27
**Эшелон:** 🟡 Accessibility — routing вместо straight-line ## Контекст / проблема После OSRM (A1) — нужен endpoint и UI чтобы девелопер увидел реальные изохроны 10/15/30 мин (пешком/на машине). Сейчас «школа в 800м» абстрактно, изохроны делают это наглядно. ## Что сделать ### Backend 1. Endpoint `GET /api/v1/parcels/{cad_num}/isochrones?modes=walk,car&times=10,15,30` 2. Internal call OSRM `/table` или `/isochrone` (если plugin доступен), либо grid-sampling через `/route` для построения convex hull 3. Cache result в Redis на 7 дней (изохроны меняются редко при OSM update) 4. Response: GeoJSON FeatureCollection, polygons per (mode, time) bucket ### Frontend 1. В `SiteMap.tsx` — новый Leaflet layer group «Изохроны» 2. Toggle buttons: walk/car × 10/15/30 3. Polygon colors: walk-green / car-blue, opacity per time 4. Legend ## Acceptance - [ ] Изохрона walk-15min для участка в Центре охватывает ожидаемые улицы - [ ] Polygons валидны (ST_IsValid) - [ ] First load <3s, cached <100ms ## Owner `backend-engineer` (endpoint + cache) + `frontend-engineer` (Leaflet layer + toggles) ## Effort 1–1.5 дня ## Dependencies - **A1** (OSRM service running) ## Risks / open - OSRM open-source isochrone — не идеальный. Можно alternative: GraphHopper Isochrone API (free tier). - Polygons могут быть «дырявыми» — нужен post-processing simplify ## Links - Closes part of #27
Owner

Status update — НЕ реализовано. Endpoint /parcels/{cad}/isochrones отсутствует. Зависит от #39 (OSRM service).

Issue остаётся в backlog priority/high. ~1-1.5 дня после OSRM up.

Status update — НЕ реализовано. Endpoint `/parcels/{cad}/isochrones` отсутствует. Зависит от #39 (OSRM service). Issue остаётся в backlog priority/high. ~1-1.5 дня после OSRM up.
Collaborator

Ground-truth 2026-06-13. DRIFT: GET /{cad}/isochrones (parcels.py:2925) через OpenRouteService (foot/cycling/driving, GeoJSON FC) + frontend useIsochrones.ts + SiteMap layer. OSRM сознательно отложен (#27) — ORS free-tier покрывает. Функция закрыта.

**Ground-truth 2026-06-13.** DRIFT: GET /{cad}/isochrones (parcels.py:2925) через OpenRouteService (foot/cycling/driving, GeoJSON FC) + frontend useIsochrones.ts + SiteMap layer. OSRM сознательно отложен (#27) — ORS free-tier покрывает. Функция закрыта.
Sign in to join this conversation.
No project
No assignees
3 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#40
No description provided.