gendesign/data/sql/57_kn_objects_district.sql
lekss361 17ad0e18f5 feat(geo): ЖК → district mapping через PostGIS-полигоны OSM (Limit_District_Geometry closed)
- 56_fetch_ekb_districts.py: Overpass query (admin_level=9 в bbox ЕКБ),
  shapely-ассемблинг рваных OSM-веев в MultiPolygon, кэш в data/raw/.
- 56_schema_ekb_districts_geom.sql: CREATE TABLE с GIST.
- 57_kn_objects_district.sql: ALTER + backfill UPDATE через ST_Contains.
  3032 ЖК Свердл проставили district_name (208 в Академическом, 158 в Чкаловском,
  и т.д.), 454 за bbox ЕКБ остались NULL.
- domrf_kn.py: _backfill_district_names() после Phase A — каждый sweep
  автоматически проставляет district_name свежезаписанным ЖК.
- analytics_queries.py: 4 места addr ILIKE → district_name = :dn
  (_velocity_baseline, _elasticity_coef, _active_competitors_count, comparable).
- analytics_queries.py: graceful obj_class-degrade — если в районе все
  obj_class=NULL (kn-API quirk), фильтр по target_class опускается на уровне
  geo-запросов с warning. class_multiplier на ценах продолжает работать.

Smoke (Академический, Comfort, 50K м²): velocity_source=sale_graph (104 ЖК /
1872 точек), competitors=208 в районе, headline «3400 млн ₽ · 112 мес ·
ликвидность 21/100», 5 comparable ЖК района — все реалистичные.
2026-04-29 08:03:38 +03:00

21 lines
1,012 B
SQL
Raw Permalink 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.

-- Привязка ЖК к району Екатеринбурга через PostGIS spatial-join.
-- Источник полигонов: ekb_districts_geom (см. 56_*).
-- Idempotent.
ALTER TABLE domrf_kn_objects
ADD COLUMN IF NOT EXISTS district_name TEXT;
CREATE INDEX IF NOT EXISTS idx_kn_objects_district
ON domrf_kn_objects (district_name)
WHERE district_name IS NOT NULL;
-- Backfill: для всех ЖК Свердл (region_cd=66) с координатами — найти район.
-- ST_Contains даёт точное «точка внутри полигона». ЖК вне всех 8 районов
-- (Первоуральск, Н.Тагил и т.п.) останутся с district_name=NULL.
UPDATE domrf_kn_objects o
SET district_name = d.district_name
FROM ekb_districts_geom d
WHERE o.latitude IS NOT NULL AND o.longitude IS NOT NULL
AND o.region_cd = 66
AND ST_Contains(d.geom,
ST_SetSRID(ST_MakePoint(o.longitude, o.latitude), 4326));