| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- -- 0. Eemalda olemasolev
- DROP TABLE IF EXISTS :schema.links CASCADE;
- DROP TABLE IF EXISTS :schema._noded_geom CASCADE;
- DROP TABLE IF EXISTS :schema._raw_segments CASCADE;
- -- 1. Lõika geomeetriad ristumiskohtades
- CREATE UNLOGGED TABLE :schema._noded_geom AS
- SELECT
- ST_Node(ST_Collect(geom)) AS geom -- ühendame kõik teed ja lõikame ristumised
- FROM :schema.ardok_highways;
- -- 2. Võta igast lõigatud joonest üks segment
- CREATE UNLOGGED TABLE :schema._raw_segments AS
- SELECT
- row_number() OVER () + 100000000 AS id, geom from ( SELECT
- (ST_Dump(geom)).geom AS geom
- FROM :schema._noded_geom) rs;
- -- 3. Lisa metaandmed lõigule, mille sees või mille osana link asub
- CREATE UNLOGGED TABLE :schema.links AS
- SELECT
- s.id,
- h.eid,
- h.hwtype AS highway,
- h.surface,
- h.oneway,
- h.maxspeed,
- COALESCE(NULLIF(h.name, ''), NULLIF(h.hwtype, ''), 'Unnamed road') AS name,
- s.geom
- FROM :schema._raw_segments s
- JOIN LATERAL (
- SELECT *
- FROM :schema.ardok_highways h
- WHERE ST_Intersects(h.geom, s.geom) -- NB! sisuline kattuvus
- ORDER BY ST_Length(ST_Intersection(h.geom, s.geom)) DESC
- LIMIT 1
- ) h ON TRUE;
- -- 4. Indeks ja PK
- CREATE INDEX links_geom_idx ON :schema.links USING GIST (geom);
- ALTER TABLE :schema.links ADD PRIMARY KEY (id);
|