NSPD theme 99 mega-catalog: region-filter + ETL (4531 слоёв = water/heat/gas/электр/СЗЗ/ГПЗУ/затопление от МО) #101

Closed
opened 2026-05-12 06:55:27 +00:00 by lekss361 · 4 comments
lekss361 commented 2026-05-12 06:55:27 +00:00 (Migrated from github.com)

Эшелон: Data Layer Foundation — Mega Catalog

Контекст / открытие

В НСПД найдена theme_id=99 «Default» с 4531 слоёв — это полный мета-каталог где региональные муниципалитеты России публикуют свои тематические слои по Приказу №10 (см. NSPD_API_Map_May12 Update part 3).

Распределение по релевантным для нас категориям

Категория Кол-во слоёв
Водоснабжение / канализация + ЗСО 115
Теплоснабжение 82
Газоснабжение 19
Электроэнергия / ЛЭП 44
СЗЗ + санитарные разрывы 83
Объекты инженерной защиты 39
ГПЗУ (готовые!) 5
Публичные сервитуты 16
Тер.зоны от разных МО 44
Объекты культурного наследия 196

Проблема: 4531 слой — это все МО РФ. Нужен механизм фильтрации слоёв конкретно для Свердловской области / ЕКБ + system для подгрузки данных.

Что сделать

Phase 1 — Region filter scanner (~2 дня)

Создать механизм фильтрации theme_99 слоёв по bbox:

  1. Получить /api/geoportal/v1/layers-theme-tree?themeId=99 (4531 слой)
  2. Для каждого слоя получить GetCapabilities (включает BoundingBox EPSG:3857):
    GET /api/aeggis/v4/{layerId}/wms?SERVICE=WMS&REQUEST=GetCapabilities
    
  3. Filter: оставить только слои с coverage пересекающим Свердловскую область bbox (≈ (6500000, 7350000)-(6900000, 7800000) в EPSG:3857)
  4. Альтернатива (если GetCapabilities слишком медленный): probe-запросы GetFeatureInfo на 10 случайных точек Свердл, оставить слои которые вернули features
  5. Сохранить filtered set в новую таблицу nspd_theme99_layers_index (layerId, title, category, bbox_3857, has_data_in_sverdl, last_check)

Phase 2 — Унифицированная ETL infrastructure (~3 дня)

# backend/app/services/scrapers/nspd_theme99_client.py
class NSPDTheme99Client:
    async def list_layers_in_region(self, region_bbox: tuple) -> list[LayerMeta]:
        """Cached список слоёв с data в region."""

    async def fetch_layer_features(self, layer_id: int, bbox: tuple) -> GeoJSON:
        """WMS GetFeatureInfo на bbox для конкретного слоя."""

    async def fetch_all_engineering_in_bbox(self, bbox: tuple) -> dict:
        """Bulk: water/heat/gas/electricity/sewage для bbox.
           Внутри итерирует по filtered set из nspd_theme99_layers_index.
        """

Phase 3 — Schema (~1 день)

Объединённые таблицы (с network_type enum):

CREATE TABLE nspd_engineering_networks (
  id BIGSERIAL PRIMARY KEY,
  network_type TEXT CHECK (network_type IN ('water','sewage','heat','gas','electricity')),
  source_layer_id INT,
  source_mo TEXT,                  -- какой МО загрузил
  object_type TEXT,                -- network/point/zone
  is_planned BOOLEAN DEFAULT FALSE, -- planned vs existing
  geom GEOMETRY,
  raw_props JSONB,
  fetched_at TIMESTAMPTZ DEFAULT NOW(),
  UNIQUE(source_layer_id, geom)    -- per-source dedup
);
CREATE INDEX gist_engineering_geom ON nspd_engineering_networks USING GIST(geom);

CREATE TABLE nspd_szz_zones (...);       -- 83 слоя СЗЗ
CREATE TABLE nspd_gpzu (...);             -- 5 слоёв ГПЗУ
CREATE TABLE nspd_public_servitudes (...);
CREATE TABLE nspd_terr_zones_local (...); -- 44 локальных тер.зоны
CREATE TABLE nspd_flood_zones (...);
CREATE TABLE nspd_engineering_protection (...);
CREATE TABLE nspd_emergency_zones (...);  -- зона экстренного оповещения

Phase 4 — Site Finder integration (~2 дня)

analyze_parcel extension в новые секции:

  • engineering.networks — closest каждого типа (water/heat/gas/electricity) + расстояние + planned/existing
  • engineering.szz_intersect — попадание в СЗЗ
  • engineering.gpzu — если есть готовый ГПЗУ для участка → парсим параметры (этажность, FAR, парковка)
  • engineering.public_servitudes — попадание в сервитут
  • engineering.flood — зона затопления / подтопления
  • engineering.emergency_zone — зона ЧС

