Gate G3: ЗОУИТ overlay (санзоны/охранные/ЛЭП/газ/затопление) #30

Closed
opened 2026-05-11 20:13:51 +00:00 by lekss361 · 3 comments
lekss361 commented 2026-05-11 20:13:51 +00:00 (Migrated from github.com)

Эшелон: 🔴 Gate — «Можно ли тут строить МКД»

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

Сейчас в /analyze нет проверки попадает ли участок в зоны с особыми условиями использования территории (ЗОУИТ): СЗЗ заводов, охранные зоны ЛЭП/газопровода, санитарная зона аэропорта Кольцово, зоны затопления, охранные зоны памятников. Это hard-warn — может полностью блокировать МКД либо требовать compensation measures (+10-50M ₽ к проекту).

Что сделать

  1. Источники (порядок предпочтения):
    • ФГИС ТП (fgistp.economy.gov.ru) — HTML-парсинг, нет API. Сложно но самое полное.
    • ВСЕГЕИ shape — Pulkovo SRS, перепроекция в WGS84, основные ОЗ магистральных коммуникаций.
    • prokadastr.com / egrn.reestr.net — платные API ~10K ₽/мес, декодируют по cad.
  2. Schema: новая таблица zouit_zones_ekbid, zone_type INT, type_name TEXT, source TEXT, geom, raw_props jsonb, fetched_at
  3. GIST индекс на geom
  4. Backend: analyze.gate.zouit_intersections: [{type: «ОЗ ЛЭП», severity: «warn», legal_ref: «...»}]
  5. Severity mapping (hardcoded MVP): затопление (33)=block, СЗЗ завода (26)=warn, ОЗ ЛЭП (5)=warn, ОЗ газа (9)=warn

Acceptance

  • >100 ЗОУИТ полигонов импортировано для ЕКБ
  • Известная санзона Уралмаш-завода видна на тестовом участке в 200м
  • Аэропорт Кольцово — зона ~5км shown
  • analyze возвращает zouit_intersections для участков попадающих в зону

Owner

database-expert (shape import / HTML-parsing pipeline) + backend-engineer (overlay query + severity logic)

Effort

2–3 дня (главное — найти источник)

Risks / open

  • Главный риск: нет открытого API/shape. Может потребовать ручной запрос в Минстрой или подписка на платный сервис. Эскалируется на B2B registry (см. отдельный issue).
  • Pulkovo → WGS84 перепроекция: проверить корректность EPSG (Krasovsky 1942 vs Pulkovo 1942)
  • Source heterogeneity — разные источники для разных типов ЗОУИТ

Dependencies

— (foundation для G5)

  • Closes part of: #27
**Эшелон:** 🔴 Gate — «Можно ли тут строить МКД» ## Контекст / проблема Сейчас в `/analyze` нет проверки попадает ли участок в зоны с особыми условиями использования территории (ЗОУИТ): СЗЗ заводов, охранные зоны ЛЭП/газопровода, санитарная зона аэропорта Кольцово, зоны затопления, охранные зоны памятников. Это **hard-warn** — может полностью блокировать МКД либо требовать compensation measures (+10-50M ₽ к проекту). ## Что сделать 1. Источники (порядок предпочтения): - **ФГИС ТП** (fgistp.economy.gov.ru) — HTML-парсинг, нет API. Сложно но самое полное. - **ВСЕГЕИ shape** — Pulkovo SRS, перепроекция в WGS84, основные ОЗ магистральных коммуникаций. - **prokadastr.com / egrn.reestr.net** — платные API ~10K ₽/мес, декодируют по cad. 2. Schema: новая таблица `zouit_zones_ekb` — `id, zone_type INT, type_name TEXT, source TEXT, geom, raw_props jsonb, fetched_at` 3. GIST индекс на geom 4. Backend: `analyze.gate.zouit_intersections: [{type: «ОЗ ЛЭП», severity: «warn», legal_ref: «...»}]` 5. Severity mapping (hardcoded MVP): затопление (33)=block, СЗЗ завода (26)=warn, ОЗ ЛЭП (5)=warn, ОЗ газа (9)=warn ## Acceptance - [ ] >100 ЗОУИТ полигонов импортировано для ЕКБ - [ ] Известная санзона Уралмаш-завода видна на тестовом участке в 200м - [ ] Аэропорт Кольцово — зона ~5км shown - [ ] analyze возвращает zouit_intersections для участков попадающих в зону ## Owner `database-expert` (shape import / HTML-parsing pipeline) + `backend-engineer` (overlay query + severity logic) ## Effort 2–3 дня (главное — найти источник) ## Risks / open - **Главный риск:** нет открытого API/shape. Может потребовать ручной запрос в Минстрой или подписка на платный сервис. Эскалируется на B2B registry (см. отдельный issue). - Pulkovo → WGS84 перепроекция: проверить корректность EPSG (Krasovsky 1942 vs Pulkovo 1942) - Source heterogeneity — разные источники для разных типов ЗОУИТ ## Dependencies — (foundation для G5) ## Links - Closes part of: #27
lekss361 commented 2026-05-12 05:46:12 +00:00 (Migrated from github.com)

