File: regions.sql

package info (click to toggle)
h3-pg 4.2.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,196 kB
  • sloc: sql: 4,469; ansic: 3,497; python: 322; sh: 56; makefile: 18
file content (76 lines) | stat: -rw-r--r-- 2,578 bytes parent folder | download | duplicates (3)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
\pset tuples_only on
-- res 0 index
\set res0index '\'8059fffffffffff\''
-- center hex
\set center '\'81583ffffffffff\''
-- 7 child hexes in res 0 index
\set solid 'ARRAY(SELECT h3_cell_to_children(:res0index, 1))'
-- 6 child hexes in rim of res 0 index
\set hollow 'array_remove(:solid, :center)'
-- pentagon
\set pentagon '\'831c00fffffffff\'::h3index'

--
-- TEST h3_polygon_to_cells and h3_cells_to_multi_polygon
--

-- h3_polygon_to_cells is inverse of h3_cells_to_multi_polygon for set without holes
SELECT array_agg(result) is null FROM (
    SELECT h3_polygon_to_cells(exterior, holes, 1) result FROM (
        SELECT exterior, holes FROM h3_cells_to_multi_polygon(:solid)
    ) qq
    EXCEPT SELECT unnest(:solid) result
) q;

-- h3_polygon_to_cells is inverse of h3_cells_to_multi_polygon for set with a hole
SELECT array_agg(result) is null FROM (
    SELECT h3_polygon_to_cells(exterior, holes, 1) result FROM (
        SELECT exterior, holes FROM h3_cells_to_multi_polygon(:hollow)
    ) qq
    EXCEPT SELECT unnest(:hollow) result
) q;

-- h3_polyfill doesn't segfault on NULL value in holes
SELECT TRUE FROM (
    SELECT h3_polygon_to_cells(exterior, ARRAY[NULL::POLYGON], 1) result FROM (
        SELECT exterior, holes FROM h3_cells_to_multi_polygon(
            ARRAY[:pentagon]::H3Index[]
        )
    ) qq
) q LIMIT 1;

-- h3_polyfill throws on non-polygons
CREATE FUNCTION h3_test_polyfill_bad1() RETURNS boolean LANGUAGE PLPGSQL
    AS $$
        BEGIN
            PERFORM h3_polyfill(ST_GeomFromText('POINT(-71.160281 42.258729)',4326), 8);
            RETURN false;
        EXCEPTION WHEN OTHERS THEN
            RETURN true;
        END;
    $$;
CREATE FUNCTION h3_test_polyfill_bad2() RETURNS boolean LANGUAGE PLPGSQL
    AS $$
        BEGIN
            PERFORM h3_polyfill(ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)',4326), 8);
            RETURN false;
        EXCEPTION WHEN OTHERS THEN
            RETURN true;
        END;
    $$;
SELECT h3_test_polyfill_bad1();
SELECT h3_test_polyfill_bad2();
DROP FUNCTION h3_test_polyfill_bad1;
DROP FUNCTION h3_test_polyfill_bad2;

--
-- TEST h3_polygon_to_cells_experimental
--

-- h3_polygon_to_cells is inverse of h3_cells_to_multi_polygon for set without holes
SELECT array_agg(result) is null FROM (
    SELECT h3_polygon_to_cells_experimental(exterior, holes, 1, 'overlapping') result FROM (
        SELECT exterior, holes FROM h3_cells_to_multi_polygon(:solid)
    ) qq
    EXCEPT SELECT h3_grid_disk(h3_cell_to_center_child(:res0index), 2) result
) q;