Phase 5 — Beat schedule (~0.5 дня)

  • tasks.nspd_theme99_sync.weekly_refresh — обновлять index слоёв (новые МО могут добавиться)
  • tasks.nspd_theme99_sync.monthly_full_bbox_sync — full pull для Свердл

Acceptance

  • nspd_theme99_layers_index >100 слоёв с coverage в Свердл
  • nspd_engineering_networks >500 объектов после первого sync
  • analyze_parcel для test cad показывает water/heat/gas сети рядом
  • Если ГПЗУ найден — параметры в response
  • WMS rate limit respected (1-2 req/s)

Owner

backend-engineer (client + ETL + integration) + database-expert (schemas + indexes)

Effort

~7-8 дней (полный цикл всех Phase 1-5)

Dependencies

  • #94 (NSPD client foundation)
  • Реализация может быть постепенной — сначала только Engineering Phase 1+2+3 для I3 #44, остальное (СЗЗ/ГПЗУ/etc) — этапами

Risks / open

  • 4531 слой → много GetCapabilities запросов для Phase 1. Может занять часы. Митигация: cache + параллельные запросы (rate-limited)
  • Качество данных от региональных МО непредсказуемое. Некоторые слои могут быть пустыми или с устаревшими данными. Митигация: confidence score per источник
  • Names коллизий — у разных МО одинаковые categoryId но разные layerId. Нужен per-source dedup
  • WAF block risk при массовом scan — нужен прокси или request distribution

Why critical foundation

Это закрывает разом:

  • I3 #44 (engineering networks) — было OSM-only, теперь полный набор муниципальных сетей
  • G3 #30 (часть ЗОУИТ — СЗЗ 83 слоя)
  • G4 #31 (часть FAR — через готовые ГПЗУ 5 слоёв)
  • Новое: зоны затопления / экстренного оповещения / публичные сервитуты / инженерная защита

И открывает доступ к сотням тематических слоёв для будущих фич.

  • Research: NSPD_API_Map_May12 (Update part 3)
  • Foundation: #94 NSPD client
  • Cross-ref: #44 I3 (комментарий обновлён), #30 G3, #31 G4