LayerId маппинг найден (после #94 reverse-engineering):

Не нужно искать shape ФГИС ТП / ВСЕГЕИ — всё доступно через НСПД WMS:

  • 37577 — ЗОУИТ ОКН (территория ОКН, охранные зоны, зона регулирования застройки)
  • 37578 — ЗОУИТ энергетики/связи/транспорта (subcategory 14-28: 16 транспорт, 17 инженерные коммуникации, 18 связи, 19 придорожная полоса, 21 защита населения, 28 радиотех)
  • 37579 — ЗОУИТ охраняемых объектов (СЗЗ предприятий, санитарный разрыв, военные склады, пограничные)
  • 37580 — ЗОУИТ природных (водоохранная зона, прибрежная защитная полоса, СЗО водоснабжения, зелёная зона)
  • 37581 — Иные ЗОУИТ (публичный сервитут, резервирование земель, ОЭЗ)

Bulk fetch через bbox tiling — закрывается через #94. Effort снижается с ~2-3 дней до ~1 день.

**LayerId маппинг найден** (после #94 reverse-engineering): Не нужно искать shape ФГИС ТП / ВСЕГЕИ — всё доступно через НСПД WMS: - **37577** — ЗОУИТ ОКН (территория ОКН, охранные зоны, зона регулирования застройки) - **37578** — ЗОУИТ энергетики/связи/транспорта (subcategory 14-28: 16 транспорт, **17 инженерные коммуникации**, 18 связи, 19 придорожная полоса, 21 защита населения, 28 радиотех) - **37579** — ЗОУИТ охраняемых объектов (**СЗЗ предприятий**, санитарный разрыв, военные склады, пограничные) - **37580** — ЗОУИТ природных (**водоохранная зона, прибрежная защитная полоса, СЗО водоснабжения**, зелёная зона) - **37581** — Иные ЗОУИТ (публичный сервитут, резервирование земель, ОЭЗ) Bulk fetch через bbox tiling — закрывается через #94. Effort снижается с ~2-3 дней до ~1 день.
Owner

Реализовано через #94 (2026-05-16):

  • PR #212 (merged): NspdZouitOverlapsBlock в LandTab — показывает ОКН / энергетики / природные / охраняемые / иные ЗОУИТ overlaps участка
  • PR #217 (merged): TIER 3 risk zones — NspdRiskZonesBlock (затопление 1%/5%, оползни, гари, эрозии — 11 layers)
  • PR #220 (merged): nspd_red_lines (красные линии застройки)
  • Backend _get_zouit_overlaps + _get_risk_zones + _get_red_lines в quarter_dump_lookup.py

G3 базовый функционал реализован. Этот issue можно закрыть, если нет специфических unconvered scope (газораспределительные ЗОУИТ скорее в #115 connection points + #44 OSM infra).

**Реализовано через #94 (2026-05-16):** - PR #212 (merged): `NspdZouitOverlapsBlock` в LandTab — показывает ОКН / энергетики / природные / охраняемые / иные ЗОУИТ overlaps участка - PR #217 (merged): TIER 3 risk zones — `NspdRiskZonesBlock` (затопление 1%/5%, оползни, гари, эрозии — 11 layers) - PR #220 (merged): `nspd_red_lines` (красные линии застройки) - Backend `_get_zouit_overlaps` + `_get_risk_zones` + `_get_red_lines` в `quarter_dump_lookup.py` G3 базовый функционал реализован. Этот issue можно закрыть, если нет специфических unconvered scope (газораспределительные ЗОУИТ скорее в #115 connection points + #44 OSM infra).
Owner

Closing as superseded by #232 (G3 ЗОУИТ overlay fallback на cad_zouit).

#30 был meta-spec'ом G3 ЗОУИТ overlay. Реализация выехала через PR #240 (merged 2026-05-17):

  • quarter_dump_lookup.py:_get_zouit_overlaps теперь делает fallback на cad_zouit (3 483 строки, GIST index) когда nspd_quarter_dumps.zouit_count=0
  • gate_verdict.py расширен BLOCKER_TYPE_ZONE_KEYWORDS / WARNING_TYPE_ZONE_KEYWORDS для классификации через type_zone substring (т.к. cad_zouit.subcategory = 100% NULL → исходный subcategory-based BLOCKER не работает)
  • 6 новых тестов в test_gate_verdict.py (20 зелёных всего)

NSPD subcategory path не тронут — backward compat для будущих не пустых dumps.

Audit reference: audits/issues_audit_2026_05_16.md (2026-05-17).

Closing as superseded by #232 (G3 ЗОУИТ overlay fallback на cad_zouit). `#30` был meta-spec'ом G3 ЗОУИТ overlay. Реализация выехала через **PR #240** (merged 2026-05-17): - `quarter_dump_lookup.py:_get_zouit_overlaps` теперь делает fallback на `cad_zouit` (3 483 строки, GIST index) когда `nspd_quarter_dumps.zouit_count=0` - `gate_verdict.py` расширен `BLOCKER_TYPE_ZONE_KEYWORDS` / `WARNING_TYPE_ZONE_KEYWORDS` для классификации через `type_zone` substring (т.к. `cad_zouit.subcategory` = 100% NULL → исходный subcategory-based BLOCKER не работает) - 6 новых тестов в `test_gate_verdict.py` (20 зелёных всего) NSPD subcategory path не тронут — backward compat для будущих не пустых dumps. Audit reference: `audits/issues_audit_2026_05_16.md` (2026-05-17).
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#30
No description provided.