РИАСУРТ Свердл: 14 ключевых layerIds для агломерации ЕКБ (multi-city scaling) #108

Closed
opened 2026-05-12 12:12:25 +00:00 by lekss361 · 1 comment
lekss361 commented 2026-05-12 12:12:25 +00:00 (Migrated from github.com)

Эшелон: Foundation / multi-city scaling

Контекст

После полного user-driven теста theme=99 (#101 wontfix + NSPD_API_Map_May12 part 7) выяснено:

  • РИАСУРТ Свердл (folderId 1224, 91 слой) покрывает окраины Свердл: Берёзовский, Верхняя Пышма, Среднеуральск, Арамиль, Сысерть
  • НЕ покрывает ЕКБ-city (у ЕКБ собственная ИСОГД — см. #107)
  • Но для агломерации ЕКБ (V.Пышма + Берёзовский — спальные / KRT-зоны для застройщиков) — это foundation

Это multi-city scaling — Sprint 4 фокус был только на ЕКБ-city, но РИАСУРТ открывает быстрое расширение на ближайшие МО.

14 ключевых layerIds для агломерации ЕКБ

ПЗЗ / Планирование (5)

  • 845274 Территориальная зона
  • 846381 Функциональные зоны (Свердл-Генплан)
  • 844759 Красные линии (полигон)
  • 844774 Линии отступа от красных линий (полигон) — новое vs PKK
  • 845298 Границы зон планируемого размещения ОКС (ППТ)

Engineering ZOUIT (4)

  • 846365 СЗЗ (vs PKK 37579)
  • 846369 Сан.разрыв инжен.коммуникаций
  • 845392 ЗСО питьевого водоснабжения
  • 846373 Водоохранные зоны

Risk (3)

  • 845425 Зоны затопления и подтопления (vs PKK 872202/205)
  • 846378 Зона экстренного оповещения
  • 844795 Территории риска ЧС техногенного характера

Opportunity (2)

  • 844478 КРТ (комплексное развитие территорий) — opportunity
  • 846379 ОЭЗ

Что сделать

1. Backend client method

async def get_riasurt_sverdl_in_bbox(self, bbox_3857: tuple, layers: list[int]) -> dict[int, list[Feature]]:
    """Bulk WMS GetFeatureInfo для 14 РИАСУРТ-layers в bbox.

    Returns: {layer_id: [features]}
    """

2. Schema migration data/sql/88_riasurt_sverdl.sql

CREATE TABLE IF NOT EXISTS riasurt_sverdl (
  id BIGSERIAL PRIMARY KEY,
  source_layer_id INT NOT NULL,           -- 845274, 846381, etc
  layer_topic TEXT NOT NULL,              -- 'territorial_zone' | 'func_zone' | 'red_lines' | 'szz' | etc
  mo_name TEXT,                           -- МО (Берёзовский ГО, В.Пышма ГО, etc)
  obshnz TEXT,                            -- для функ.зон / тер.зон
  description TEXT,
  raw_props JSONB,
  geom GEOMETRY(MULTIPOLYGON, 3857),
  geom_msk66 GEOMETRY(MULTIPOLYGON, 100000) GENERATED ALWAYS AS (ST_Transform(geom, 100000)) STORED,
  fetched_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS gist_riasurt_geom ON riasurt_sverdl USING GIST(geom);
CREATE INDEX IF NOT EXISTS gist_riasurt_geom_msk66 ON riasurt_sverdl USING GIST(geom_msk66);
CREATE INDEX IF NOT EXISTS riasurt_layer_topic_idx ON riasurt_sverdl(layer_topic);

3. Celery task + beat

@celery.task(rate_limit="1/s")
def harvest_riasurt_sverdl_for_mo(mo_bbox: tuple):
    """Harvest 14 layers для bbox одного МО Свердл."""

@celery.task
def harvest_all_riasurt_sverdl():
    """Iter по 5 МО агломерации ЕКБ."""
    for mo in ["Berezovsky", "VerhnyayaPyshma", "Sredneuralsk", "Aramil", "Sysert"]:
        bbox = MO_BBOXES[mo]
        harvest_riasurt_sverdl_for_mo.delay(bbox)

Beat schedule: раз в квартал (зоны меняются редко).

4. analyze_parcel extension

Для cad в МО агломерации (НЕ ЕКБ-city):

if is_in_aglomeration_but_not_ekb(cad):
    response["gate"]["riasurt"] = await get_riasurt_data_for_cad(cad)
    # включает: tier.zone, func.zone, red_lines, szz, szo, flood_zone, krt

Acceptance

  • riasurt_sverdl >500 записей после первого harvest (5 МО × 14 layers ≈ 70 features per MO в среднем)
  • distinct mo_name >= 5
  • distinct layer_topic = 14
  • Test cad в Берёзовском: возвращает тер.зону + СЗЗ overlay
  • Test cad в В.Пышме: возвращает func.zone "Жилая" если в жилом районе

Effort

~1-2 дня (вкл. ETL + integration)

Owner

backend-engineer + database-expert

Dependencies

  • #94 (NSPD client) — этот issue extension
  • МСК-66 SRID 100000 — готов
  • Replaces: scope of #101 (closed wontfix)
  • См. NSPD_API_Map_May12 Update part 7 — полная карта 97 Свердл-layerIds + объяснение почему агломерация работает а ЕКБ-сити нет
  • Cross-ref: #107 (ekburg.ru/isogd — для ЕКБ-сити) — этот issue — для МО агломерации
**Эшелон:** Foundation / multi-city scaling ## Контекст После полного user-driven теста theme=99 (#101 wontfix + [[NSPD_API_Map_May12]] part 7) выяснено: - **РИАСУРТ Свердл (folderId 1224, 91 слой)** покрывает **окраины Свердл**: Берёзовский, Верхняя Пышма, Среднеуральск, Арамиль, Сысерть - НЕ покрывает ЕКБ-city (у ЕКБ собственная ИСОГД — см. #107) - Но **для агломерации ЕКБ** (V.Пышма + Берёзовский — спальные / KRT-зоны для застройщиков) — это foundation Это **multi-city scaling** — Sprint 4 фокус был только на ЕКБ-city, но РИАСУРТ открывает быстрое расширение на ближайшие МО. ## 14 ключевых layerIds для агломерации ЕКБ ### ПЗЗ / Планирование (5) - **845274** Территориальная зона - **846381** Функциональные зоны (Свердл-Генплан) - **844759** Красные линии (полигон) - **844774** Линии отступа от красных линий (полигон) — **новое vs PKK** - **845298** Границы зон планируемого размещения ОКС (ППТ) ### Engineering ZOUIT (4) - **846365** СЗЗ (vs PKK 37579) - **846369** Сан.разрыв инжен.коммуникаций - **845392** ЗСО питьевого водоснабжения - **846373** Водоохранные зоны ### Risk (3) - **845425** Зоны затопления и подтопления (vs PKK 872202/205) - **846378** Зона экстренного оповещения - **844795** Территории риска ЧС техногенного характера ### Opportunity (2) - **844478** КРТ (комплексное развитие территорий) — opportunity - **846379** ОЭЗ ## Что сделать ### 1. Backend client method ```python async def get_riasurt_sverdl_in_bbox(self, bbox_3857: tuple, layers: list[int]) -> dict[int, list[Feature]]: """Bulk WMS GetFeatureInfo для 14 РИАСУРТ-layers в bbox. Returns: {layer_id: [features]} """ ``` ### 2. Schema migration `data/sql/88_riasurt_sverdl.sql` ```sql CREATE TABLE IF NOT EXISTS riasurt_sverdl ( id BIGSERIAL PRIMARY KEY, source_layer_id INT NOT NULL, -- 845274, 846381, etc layer_topic TEXT NOT NULL, -- 'territorial_zone' | 'func_zone' | 'red_lines' | 'szz' | etc mo_name TEXT, -- МО (Берёзовский ГО, В.Пышма ГО, etc) obshnz TEXT, -- для функ.зон / тер.зон description TEXT, raw_props JSONB, geom GEOMETRY(MULTIPOLYGON, 3857), geom_msk66 GEOMETRY(MULTIPOLYGON, 100000) GENERATED ALWAYS AS (ST_Transform(geom, 100000)) STORED, fetched_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS gist_riasurt_geom ON riasurt_sverdl USING GIST(geom); CREATE INDEX IF NOT EXISTS gist_riasurt_geom_msk66 ON riasurt_sverdl USING GIST(geom_msk66); CREATE INDEX IF NOT EXISTS riasurt_layer_topic_idx ON riasurt_sverdl(layer_topic); ``` ### 3. Celery task + beat ```python @celery.task(rate_limit="1/s") def harvest_riasurt_sverdl_for_mo(mo_bbox: tuple): """Harvest 14 layers для bbox одного МО Свердл.""" @celery.task def harvest_all_riasurt_sverdl(): """Iter по 5 МО агломерации ЕКБ.""" for mo in ["Berezovsky", "VerhnyayaPyshma", "Sredneuralsk", "Aramil", "Sysert"]: bbox = MO_BBOXES[mo] harvest_riasurt_sverdl_for_mo.delay(bbox) ``` Beat schedule: раз в квартал (зоны меняются редко). ### 4. analyze_parcel extension Для cad в МО агломерации (НЕ ЕКБ-city): ```python if is_in_aglomeration_but_not_ekb(cad): response["gate"]["riasurt"] = await get_riasurt_data_for_cad(cad) # включает: tier.zone, func.zone, red_lines, szz, szo, flood_zone, krt ``` ## Acceptance - [ ] `riasurt_sverdl` >500 записей после первого harvest (5 МО × 14 layers ≈ 70 features per MO в среднем) - [ ] distinct `mo_name` >= 5 - [ ] distinct `layer_topic` = 14 - [ ] Test cad в Берёзовском: возвращает тер.зону + СЗЗ overlay - [ ] Test cad в В.Пышме: возвращает func.zone "Жилая" если в жилом районе ## Effort ~1-2 дня (вкл. ETL + integration) ## Owner `backend-engineer` + `database-expert` ## Dependencies - #94 (NSPD client) — этот issue extension - МСК-66 SRID 100000 — готов ## Links - Replaces: scope of #101 (closed wontfix) - См. [[NSPD_API_Map_May12]] Update part 7 — полная карта 97 Свердл-layerIds + объяснение почему агломерация работает а ЕКБ-сити нет - Cross-ref: #107 (ekburg.ru/isogd — для ЕКБ-сити) — этот issue — для МО агломерации
Owner

Status update — нет прогресса. РИАСУРТ Свердл 14 layerIds не реализован, riasurt_sverdl таблица отсутствует.

Текущий фокус: ЕКБ-city (#94 PR1-4 risk + opportunity layers, #105 permits, bulk cadastre #168). Multi-city scaling (агломерация — Берёзовский, В.Пышма) пока не started.

Foundation готова: МСК-66 SRID 100000 живёт в data/sql/85_engineering_networks_191fz.sql + app/core/crs.py. После закрытия #94 PR4 можно начать.

Остаётся в backlog priority/normal — issue корректен.

Status update — нет прогресса. РИАСУРТ Свердл 14 layerIds не реализован, `riasurt_sverdl` таблица отсутствует. Текущий фокус: ЕКБ-city (#94 PR1-4 risk + opportunity layers, #105 permits, bulk cadastre #168). Multi-city scaling (агломерация — Берёзовский, В.Пышма) пока не started. Foundation готова: МСК-66 SRID 100000 живёт в `data/sql/85_engineering_networks_191fz.sql` + `app/core/crs.py`. После закрытия #94 PR4 можно начать. Остаётся в backlog priority/normal — issue корректен.
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#108
No description provided.