**Эшелон:** Data Layer Foundation — Mega Catalog ## Контекст / открытие В НСПД найдена **theme_id=99 «Default»** с **4531 слоёв** — это **полный мета-каталог** где региональные муниципалитеты России публикуют свои тематические слои по Приказу №10 (см. [[NSPD_API_Map_May12]] Update part 3). ### Распределение по релевантным для нас категориям | Категория | Кол-во слоёв | |---|---| | Водоснабжение / канализация + ЗСО | **115** | | Теплоснабжение | **82** | | Газоснабжение | **19** | | Электроэнергия / ЛЭП | **44** | | СЗЗ + санитарные разрывы | **83** | | Объекты инженерной защиты | **39** | | ГПЗУ (готовые!) | **5** | | Публичные сервитуты | **16** | | Тер.зоны от разных МО | **44** | | Объекты культурного наследия | **196** | **Проблема:** 4531 слой — это все МО РФ. **Нужен механизм фильтрации слоёв конкретно для Свердловской области / ЕКБ** + system для подгрузки данных. ## Что сделать ### Phase 1 — Region filter scanner (~2 дня) Создать механизм фильтрации `theme_99` слоёв по bbox: 1. Получить `/api/geoportal/v1/layers-theme-tree?themeId=99` (4531 слой) 2. Для каждого слоя получить `GetCapabilities` (включает BoundingBox EPSG:3857): ``` GET /api/aeggis/v4/{layerId}/wms?SERVICE=WMS&REQUEST=GetCapabilities ``` 3. Filter: оставить только слои с coverage пересекающим **Свердловскую область** bbox (≈ (6500000, 7350000)-(6900000, 7800000) в EPSG:3857) 4. Альтернатива (если GetCapabilities слишком медленный): probe-запросы GetFeatureInfo на 10 случайных точек Свердл, оставить слои которые вернули features 5. Сохранить filtered set в новую таблицу `nspd_theme99_layers_index` (layerId, title, category, bbox_3857, has_data_in_sverdl, last_check) ### Phase 2 — Унифицированная ETL infrastructure (~3 дня) ```python # backend/app/services/scrapers/nspd_theme99_client.py class NSPDTheme99Client: async def list_layers_in_region(self, region_bbox: tuple) -> list[LayerMeta]: """Cached список слоёв с data в region.""" async def fetch_layer_features(self, layer_id: int, bbox: tuple) -> GeoJSON: """WMS GetFeatureInfo на bbox для конкретного слоя.""" async def fetch_all_engineering_in_bbox(self, bbox: tuple) -> dict: """Bulk: water/heat/gas/electricity/sewage для bbox. Внутри итерирует по filtered set из nspd_theme99_layers_index. """ ``` ### Phase 3 — Schema (~1 день) Объединённые таблицы (с network_type enum): ```sql CREATE TABLE nspd_engineering_networks ( id BIGSERIAL PRIMARY KEY, network_type TEXT CHECK (network_type IN ('water','sewage','heat','gas','electricity')), source_layer_id INT, source_mo TEXT, -- какой МО загрузил object_type TEXT, -- network/point/zone is_planned BOOLEAN DEFAULT FALSE, -- planned vs existing geom GEOMETRY, raw_props JSONB, fetched_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(source_layer_id, geom) -- per-source dedup ); CREATE INDEX gist_engineering_geom ON nspd_engineering_networks USING GIST(geom); CREATE TABLE nspd_szz_zones (...); -- 83 слоя СЗЗ CREATE TABLE nspd_gpzu (...); -- 5 слоёв ГПЗУ CREATE TABLE nspd_public_servitudes (...); CREATE TABLE nspd_terr_zones_local (...); -- 44 локальных тер.зоны CREATE TABLE nspd_flood_zones (...); CREATE TABLE nspd_engineering_protection (...); CREATE TABLE nspd_emergency_zones (...); -- зона экстренного оповещения ``` ### Phase 4 — Site Finder integration (~2 дня) `analyze_parcel` extension в новые секции: - `engineering.networks` — closest каждого типа (water/heat/gas/electricity) + расстояние + planned/existing - `engineering.szz_intersect` — попадание в СЗЗ - `engineering.gpzu` — если есть готовый ГПЗУ для участка → парсим параметры (этажность, FAR, парковка) - `engineering.public_servitudes` — попадание в сервитут - `engineering.flood` — зона затопления / подтопления - `engineering.emergency_zone` — зона ЧС ### Phase 5 — Beat schedule (~0.5 дня) - `tasks.nspd_theme99_sync.weekly_refresh` — обновлять index слоёв (новые МО могут добавиться) - `tasks.nspd_theme99_sync.monthly_full_bbox_sync` — full pull для Свердл ## Acceptance - [ ] `nspd_theme99_layers_index` >100 слоёв с coverage в Свердл - [ ] `nspd_engineering_networks` >500 объектов после первого sync - [ ] `analyze_parcel` для test cad показывает water/heat/gas сети рядом - [ ] Если ГПЗУ найден — параметры в response - [ ] WMS rate limit respected (1-2 req/s) ## Owner `backend-engineer` (client + ETL + integration) + `database-expert` (schemas + indexes) ## Effort ~7-8 дней (полный цикл всех Phase 1-5) ## Dependencies - **#94** (NSPD client foundation) - Реализация может быть постепенной — сначала только Engineering Phase 1+2+3 для I3 #44, остальное (СЗЗ/ГПЗУ/etc) — этапами ## Risks / open - **4531 слой → много GetCapabilities запросов** для Phase 1. Может занять часы. Митигация: cache + параллельные запросы (rate-limited) - **Качество данных от региональных МО непредсказуемое.** Некоторые слои могут быть пустыми или с устаревшими данными. Митигация: confidence score per источник - **Names коллизий** — у разных МО одинаковые `categoryId` но разные `layerId`. Нужен per-source dedup - WAF block risk при массовом scan — нужен прокси или request distribution ## Why critical foundation Это **закрывает разом**: - ✅ I3 #44 (engineering networks) — было OSM-only, теперь полный набор муниципальных сетей - ✅ G3 #30 (часть ЗОУИТ — СЗЗ 83 слоя) - ✅ G4 #31 (часть FAR — через готовые ГПЗУ 5 слоёв) - ✅ Новое: зоны затопления / экстренного оповещения / публичные сервитуты / инженерная защита И открывает доступ к **сотням тематических слоёв** для будущих фич. ## Links - Research: [[NSPD_API_Map_May12]] (Update part 3) - Foundation: #94 NSPD client - Cross-ref: #44 I3 (комментарий обновлён), #30 G3, #31 G4
lekss361 commented 2026-05-12 08:27:26 +00:00 (Migrated from github.com)

Deep-dive результаты Engineering networks для Свердл/ЕКБ

После render-probe-scan по 6 районам ЕКБ + grid-walk GetFeatureInfo — реальная картина:

