Skip to content

Commit 4215e78

Browse files
committed
Update admin centroids
1 parent d904e02 commit 4215e78

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

images/tiler-imposm/queries/ohm_mviews/admin_boundaries_centroids.sql

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,44 @@
55
-- ST_MaximumInscribedCircle from polygons in the input table.
66
--
77
-- Parameters:
8-
-- input_table TEXT - Source table name (e.g., osm_admin_areas_z0_2).
9-
-- mview_name TEXT - Name of the final materialized view to create.
8+
-- input_table TEXT - Source table name (e.g., osm_admin_areas).
9+
-- mview_name TEXT - Name of the final materialized view to create.
10+
-- unique_columns TEXT - Comma-separated list of columns for uniqueness
11+
-- (default: 'id, osm_id, type').
12+
-- where_filter TEXT - Optional WHERE filter condition to apply
13+
-- (e.g., 'admin_level IN (1,2)').
1014
--
1115
-- Notes:
1216
-- - Excludes boundaries with role='label' from centroid calculation.
1317
-- - Area is stored in square kilometers as integer.
1418
-- - Geometry is indexed using GiST.
15-
-- - Uniqueness is enforced on osm_id.
19+
-- - Uniqueness is enforced on the specified unique_columns.
1620
-- - Includes multilingual name columns via get_language_columns().
1721
-- - Uses finalize_materialized_view() for atomic creation and renaming.
1822
-- ============================================================================
1923

2024
DROP FUNCTION IF EXISTS create_admin_boundaries_centroids_mview;
2125
CREATE OR REPLACE FUNCTION create_admin_boundaries_centroids_mview(
2226
input_table TEXT,
23-
mview_name TEXT
27+
mview_name TEXT,
28+
unique_columns TEXT DEFAULT 'id, osm_id, type',
29+
where_filter TEXT DEFAULT NULL
2430
)
2531
RETURNS void AS $$
2632
DECLARE
2733
tmp_mview_name TEXT := mview_name || '_tmp';
2834
sql_create TEXT;
2935
lang_columns TEXT := get_language_columns();
30-
unique_columns TEXT := 'osm_id';
36+
custom_filter TEXT;
3137
BEGIN
38+
-- Build custom WHERE filter (if provided)
39+
-- Note: custom_filter includes leading space and AND, so it can be concatenated directly
40+
IF where_filter IS NOT NULL AND where_filter <> '' THEN
41+
custom_filter := format(' AND (%s)', where_filter);
42+
ELSE
43+
custom_filter := '';
44+
END IF;
45+
3246
sql_create := format($sql$
3347
CREATE MATERIALIZED VIEW %I AS
3448
SELECT
@@ -48,8 +62,8 @@ BEGIN
4862
WHERE name IS NOT NULL AND name <> ''
4963
AND osm_id NOT IN (
5064
SELECT osm_id FROM osm_relation_members WHERE role = 'label'
51-
);
52-
$sql$, tmp_mview_name, lang_columns, input_table);
65+
)%s;
66+
$sql$, tmp_mview_name, lang_columns, input_table, custom_filter);
5367

5468
-- Finalize the materialized view and its indexes
5569
PERFORM finalize_materialized_view(
@@ -64,10 +78,10 @@ $$ LANGUAGE plpgsql;
6478
-- ============================================================================
6579
-- Execute force creation of all admin boundaries centroids materialized views
6680
-- ============================================================================
67-
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas_z0_2', 'mv_admin_boundaries_centroids_z0_2');
68-
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas_z3_5', 'mv_admin_boundaries_centroids_z3_5');
69-
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas_z6_7', 'mv_admin_boundaries_centroids_z6_7');
70-
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas_z8_9', 'mv_admin_boundaries_centroids_z8_9');
71-
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas_z10_12', 'mv_admin_boundaries_centroids_z10_12');
72-
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas_z13_15', 'mv_admin_boundaries_centroids_z13_15');
73-
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas_z16_20', 'mv_admin_boundaries_centroids_z16_20');
81+
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas', 'mv_admin_boundaries_centroids_z0_2', 'id, osm_id, type', 'admin_level IN (1,2)');
82+
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas', 'mv_admin_boundaries_centroids_z3_5', 'id, osm_id, type', 'admin_level IN (1,2,3,4)');
83+
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas', 'mv_admin_boundaries_centroids_z6_7', 'id, osm_id, type', 'admin_level IN (1,2,3,4,5,6)');
84+
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas', 'mv_admin_boundaries_centroids_z8_9', 'id, osm_id, type', 'admin_level IN (1,2,3,4,5,6,7,8,9)');
85+
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas', 'mv_admin_boundaries_centroids_z10_12', 'id, osm_id, type', 'admin_level IN (1,2,3,4,5,6,7,8,9,10)');
86+
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas', 'mv_admin_boundaries_centroids_z13_15', 'id, osm_id, type', 'admin_level IN (1,2,3,4,5,6,7,8,9,10,11)');
87+
SELECT create_admin_boundaries_centroids_mview('osm_admin_areas', 'mv_admin_boundaries_centroids_z16_20', 'id, osm_id, type', 'admin_level IN (1,2,3,4,5,6,7,8,9,10,11)');

0 commit comments

Comments
 (0)