gendesign/data/sql/142_pat_subzones.sql
bot-backend 8803d41c29
All checks were successful
CI / changes (push) Successful in 6s
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (push) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m19s
CI / backend-tests (pull_request) Successful in 6m17s
feat(sf): подзоны ПАТ Кольцово из приказа 367-П → pat_subzones (#1065)
2026-06-07 17:38:23 +03: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;