Site Finder v3.1: cad_parcels_geom + POI markers on map + extended OSM coverage #26

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

Полное MVP реализовано в #8 (закрыто). Остаются 3 follow-up задачи:

1. Геометрия для cad-участков (4-part NSPD)

Проблема: пользовательский тестовый участок 66:41:0204016:10 (4-part cad) при scrape с thematic_id=2 (quarter) возвращает empty. Нужно thematic_id=1 (parcel), но текущий nspd_geo task НЕ сохраняет parcels (см. _persist_target в backend/app/workers/tasks/nspd_geo.py: для thematic_id=1 только raw в targets.result_features).

Решение:

  • DB migration: новая таблица cad_parcels_geom (cad_num TEXT PK, geom geometry Polygon 4326 GIST, raw_props JSONB, fetched_at)
  • backend: расширить _persist_target для thematic_id=1 → INSERT в cad_parcels_geom
  • backend: расширить /parcels/{cad}/analyze чтобы fallback'ить на cad_parcels_geom если cad — участок (4-part)

2. POI lat/lon в analyze response → маркеры на карте

Проблема: score_breakdown в response содержит {name, distance_m, last_edit} — без координат. SiteMap.tsx рисует только полигон участка.

Решение:

  • backend: добавить lat, lon в каждый POI в score_breakdown response
  • frontend: расширить ParcelAnalysis тип + добавить CircleMarker в SiteMap.tsx цветной по category

3. OSM coverage gaps

Проблема: в bbox ЕКБ Overpass для category=school/supermarket/metro_stop вернул 0 элементов. Причина:

  • school: вероятно школы тегированы как amenity=college или amenity=university или просто building=school
  • supermarket: возможно shop=convenience vs supermarket границы размыты
  • metro: 0 — реальная ситуация (1 ветка в ЕКБ покрыта тегами station=subway)

Решение: расширить OSM_CATEGORIES в poi_loader.py:

  • school: amenity~^(school|college|university)$
  • supermarket: добавить shop=hypermarket
    • проверить что данные содержат разумное число школ ЕКБ (по области должно быть 150+)

Ссылки

  • Endpoint: https://gendsgn.ru/site-finder
  • Backend: POST /api/v1/parcels/{cad}/analyze
  • Schema: data/sql/82_osm_poi_ekb.sql
  • POI loader: backend/app/services/site_finder/poi_loader.py
  • Vault: domains/sitefinder/SiteFinder_v3_May11.md
Полное MVP реализовано в #8 (закрыто). Остаются 3 follow-up задачи: ## 1. Геометрия для cad-участков (4-part NSPD) **Проблема:** пользовательский тестовый участок 66:41:0204016:10 (4-part cad) при scrape с thematic_id=2 (quarter) возвращает empty. Нужно thematic_id=1 (parcel), но текущий nspd_geo task НЕ сохраняет parcels (см. _persist_target в backend/app/workers/tasks/nspd_geo.py: для thematic_id=1 только raw в targets.result_features). **Решение:** - DB migration: новая таблица cad_parcels_geom (cad_num TEXT PK, geom geometry Polygon 4326 GIST, raw_props JSONB, fetched_at) - backend: расширить _persist_target для thematic_id=1 → INSERT в cad_parcels_geom - backend: расширить /parcels/{cad}/analyze чтобы fallback'ить на cad_parcels_geom если cad — участок (4-part) ## 2. POI lat/lon в analyze response → маркеры на карте **Проблема:** score_breakdown в response содержит {name, distance_m, last_edit} — без координат. SiteMap.tsx рисует только полигон участка. **Решение:** - backend: добавить lat, lon в каждый POI в score_breakdown response - frontend: расширить ParcelAnalysis тип + добавить CircleMarker в SiteMap.tsx цветной по category ## 3. OSM coverage gaps **Проблема:** в bbox ЕКБ Overpass для category=school/supermarket/metro_stop вернул 0 элементов. Причина: - school: вероятно школы тегированы как amenity=college или amenity=university или просто building=school - supermarket: возможно shop=convenience vs supermarket границы размыты - metro: 0 — реальная ситуация (1 ветка в ЕКБ покрыта тегами station=subway) **Решение:** расширить OSM_CATEGORIES в poi_loader.py: - school: amenity~^(school|college|university)$ - supermarket: добавить shop=hypermarket - + проверить что данные содержат разумное число школ ЕКБ (по области должно быть 150+) ## Ссылки - Endpoint: https://gendsgn.ru/site-finder - Backend: POST /api/v1/parcels/{cad}/analyze - Schema: data/sql/82_osm_poi_ekb.sql - POI loader: backend/app/services/site_finder/poi_loader.py - Vault: domains/sitefinder/SiteFinder_v3_May11.md
lekss361 commented 2026-05-11 20:20:04 +00:00 (Migrated from github.com)

