fix_small_gaps.sql 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. SET myvars.schema TO :'schema';
  2. DO $$
  3. DECLARE
  4. r RECORD;
  5. schema_name TEXT := current_setting('myvars.schema'); -- loeme muutuja `-v schema`
  6. batch_size INTEGER := 1000;
  7. offset_val INTEGER := 0;
  8. done BOOLEAN := FALSE;
  9. BEGIN
  10. WHILE NOT done LOOP
  11. done := TRUE;
  12. FOR r IN
  13. EXECUTE format($fmt$
  14. SELECT v1.id AS id1, v2.id AS id2,
  15. ST_MakeLine(v1.the_geom, v2.the_geom) AS new_geom
  16. FROM %I.links_vertices_pgr v1
  17. JOIN %I.links_vertices_pgr v2
  18. ON v1.id < v2.id
  19. WHERE ST_DWithin(v1.the_geom, v2.the_geom, 2)
  20. AND NOT EXISTS (
  21. SELECT 1 FROM %I.links l
  22. WHERE (l.source = v1.id AND l.target = v2.id)
  23. OR (l.source = v2.id AND l.target = v1.id)
  24. )
  25. ORDER BY v1.id, v2.id
  26. LIMIT %s OFFSET %s
  27. $fmt$, schema_name, schema_name, schema_name, batch_size, offset_val)
  28. LOOP
  29. done := FALSE;
  30. EXECUTE format($sql$
  31. INSERT INTO %I.links (
  32. geom, source, target, cost, reverse_cost,
  33. eid, highway, surface, oneway, maxspeed, name
  34. )
  35. VALUES (
  36. $1, $2, $3,
  37. ST_Length($1)::float8,
  38. ST_Length($1)::float8,
  39. NULL, NULL, NULL, 0, NULL, NULL
  40. ) $sql$, schema_name)
  41. USING r.new_geom, r.id1, r.id2;
  42. END LOOP;
  43. offset_val := offset_val + batch_size;
  44. END LOOP;
  45. END $$;