gendesign/data/sql/142_pat_subzones.sql
bot-backend 9736192359
All checks were successful
Deploy / changes (push) Successful in 5s
Deploy / build-backend (push) Successful in 1m25s
Deploy / build-frontend (push) Has been skipped
Deploy / build-worker (push) Successful in 2m26s
Deploy / deploy (push) Successful in 1m11s
feat(sf): подзоны ПАТ Кольцово → pat_subzones (#1150)
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-06-07 14:43:07 +00:00

60 lines
3.5 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 142_pat_subzones.sql
-- #1065 / #1067 (Site Finder v2 / GG-форсайт) — подзоны приаэродромных территорий (ПАТ).
-- Первый аэродром: Кольцово (Приказ Росавиации № 367-П от 02.06.2023, ред. 804-П от 27.10.2025).
--
-- Геометрия строится Celery-воркером pat_subzones_load из извлечённых координат МСК-66
-- (файл data/pat/koltsovo_367p_subzones.json) с репроекцией → WGS84 (EPSG:4326).
--
-- Поддерживает несколько аэродромов (поле aerodrome), subzone_no=0 — общий контур.
--
-- Deploy: auto-applied deploy.yml через _schema_migrations (ровно один раз по NN=142).
-- Idempotent (CREATE TABLE/INDEX IF NOT EXISTS + guarded DO-блоки).
-- Данные загружаются отдельно Celery-воркером (tasks.pat_subzones_load.load_koltsovo_pat).
BEGIN;
-- ── 1. Таблица pat_subzones ───────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS pat_subzones (
id BIGSERIAL PRIMARY KEY,
aerodrome TEXT NOT NULL, -- 'Екатеринбург (Кольцово)' и т.д.
subzone_no INTEGER NOT NULL, -- 1..6; 0 = aggregate_outline
name TEXT, -- 'Первая подзона' и т.д.
restriction TEXT, -- текст ограничения из приказа
geom geometry(MultiPolygon, 4326) NOT NULL,
source TEXT, -- URL/реквизит НПА
fetched_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
COMMENT ON TABLE pat_subzones IS
'Подзоны приаэродромных территорий (ПАТ), EPSG:4326 (#1065/#1067). '
'Источник: Приказы Росавиации. Первый аэродром: Кольцово (367-П/804-П). '
'Геометрия загружается воркером tasks.pat_subzones_load.load_koltsovo_pat.';
COMMENT ON COLUMN pat_subzones.aerodrome IS
'Наименование аэродрома из НПА, напр. «Екатеринбург (Кольцово)».';
COMMENT ON COLUMN pat_subzones.subzone_no IS
'Номер подзоны 1..6 по НБНРД. 0 — aggregate_outline (общий контур ПАТ).';
COMMENT ON COLUMN pat_subzones.geom IS
'MultiPolygon WGS84. Внутренние границы секторов стали дырками Polygon.';
-- ── 2. UNIQUE (aerodrome, subzone_no) — ключ для UPSERT ──────────────────────
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint WHERE conname = 'uq_pat_subzones_aerodrome_no'
) THEN
ALTER TABLE pat_subzones
ADD CONSTRAINT uq_pat_subzones_aerodrome_no UNIQUE (aerodrome, subzone_no);
END IF;
END
$$;
-- ── 3. GIST-индекс по геометрии (ST_Intersects / parcel-lookup) ──────────────
CREATE INDEX IF NOT EXISTS idx_pat_subzones_geom
ON pat_subzones USING GIST (geom);
-- ── 4. Индекс по аэродрому (фильтрация per-aerodrome) ────────────────────────
CREATE INDEX IF NOT EXISTS idx_pat_subzones_aerodrome
ON pat_subzones (aerodrome);
COMMIT;