Reference: Scope частично перекрывается с Site Finder v4 — scoring quality:

  • cad_parcels_geom массовый импорт#51 (E1) — оторвано в отдельный issue
  • POI markers on map уже сделано в SiteFinder_v3 (commit ed... — addressed earlier)
  • Extended OSM coverage → частично #44 (I3 — инженерные сети из OSM), частично оставлено в этом issue для healthcare/sport/etc

Что остаётся уникальным здесь: OSM coverage extensions, которые НЕ инженерные сети (sport facilities, детальное healthcare, и т.д.). Можно либо оставить открытым как «smaller-OSM-add-ons», либо закрыть после E1 — на ваш выбор.

Milestone: https://github.com/lekss361/-gendesign/milestone/4

**Reference:** Scope частично перекрывается с **Site Finder v4 — scoring quality**: - **cad_parcels_geom массовый импорт** → #51 (E1) — оторвано в отдельный issue - **POI markers on map** → ✅ уже сделано в SiteFinder_v3 (commit ed... — addressed earlier) - **Extended OSM coverage** → частично #44 (I3 — инженерные сети из OSM), частично оставлено в этом issue для healthcare/sport/etc **Что остаётся уникальным здесь:** OSM coverage extensions, которые НЕ инженерные сети (sport facilities, детальное healthcare, и т.д.). Можно либо оставить открытым как «smaller-OSM-add-ons», либо закрыть после E1 — на ваш выбор. Milestone: https://github.com/lekss361/-gendesign/milestone/4
Owner

Закрываю — все 3 части закрыты разными PR в течение последних 2 недель:

  1. Геометрия cad-участков (4-part NSPD) — реализовано через bulk cadastre (#168/PR #170, #171, #180, #185, #186). После job #20: cad_parcels_geom имеет 38 355 записей с геом (97.6%). См. также #51.
  2. POI lat/lon в analyze + маркеры на картеcad_buildings соседи + POI integration через PR #91 (P2), #89 (P1). LandTab/POI markers в NSPD UI integration PR #212.
  3. OSM coverage gapsosm_poi_ekb расширен через серию PR (P1 #89 geometry suitability, P2 #91 buildings overlap, и общий site-finder workflow).

Оставшиеся nuances (rare 4-part cad cases) — в #200 (residual 932 parcels без geom).

Закрываю — все 3 части закрыты разными PR в течение последних 2 недель: 1. **Геометрия cad-участков (4-part NSPD)** — реализовано через bulk cadastre (#168/PR #170, #171, #180, #185, #186). После job #20: `cad_parcels_geom` имеет 38 355 записей с геом (97.6%). См. также #51. 2. **POI lat/lon в analyze + маркеры на карте** — `cad_buildings` соседи + POI integration через PR #91 (P2), #89 (P1). LandTab/POI markers в NSPD UI integration PR #212. 3. **OSM coverage gaps** — `osm_poi_ekb` расширен через серию PR (P1 #89 geometry suitability, P2 #91 buildings overlap, и общий site-finder workflow). Оставшиеся nuances (rare 4-part cad cases) — в #200 (residual 932 parcels без geom).
Sign in to join this conversation.
No milestone
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#26
No description provided.