Что РАБОТАЕТ

  • WMS render PNG возвращает signal (2512 байт) для 5 из 6 районов ЕКБ на слоях:
    • 844679 Сети водоснабжения
    • 844704 Сети теплоснабжения
    • 845529 ЛЭП
    • 847609 Объекты водоснабжения
  • Покрытие: Академический / Кольцово / Уралмаш / Химмаш / Верх-Исетский
  • Центр ЕКБ (Билимбаевская) — пусто (либо узкий gap, либо не загружено владельцем)

Что НЕ работает

  • GetFeatureInfo на bulk feature export — 0 хитов из 100 grid-точек в Уралмаш-промзоне (даже там где render показал signal)
  • Гипотеза: physic-scope ESIA не имеет прав на bulk feature data, нужен juridic / cadastral_engineer scope

Перепланирование Phase 1

Вместо massive bbox-filter scan для region-фильтра (изначально 4531 слой → невозможно):

Сценарий A (рекомендуемый, MVP): WMS render-overlay на Leaflet карте Site Finder.

  • ~0.5 дня
  • Devel видит ВСЁ что НСПД показывает: водопровод, теплосеть, ЛЭП поверх нашей карты
  • Не нужен ETL — просто tile-layer URL

Сценарий B (после B2B): Скрипт sub-issue B2B (#52) — узнать у Макса про juridic-scope.

Сценарий C (workaround): Image-tile parsing — скачиваем WMS PNG, парсим pixel colors → approximate geometry. ~3-4 дня. Не точно.

Сценарий D (альтернатива): ФГИС ТП напрямую (fgistp.economy.gov.ru) HTML-парсинг + Региональный геопортал Свердл.

Подтверждённые layerIds для render-overlay (сценарий A)

См. NSPD_API_Map_May12 Update part 4 — полная таблица.

Effort rebalance

  • Phase 1 (~7 дней) → Сценарий A: 0.5 дня + Сценарий C опционально: +3 дня
  • Total: ~3.5 дня вместо 7-8

Action items

  1. Сценарий A — реализовать WMS-overlay в Site Finder (новый sub-issue или дополнить #97)
  2. Сценарий B — passed в #52 B2B-реестр Макса
  3. ⏸ Сценарий C — отложить пока А не покажет недостатки
## Deep-dive результаты Engineering networks для Свердл/ЕКБ После render-probe-scan по 6 районам ЕКБ + grid-walk GetFeatureInfo — реальная картина: ### ✅ Что РАБОТАЕТ - **WMS render PNG** возвращает signal (2512 байт) для **5 из 6 районов ЕКБ** на слоях: - 844679 Сети водоснабжения - 844704 Сети теплоснабжения - 845529 ЛЭП - 847609 Объекты водоснабжения - Покрытие: **Академический / Кольцово / Уралмаш / Химмаш / Верх-Исетский** ✅ - **Центр ЕКБ (Билимбаевская)** — пусто ❌ (либо узкий gap, либо не загружено владельцем) ### ❌ Что НЕ работает - **GetFeatureInfo** на bulk feature export — **0 хитов из 100 grid-точек** в Уралмаш-промзоне (даже там где render показал signal) - Гипотеза: physic-scope ESIA не имеет прав на bulk feature data, нужен juridic / cadastral_engineer scope ### Перепланирование Phase 1 Вместо **massive bbox-filter scan** для region-фильтра (изначально 4531 слой → невозможно): **Сценарий A (рекомендуемый, MVP):** WMS render-overlay на Leaflet карте Site Finder. - ~0.5 дня - Devel видит ВСЁ что НСПД показывает: водопровод, теплосеть, ЛЭП поверх нашей карты - Не нужен ETL — просто tile-layer URL **Сценарий B (после B2B):** Скрипт sub-issue B2B (#52) — узнать у Макса про juridic-scope. **Сценарий C (workaround):** Image-tile parsing — скачиваем WMS PNG, парсим pixel colors → approximate geometry. ~3-4 дня. Не точно. **Сценарий D (альтернатива):** ФГИС ТП напрямую (fgistp.economy.gov.ru) HTML-парсинг + Региональный геопортал Свердл. ### Подтверждённые layerIds для render-overlay (сценарий A) См. [[NSPD_API_Map_May12]] Update part 4 — полная таблица. ### Effort rebalance - Phase 1 (~7 дней) → **Сценарий A: 0.5 дня** + **Сценарий C опционально: +3 дня** - Total: **~3.5 дня** вместо 7-8 ### Action items 1. ✅ Сценарий A — реализовать WMS-overlay в Site Finder (новый sub-issue или дополнить #97) 2. ❓ Сценарий B — passed в #52 B2B-реестр Макса 3. ⏸ Сценарий C — отложить пока А не покажет недостатки
lekss361 commented 2026-05-12 11:54:25 +00:00 (Migrated from github.com)

Update 2026-05-12 — Кандидат на закрытие после breakthrough в #94

После user-driven теста (см. NSPD_API_Map_May12 Update part 6) подтверждено: основная инженерная сеть от региональных МО уже доступна через стандартные слои PKK theme=1 через REST search-by-quarter (см. #94).

Что было планом #101

Phase 1-5 (~7-8 дней) для сканирования и фильтрации 4531 слоёв theme=99 (региональные МО):

  • Phase 1: Region filter scanner (GetCapabilities × 4531)
  • Phase 2: Унифицированный ETL client
  • Phase 3: Schema (объединённые таблицы под network_type)
  • Phase 4: Site Finder integration
  • Phase 5: Beat schedule

Что покрывает #94 (без theme 99)

Категория layerId Через #94 search-by-quarter
Сооружения (трубы, ТП, ЦТП, ЛЭП-опоры, насосные) 36370 полная геометрия + атрибуция
Сооружения ЕГРН (water/heat/gas/electricity) 36328 полная
Охранные зоны инженерных коммуникаций 37578 sc=17
Водоохранные зоны / СЗО водоснабжения 37580
СЗЗ предприятий 37579
ЗУ / Здания / Помещения / Машино-места 36368/36369/38489/38490

Что НЕ покрывается #94 (всё ещё уникально theme=99)

Категория Кол-во в theme=99 Уникальная ценность
ГПЗУ готовые (мелкие МО) 5 Готовые параметры застройки (этажность/FAR/парковка) — если есть для test участка
Локальные тер.зоны МО (отдельные от 875838) 44 Дублирует 875838 в большинстве случаев — возможно ничего нового
Карты ОКН per-MО 196 Дополнение к 875840 (Территории ОКН в PKK)
Зоны затопления per-МО часть из 186 Дополнение к 872202/205 (Подтопление/Затопление в PKK)
СЗЗ per-МО 83 Дополнение к 37579 — возможно более актуальные

Решение

⏸ Pause до завершения #94 + первого harvest по 3-5 жилым кварталам ЕКБ.

После этого решаем по data quality:

  • Если 36328 + 36370 покрывают инженерку Свердл с приемлемой полнотой (>80% objects relative to OSM cross-check) → close #101 as not-needed
  • ⚠️ Если есть значимый gap (>20% missing engineering objects) → revisit с focused scope только на water/heat/gas/electricity слои theme=99 для Свердл (filter by region), без полного 4531 scan
  • 🆕 Optional split: ГПЗУ-only scope как отдельное issue (5 слоёв = маленький effort), отдельно от инженерки

Acceptance для решения

  • #94 deployed
  • Harvest на 3-5 жилых кварталов ЕКБ
  • Cross-check nspd_constructions count vs OSM osm_utilities_ekb для тех же bbox
  • Если coverage >= 80% → close #101
  • Если coverage < 80% → revise scope на focused theme=99 водоснабжение/тепло/газ/электр для Свердл (filter MO=Свердл)

Backlog Sprint 4 impact

  • Issue остаётся открытым до проверки coverage
  • Effort revision на potential reopen: 2-3 дня (focused scope для Свердл МО), а не 7-8

См. NSPD_API_Map_May12 Update part 6 + Sprint4_SiteFinder_v4 Update part 4.

## Update 2026-05-12 — Кандидат на закрытие после breakthrough в #94 После user-driven теста (см. [[NSPD_API_Map_May12]] Update part 6) подтверждено: **основная инженерная сеть от региональных МО уже доступна через стандартные слои PKK theme=1** через REST search-by-quarter (см. #94). ### Что было планом #101 Phase 1-5 (~7-8 дней) для сканирования и фильтрации 4531 слоёв theme=99 (региональные МО): - Phase 1: Region filter scanner (GetCapabilities × 4531) - Phase 2: Унифицированный ETL client - Phase 3: Schema (объединённые таблицы под network_type) - Phase 4: Site Finder integration - Phase 5: Beat schedule ### Что покрывает #94 (без theme 99) | Категория | layerId | Через #94 search-by-quarter | |---|---|---| | Сооружения (трубы, ТП, ЦТП, ЛЭП-опоры, насосные) | 36370 | ✅ полная геометрия + атрибуция | | Сооружения ЕГРН (water/heat/gas/electricity) | 36328 | ✅ полная | | Охранные зоны инженерных коммуникаций | 37578 sc=17 | ✅ | | Водоохранные зоны / СЗО водоснабжения | 37580 | ✅ | | СЗЗ предприятий | 37579 | ✅ | | ЗУ / Здания / Помещения / Машино-места | 36368/36369/38489/38490 | ✅ | ### Что НЕ покрывается #94 (всё ещё уникально theme=99) | Категория | Кол-во в theme=99 | Уникальная ценность | |---|---|---| | ГПЗУ готовые (мелкие МО) | 5 | Готовые параметры застройки (этажность/FAR/парковка) — если есть для test участка | | Локальные тер.зоны МО (отдельные от 875838) | 44 | Дублирует 875838 в большинстве случаев — возможно ничего нового | | Карты ОКН per-MО | 196 | Дополнение к 875840 (Территории ОКН в PKK) | | Зоны затопления per-МО | часть из 186 | Дополнение к 872202/205 (Подтопление/Затопление в PKK) | | СЗЗ per-МО | 83 | Дополнение к 37579 — возможно более актуальные | ### Решение **⏸ Pause до завершения #94 + первого harvest по 3-5 жилым кварталам ЕКБ.** После этого решаем по data quality: - ✅ Если 36328 + 36370 покрывают инженерку Свердл с приемлемой полнотой (>80% objects relative to OSM cross-check) → **close #101 as not-needed** - ⚠️ Если есть значимый gap (>20% missing engineering objects) → **revisit с focused scope** только на water/heat/gas/electricity слои theme=99 для Свердл (filter by region), без полного 4531 scan - 🆕 **Optional split:** ГПЗУ-only scope как отдельное issue (5 слоёв = маленький effort), отдельно от инженерки ### Acceptance для решения - [ ] #94 deployed - [ ] Harvest на 3-5 жилых кварталов ЕКБ - [ ] Cross-check `nspd_constructions` count vs OSM `osm_utilities_ekb` для тех же bbox - [ ] Если coverage >= 80% → close #101 - [ ] Если coverage < 80% → revise scope на focused theme=99 водоснабжение/тепло/газ/электр для Свердл (filter MO=Свердл) ### Backlog Sprint 4 impact - Issue остаётся **открытым** до проверки coverage - Effort revision на potential reopen: **2-3 дня** (focused scope для Свердл МО), а не 7-8 См. [[NSPD_API_Map_May12]] Update part 6 + [[Sprint4_SiteFinder_v4]] Update part 4.
lekss361 commented 2026-05-12 12:10:20 +00:00 (Migrated from github.com)

Update 2026-05-12 (final) — Close as wontfix

После полного user-driven теста через debug Chrome (активация Свердл-слоёв + GetFeatureInfo grid 4 точки по ЕКБ: Центр/Уралмаш/Эльмаш/Химмаш) выяснилось: theme=99 практически НЕ работает для ЕКБ.

Hit-rate федеральных слоёв на ЕКБ (4 ключевые точки)

LayerId Слой Источник Hits Вердикт
846615 Функциональные зоны ФГИС ТП Минэк 18 РАБОТАЕТ
844679 Сети водоснабжения ФГИС ТП Минэк 0
844704 Сети теплоснабжения ФГИС ТП Минэк 0
844696 Распред. газопроводы ФГИС ТП Минэк 0
845529 ЛЭП ФГИС ТП Минэк 0
869813 Тер.зоны (federal) ФГИС ТП Минэк 500 error ⚠️ auth
868997 Дома ГИС ЖКХ 500 error ⚠️ ESIA
844462 ГПЗУ Минстрой 0
844505 Дела о ЗУ Минстрой 0
37600 Земля для стройки Прочие 0

Структура theme=99 для Свердл

Folder Слоёв Hit-rate в ЕКБ-city
РИАСУРТ Свердл (1224) 91 0% в ЕКБ-сити (покрывает только окраины: Берёзовский, В.Пышма, Среднеуральск, Арамиль)
РГИС Свердл (1225) 6 0% (реклама/МФЦ/медицина от МО, не ЕКБ)
ФГИС ТП Минэк 133 8% (только 846615 функ.зоны)
Минстрой Стройкомплекс.РФ 7 0% (ЕКБ не отдаёт)
ГИС ЖКХ 1 500 (auth)

Корневая причина

ЕКБ как город-миллионник имеет собственную муниципальную ИСОГД (ekburg.ru/isogd через Минстрой Свердл minstroy.midural.ru) и НЕ выгружает данные в:

  • ФГИС ТП Минэкономразвития
  • Стройкомплекс.РФ Минстроя
  • ГИС ЖКХ (требует ESIA для просмотра МКД)

РИАСУРТ Свердл агрегирует данные только от малых МО Свердл (Берёзовский, В.Пышма, Среднеуральск, Арамиль) — но не от ЕКБ-city.

Что РЕАЛЬНО работает для ЕКБ через theme=99

846615 ФГИС ТП Функциональные зоны — federal Генплан с полями area, obshnz (общее назначение Жилая/Произв/ОД/Рекреация), obshoz, status. 18 hits на 4 точках = 100% покрытие.

Решение

Close #101 как wontfix с rationale:

  • Из 4531 слоёв theme=99 для ЕКБ работает 1 (846615), а это 0.02% выхлоп
  • Effort 7-8 дней на full-scan + ETL несоразмерен
  • ЕКБ не интегрирован в federal-каталоги
  • РИАСУРТ покрывает не нужный нам scope (окраины Свердл)

Заменяющие issues (создать после close)

Issue A: «ФГИС ТП Функ.зоны (846615) federal Генплан» (~1 день)

  • Activate layer 846615 bbox-tiling для ЕКБ
  • WMS GetFeatureInfo → парс → DB
  • Сохранить в nspd_functional_zones (см. proposed schema ниже)
  • Cross-check с локальным Генпланом ekburg.ru/isogd

Issue B: «ekburg.ru/isogd direct scraper» (~3-4 дня) — уже в OpenData_Sources_Sverdl_May12 Tier 2

  • HTML/PDF scraper для РНС/ППТ/ГПЗУ ЕКБ
  • Это single point of truth для ЕКБ
  • Замещает functionality которой нет в federal theme=99

Issue C: «РИАСУРТ Свердл для агломерации ЕКБ» (~1 день, optional, для multi-city scaling)

  • Активировать 14 ключевых Свердл-layerIds (карта в NSPD_API_Map_May12 part 7)
  • Сохранить для окрестностей ЕКБ (Берёзовский / В.Пышма / Среднеуральск / Арамиль) — foundation для будущего expansion Site Finder на агломерацию

Schema для Issue A

CREATE TABLE nspd_functional_zones (
  id BIGSERIAL PRIMARY KEY,
  source_layer_id INT NOT NULL,         -- 846615 (federal) / 846381 (Свердл)
  source_origin TEXT,                    -- 'fgis_tp_minec' | 'riasurt_sverdl'
  obshnz TEXT,                           -- 'Жилая' | 'Производственная' | 'ОД' | etc
  obshoz TEXT,
  area NUMERIC,
  status TEXT,
  raw_props JSONB,
  geom GEOMETRY(POLYGON, 3857),
  geom_msk66 GEOMETRY(POLYGON, 100000) GENERATED ALWAYS AS (ST_Transform(geom, 100000)) STORED,
  fetched_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX gist_func_zones_geom ON nspd_functional_zones USING GIST(geom);
CREATE INDEX gist_func_zones_msk66 ON nspd_functional_zones USING GIST(geom_msk66);
CREATE INDEX func_zones_obshnz_idx ON nspd_functional_zones(obshnz);

См. NSPD_API_Map_May12 Update part 7 — полная карта 97 Свердл-layerIds + причина «выпадения» ЕКБ из federal.

## Update 2026-05-12 (final) — Close as wontfix После полного user-driven теста через debug Chrome (активация Свердл-слоёв + GetFeatureInfo grid 4 точки по ЕКБ: Центр/Уралмаш/Эльмаш/Химмаш) выяснилось: **theme=99 практически НЕ работает для ЕКБ**. ### Hit-rate федеральных слоёв на ЕКБ (4 ключевые точки) | LayerId | Слой | Источник | Hits | Вердикт | |---:|---|---|---:|---| | **846615** | **Функциональные зоны** | **ФГИС ТП Минэк** | **18** | ✅ РАБОТАЕТ | | 844679 | Сети водоснабжения | ФГИС ТП Минэк | 0 | ❌ | | 844704 | Сети теплоснабжения | ФГИС ТП Минэк | 0 | ❌ | | 844696 | Распред. газопроводы | ФГИС ТП Минэк | 0 | ❌ | | 845529 | ЛЭП | ФГИС ТП Минэк | 0 | ❌ | | 869813 | Тер.зоны (federal) | ФГИС ТП Минэк | 500 error | ⚠️ auth | | 868997 | Дома | ГИС ЖКХ | 500 error | ⚠️ ESIA | | 844462 | ГПЗУ | Минстрой | 0 | ❌ | | 844505 | Дела о ЗУ | Минстрой | 0 | ❌ | | 37600 | Земля для стройки | Прочие | 0 | ❌ | ### Структура theme=99 для Свердл | Folder | Слоёв | Hit-rate в ЕКБ-city | |---|---:|---:| | РИАСУРТ Свердл (1224) | 91 | **0%** в ЕКБ-сити (покрывает только окраины: Берёзовский, В.Пышма, Среднеуральск, Арамиль) | | РГИС Свердл (1225) | 6 | 0% (реклама/МФЦ/медицина от МО, не ЕКБ) | | ФГИС ТП Минэк | 133 | **8%** (только 846615 функ.зоны) | | Минстрой Стройкомплекс.РФ | 7 | 0% (ЕКБ не отдаёт) | | ГИС ЖКХ | 1 | 500 (auth) | ### Корневая причина **ЕКБ как город-миллионник имеет собственную муниципальную ИСОГД** (ekburg.ru/isogd через Минстрой Свердл minstroy.midural.ru) и **НЕ выгружает данные** в: - ФГИС ТП Минэкономразвития - Стройкомплекс.РФ Минстроя - ГИС ЖКХ (требует ESIA для просмотра МКД) **РИАСУРТ Свердл агрегирует данные только от малых МО** Свердл (Берёзовский, В.Пышма, Среднеуральск, Арамиль) — но не от ЕКБ-city. ### Что РЕАЛЬНО работает для ЕКБ через theme=99 ✅ **846615 ФГИС ТП Функциональные зоны** — federal Генплан с полями `area`, `obshnz` (общее назначение Жилая/Произв/ОД/Рекреация), `obshoz`, `status`. 18 hits на 4 точках = 100% покрытие. ### Решение **Close `#101` как `wontfix`** с rationale: - Из 4531 слоёв theme=99 для ЕКБ работает 1 (846615), а это 0.02% выхлоп - Effort 7-8 дней на full-scan + ETL несоразмерен - ЕКБ не интегрирован в federal-каталоги - РИАСУРТ покрывает не нужный нам scope (окраины Свердл) ### Заменяющие issues (создать после close) **Issue A: «ФГИС ТП Функ.зоны (846615) federal Генплан»** (~1 день) - Activate layer 846615 bbox-tiling для ЕКБ - WMS GetFeatureInfo → парс → DB - Сохранить в `nspd_functional_zones` (см. proposed schema ниже) - Cross-check с локальным Генпланом ekburg.ru/isogd **Issue B: «ekburg.ru/isogd direct scraper»** (~3-4 дня) — *уже в [[OpenData_Sources_Sverdl_May12]] Tier 2* - HTML/PDF scraper для РНС/ППТ/ГПЗУ ЕКБ - Это single point of truth для ЕКБ - Замещает functionality которой нет в federal theme=99 **Issue C: «РИАСУРТ Свердл для агломерации ЕКБ»** (~1 день, optional, для multi-city scaling) - Активировать 14 ключевых Свердл-layerIds (карта в [[NSPD_API_Map_May12]] part 7) - Сохранить для окрестностей ЕКБ (Берёзовский / В.Пышма / Среднеуральск / Арамиль) — foundation для будущего expansion Site Finder на агломерацию ### Schema для Issue A ```sql CREATE TABLE nspd_functional_zones ( id BIGSERIAL PRIMARY KEY, source_layer_id INT NOT NULL, -- 846615 (federal) / 846381 (Свердл) source_origin TEXT, -- 'fgis_tp_minec' | 'riasurt_sverdl' obshnz TEXT, -- 'Жилая' | 'Производственная' | 'ОД' | etc obshoz TEXT, area NUMERIC, status TEXT, raw_props JSONB, geom GEOMETRY(POLYGON, 3857), geom_msk66 GEOMETRY(POLYGON, 100000) GENERATED ALWAYS AS (ST_Transform(geom, 100000)) STORED, fetched_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX gist_func_zones_geom ON nspd_functional_zones USING GIST(geom); CREATE INDEX gist_func_zones_msk66 ON nspd_functional_zones USING GIST(geom_msk66); CREATE INDEX func_zones_obshnz_idx ON nspd_functional_zones(obshnz); ``` См. [[NSPD_API_Map_May12]] Update part 7 — полная карта 97 Свердл-layerIds + причина «выпадения» ЕКБ из federal.
lekss361 commented 2026-05-12 12:10:29 +00:00 (Migrated from github.com)

Closing as wontfix per analysis above. Replaced by 3 focused issues (846615 federal, ekburg.ru/isogd scraper, РИАСУРТ Свердл для агломерации). См. финальный комментарий выше + NSPD_API_Map_May12 Update part 7.

Closing as wontfix per analysis above. Replaced by 3 focused issues (846615 federal, ekburg.ru/isogd scraper, РИАСУРТ Свердл для агломерации). См. финальный комментарий выше + [[NSPD_API_Map_May12]] Update part 7.
Sign in to join this conversation.
No project
No assignees
1 participant
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#101
No description provided.