feat(db): osm_poi_ekb table for site-finder POI analysis
This commit is contained in:
parent
ceaf553eb7
commit
688e094844
1 changed files with 56 additions and 0 deletions
56
data/sql/82_osm_poi_ekb.sql
Normal file
56
data/sql/82_osm_poi_ekb.sql
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
-- 82_osm_poi_ekb.sql
|
||||||
|
-- Context: Site Finder feature — анализ участка по близости к социальной
|
||||||
|
-- инфраструктуре. Хранение OSM POI для быстрых ST_DWithin запросов
|
||||||
|
-- в радиусе 1-3 км от анализируемого участка.
|
||||||
|
-- Dependencies: PostGIS extension (уже включён в prod)
|
||||||
|
-- Deploy order: standalone — нет зависимостей от других таблиц
|
||||||
|
-- Idempotent: да (IF NOT EXISTS / CREATE INDEX IF NOT EXISTS)
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS osm_poi_ekb (
|
||||||
|
poi_id BIGSERIAL PRIMARY KEY,
|
||||||
|
osm_id BIGINT NOT NULL,
|
||||||
|
osm_type TEXT NOT NULL,
|
||||||
|
-- 'school' | 'kindergarten' | 'pharmacy' | 'hospital' | 'shop_mall' |
|
||||||
|
-- 'shop_supermarket' | 'shop_small' | 'park' | 'tram_stop' |
|
||||||
|
-- 'bus_stop' | 'metro_stop'
|
||||||
|
category TEXT NOT NULL,
|
||||||
|
name TEXT,
|
||||||
|
lat NUMERIC(10, 7) NOT NULL,
|
||||||
|
lon NUMERIC(10, 7) NOT NULL,
|
||||||
|
geom GEOMETRY(Point, 4326) NOT NULL,
|
||||||
|
-- Дата последнего редактирования POI в OSM.
|
||||||
|
-- Для фильтра "данные не старше 2 лет" (требование Максима).
|
||||||
|
last_osm_edit_date DATE,
|
||||||
|
-- Остальные OSM теги для drill-down
|
||||||
|
tags JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||||
|
fetched_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||||
|
UNIQUE (osm_type, osm_id, category)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- GIST индекс для ST_DWithin / ST_Intersects запросов
|
||||||
|
CREATE INDEX IF NOT EXISTS osm_poi_ekb_geom_gist
|
||||||
|
ON osm_poi_ekb USING GIST (geom);
|
||||||
|
|
||||||
|
-- Индекс по категории для фильтрации по типу инфраструктуры
|
||||||
|
CREATE INDEX IF NOT EXISTS osm_poi_ekb_category_idx
|
||||||
|
ON osm_poi_ekb (category);
|
||||||
|
|
||||||
|
-- Индекс по дате редактирования для фильтра свежести данных
|
||||||
|
CREATE INDEX IF NOT EXISTS osm_poi_ekb_last_edit_idx
|
||||||
|
ON osm_poi_ekb (last_osm_edit_date);
|
||||||
|
|
||||||
|
COMMENT ON TABLE osm_poi_ekb IS
|
||||||
|
'Социальная инфраструктура Екатеринбурга из OSM. Источник: Overpass API. '
|
||||||
|
'Используется для site-finder scoring (близость школ, садов, магазинов, ст. транспорта).';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN osm_poi_ekb.category IS
|
||||||
|
'Нормализованная категория. Маппинг OSM-тегов → category: '
|
||||||
|
'см. backend/app/services/site_finder/poi_loader.py';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN osm_poi_ekb.last_osm_edit_date IS
|
||||||
|
'Дата последнего редактирования POI в OSM. '
|
||||||
|
'Для фильтра "данные не старше 2 лет" (требование Максима).';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
Loading…
Add table
Reference in a new issue