File: legacy_invalid.sql

package info (click to toggle)
postgis 3.3.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 87,748 kB
  • sloc: ansic: 158,671; sql: 91,546; xml: 54,004; cpp: 12,339; sh: 5,187; perl: 5,100; makefile: 3,085; python: 1,205; yacc: 447; lex: 151; javascript: 6
file content (61 lines) | stat: -rw-r--r-- 1,638 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
set client_min_messages to WARNING;

\i ../invalid_topology.sql

-- Validate full topology, store invalidities in a table
CREATE TABLE invalid_topology.invalidities AS
SELECT * FROM topology.validatetopology('invalid_topology');
SELECT * FROM invalid_topology.invalidities
ORDER BY 1,2,3;

-- Test bbox-limited checking
-- See https://trac.osgeo.org/postgis/ticket/4936
CREATE TABLE invalid_topology.grid_invalidities AS
WITH
extents AS (
  SELECT ST_Envelope(ST_Extent(geom)) env
  FROM invalid_topology.edge
    UNION
  SELECT ST_Envelope(ST_Extent(geom))
  FROM invalid_topology.node
    UNION
  SELECT ST_Envelope(ST_Extent(mbr))
  FROM invalid_topology.face
),
topo_envelope AS (
  SELECT ST_Envelope(ST_Union(env)) env
  FROM extents
),
-- roughly a 8x5 grid on whole topology extent
grid AS (
  SELECT *
  FROM ST_SquareGrid(
      ST_Length(
        ST_BoundingDiagonal(
          ( SELECT env FROM topo_envelope )
        )
      )/8.0,
      ( SELECT env FROM topo_envelope )
    )
)
SELECT g.i, g.j, vt.*
FROM grid g,
LATERAL topology.validatetopology('invalid_topology', g.geom) vt ;

-- Check that all errors found by the catch-all validator
-- are also cought by the per-cell validator
CREATE TABLE invalid_topology.missing_invalidities AS
  SELECT error, id1, id2 FROM invalid_topology.invalidities
    EXCEPT
  SELECT error, id1, id2 FROM invalid_topology.grid_invalidities
;

SELECT '#4936', 'missing_count', count(*)
FROM invalid_topology.missing_invalidities ;

SELECT '#4936', 'missing', *
FROM invalid_topology.missing_invalidities
ORDER BY 1, 2, 3 ASC;

-- clean up
SELECT topology.DropTopology('invalid_topology');