create_links.sql 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. -- 0. Eemalda olemasolev
  2. DROP TABLE IF EXISTS :schema.links CASCADE;
  3. DROP TABLE IF EXISTS :schema._noded_geom CASCADE;
  4. DROP TABLE IF EXISTS :schema._raw_segments CASCADE;
  5. -- 1. Lõika geomeetriad ristumiskohtades
  6. CREATE UNLOGGED TABLE :schema._noded_geom AS
  7. SELECT
  8. ST_Node(ST_Collect(geom)) AS geom -- ühendame kõik teed ja lõikame ristumised
  9. FROM :schema.ardok_highways;
  10. -- 2. Võta igast lõigatud joonest üks segment
  11. CREATE UNLOGGED TABLE :schema._raw_segments AS
  12. SELECT
  13. row_number() OVER () + 100000000 AS id, geom from ( SELECT
  14. (ST_Dump(geom)).geom AS geom
  15. FROM :schema._noded_geom) rs;
  16. -- 3. Lisa metaandmed lõigule, mille sees või mille osana link asub
  17. CREATE UNLOGGED TABLE :schema.links AS
  18. SELECT
  19. s.id,
  20. h.eid,
  21. h.hwtype AS highway,
  22. h.surface,
  23. h.oneway,
  24. h.maxspeed,
  25. COALESCE(NULLIF(h.name, ''), NULLIF(h.hwtype, ''), 'Unnamed road') AS name,
  26. s.geom
  27. FROM :schema._raw_segments s
  28. JOIN LATERAL (
  29. SELECT *
  30. FROM :schema.ardok_highways h
  31. WHERE ST_Intersects(h.geom, s.geom) -- NB! sisuline kattuvus
  32. ORDER BY ST_Length(ST_Intersection(h.geom, s.geom)) DESC
  33. LIMIT 1
  34. ) h ON TRUE;
  35. -- 4. Indeks ja PK
  36. CREATE INDEX links_geom_idx ON :schema.links USING GIST (geom);
  37. ALTER TABLE :schema.links ADD PRIMARY KEY (id);