Skip to content

Commit f60179d

Browse files
committed
feat(admin-overlay): add gha.admin_overlay function + bump submodules
- New PostGIS function gha.admin_overlay(z,x,y,scope) returns admin0 always, admin1 at z>=6, admin2 at z>=8 as separate MVT layers - Bump eafw_geomanager_web (partners/CTA/major flag work) - Bump eafw_geomapviewer (progressive admin overlay)
1 parent e8a61bf commit f60179d

3 files changed

Lines changed: 90 additions & 2 deletions

File tree

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
-- Overlay admin boundaries function:
2+
-- Always returns admin0; adds admin1 when z>=6; adds admin2 when z>=8.
3+
-- Each level is emitted as a distinct MVT layer so the frontend can style
4+
-- them independently with different line widths/colors and minzoom filters.
5+
--
6+
-- Frontend uses source-layer names: "admin0", "admin1", "admin2".
7+
-- Scope-aware: when scope='whca', uses gha.whca_admin0/1/2 tables.
8+
9+
CREATE OR REPLACE FUNCTION gha.admin_overlay(
10+
z integer, x integer, y integer,
11+
scope text DEFAULT 'all'
12+
) RETURNS bytea
13+
LANGUAGE plpgsql STABLE
14+
AS $$
15+
DECLARE
16+
out_mvt bytea := '';
17+
tile_env geometry := ST_TileEnvelope(z, x, y);
18+
tile_bbox geometry := ST_Transform(tile_env, 4326);
19+
use_whca boolean := (COALESCE(scope, 'all') = 'whca');
20+
level_mvt bytea;
21+
BEGIN
22+
-- admin0: always included
23+
IF use_whca THEN
24+
SELECT ST_AsMVT(t, 'admin0', 4096, 'mvt_geom') INTO level_mvt
25+
FROM (
26+
SELECT country,
27+
ST_AsMVTGeom(ST_Transform(geom, 3857), tile_env, 4096, 256, false) AS mvt_geom
28+
FROM gha.whca_admin0
29+
WHERE geom && tile_bbox
30+
) t WHERE t.mvt_geom IS NOT NULL;
31+
ELSE
32+
SELECT ST_AsMVT(t, 'admin0', 4096, 'mvt_geom') INTO level_mvt
33+
FROM (
34+
SELECT country,
35+
ST_AsMVTGeom(ST_Transform(geom, 3857), tile_env, 4096, 256, false) AS mvt_geom
36+
FROM gha.admin0
37+
WHERE geom && tile_bbox
38+
) t WHERE t.mvt_geom IS NOT NULL;
39+
END IF;
40+
out_mvt := out_mvt || COALESCE(level_mvt, '');
41+
42+
-- admin1: z >= 6
43+
IF z >= 6 THEN
44+
IF use_whca THEN
45+
SELECT ST_AsMVT(t, 'admin1', 4096, 'mvt_geom') INTO level_mvt
46+
FROM (
47+
SELECT country, name_1 AS region,
48+
ST_AsMVTGeom(ST_Transform(geom, 3857), tile_env, 4096, 256, false) AS mvt_geom
49+
FROM gha.whca_admin1
50+
WHERE geom && tile_bbox
51+
) t WHERE t.mvt_geom IS NOT NULL;
52+
ELSE
53+
SELECT ST_AsMVT(t, 'admin1', 4096, 'mvt_geom') INTO level_mvt
54+
FROM (
55+
SELECT country, name_1 AS region,
56+
ST_AsMVTGeom(ST_Transform(geom, 3857), tile_env, 4096, 256, false) AS mvt_geom
57+
FROM gha.admin1
58+
WHERE geom && tile_bbox
59+
) t WHERE t.mvt_geom IS NOT NULL;
60+
END IF;
61+
out_mvt := out_mvt || COALESCE(level_mvt, '');
62+
END IF;
63+
64+
-- admin2: z >= 8
65+
IF z >= 8 THEN
66+
IF use_whca THEN
67+
SELECT ST_AsMVT(t, 'admin2', 4096, 'mvt_geom') INTO level_mvt
68+
FROM (
69+
SELECT country, name_1 AS region, name_2 AS district,
70+
ST_AsMVTGeom(ST_Transform(geom, 3857), tile_env, 4096, 256, false) AS mvt_geom
71+
FROM gha.whca_admin2
72+
WHERE geom && tile_bbox
73+
) t WHERE t.mvt_geom IS NOT NULL;
74+
ELSE
75+
SELECT ST_AsMVT(t, 'admin2', 4096, 'mvt_geom') INTO level_mvt
76+
FROM (
77+
SELECT country, name_1 AS region, name_2 AS district,
78+
ST_AsMVTGeom(ST_Transform(geom, 3857), tile_env, 4096, 256, false) AS mvt_geom
79+
FROM gha.admin2
80+
WHERE geom && tile_bbox
81+
) t WHERE t.mvt_geom IS NOT NULL;
82+
END IF;
83+
out_mvt := out_mvt || COALESCE(level_mvt, '');
84+
END IF;
85+
86+
RETURN out_mvt;
87+
END;
88+
$$;

eafw_geomanager_web

eafw_geomapviewer

0 commit comments

Comments
 (0)