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
2024DROP FUNCTION IF EXISTS create_admin_boundaries_centroids_mview;
2125CREATE 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)
2531RETURNS void AS $$
2632DECLARE
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 ;
3137BEGIN
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
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