Skip to content

Commit bbe9338

Browse files
authored
Merge pull request #525 from OpenHistoricalMap/tiler_points
Merge building centroids and points in a single layer
2 parents b295a24 + 5e4b6fd commit bbe9338

8 files changed

Lines changed: 296 additions & 61 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
-- From:https://github.com/OpenHistoricalMap/issues/issues/940
2+
-- This query creates a materialized view for building points and buildings centroids
3+
CREATE OR REPLACE FUNCTION create_buildings_materialized_view(
4+
min_area DOUBLE PRECISION, --area in m2
5+
view_name TEXT
6+
) RETURNS VOID AS
7+
$$
8+
DECLARE
9+
sql TEXT;
10+
BEGIN
11+
RAISE NOTICE 'Dropping materialized view %', view_name;
12+
EXECUTE format('DROP MATERIALIZED VIEW IF EXISTS %I CASCADE;', view_name);
13+
14+
RAISE NOTICE 'Creating materialized view %', view_name;
15+
sql := format(
16+
$f$
17+
CREATE MATERIALIZED VIEW %I AS
18+
SELECT
19+
osm_id,
20+
geometry,
21+
name,
22+
NULL AS height,
23+
NULL AS area,
24+
type,
25+
start_date,
26+
end_date,
27+
'point' AS source,
28+
tags
29+
FROM
30+
osm_buildings_points_named
31+
32+
UNION ALL
33+
34+
SELECT
35+
osm_id,
36+
(ST_MaximumInscribedCircle(geometry)).center AS geometry,
37+
name,
38+
NULLIF(as_numeric(height), -1) AS height,
39+
ROUND(ST_Area(geometry)::numeric, 2) AS area,
40+
type,
41+
start_date,
42+
end_date,
43+
'centroid' AS source,
44+
tags
45+
FROM
46+
osm_buildings
47+
WHERE
48+
name IS NOT NULL
49+
AND name <> ''
50+
AND ST_Area(geometry) >= %L;
51+
$f$,
52+
view_name,
53+
min_area
54+
);
55+
56+
EXECUTE sql;
57+
58+
RAISE NOTICE 'Creating indexes on %', view_name;
59+
EXECUTE format('CREATE UNIQUE INDEX %I_uidx ON %I (osm_id, source);', view_name, view_name);
60+
EXECUTE format('CREATE INDEX %I_geom_idx ON %I USING GIST (geometry);', view_name, view_name);
61+
62+
RAISE NOTICE 'Materialized view % created successfully', view_name;
63+
END;
64+
$$ LANGUAGE plpgsql;
65+
66+
SELECT create_buildings_materialized_view(1500, 'mview_buildings_points_centroids_z14');
67+
SELECT create_buildings_materialized_view(1000, 'mview_buildings_points_centroids_z15');
68+
SELECT create_buildings_materialized_view(500, 'mview_buildings_points_centroids_z16');
69+
SELECT create_buildings_materialized_view(250, 'mview_buildings_points_centroids_z17');
70+
SELECT create_buildings_materialized_view(0, 'mview_buildings_points_centroids_z18_20');

images/tiler-imposm/refresh_mviews.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@ other_areas_views=(
8686
"mview_other_areas_z12_14"
8787
)
8888

89+
mview_buildings_points_centroids_views=(
90+
"mview_buildings_points_centroids_z14"
91+
"mview_buildings_points_centroids_z15"
92+
"mview_buildings_points_centroids_z16"
93+
"mview_buildings_points_centroids_z17"
94+
"mview_buildings_points_centroids_z18_20"
95+
)
96+
8997

9098
# Start refreshing in parallel with a sleep interval all of them in average of 4 min refresh
9199
## Benchmark admin refresh those views takes 4 min to complete
@@ -98,3 +106,5 @@ refresh_mviews_group "water" 160 "${water_views[@]}" &
98106
refresh_mviews_group "landuse" 220 "${landuse_views[@]}" &
99107
## Benchmark other areas and centroids refresh those views takes 3 secs to complete
100108
refresh_mviews_group "other_areas" 230 "${other_areas_views[@]}" &
109+
## Benchmark: Refreshing building points/centroids takes 60 seconds to complete.
110+
refresh_mviews_group "buildings_points_centroids" 230 "${mview_buildings_points_centroids_views[@]}" &

images/tiler-imposm/start.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ function importData() {
245245
psql $PG_CONNECTION -f queries/mviews_landuse_areas_centroids.sql
246246
psql $PG_CONNECTION -f queries/mviews_other_areas.sql
247247
psql $PG_CONNECTION -f queries/mviews_other_areas_centroids.sql
248+
psql $PG_CONNECTION -f queries/mviews_buildings_points_centroids.sql
248249
# Create INIT_FILE to prevent re-importing
249250
touch $INIT_FILE
250251
}
Lines changed: 47 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,118 @@
11
tags -> 'name:ja' AS name_ja,
22
tags -> 'name:en' AS name_en,
3-
tags -> 'name:ru' AS name_ru,
43
tags -> 'name:de' AS name_de,
4+
tags -> 'name:ru' AS name_ru,
55
tags -> 'name:cs' AS name_cs,
66
tags -> 'name:fi' AS name_fi,
7-
tags -> 'name:sv' AS name_sv,
87
tags -> 'name:fr' AS name_fr,
8+
tags -> 'name:sv' AS name_sv,
99
tags -> 'name:zh' AS name_zh,
1010
tags -> 'name:ko' AS name_ko,
11+
tags -> 'name:it' AS name_it,
1112
tags -> 'name:es' AS name_es,
1213
tags -> 'name:el' AS name_el,
1314
tags -> 'name:nl' AS name_nl,
14-
tags -> 'name:it' AS name_it,
1515
tags -> 'name:uk' AS name_uk,
16-
tags -> 'name:la' AS name_la,
1716
tags -> 'name:sr' AS name_sr,
17+
tags -> 'name:la' AS name_la,
1818
tags -> 'name:pl' AS name_pl,
1919
tags -> 'name:be' AS name_be,
2020
tags -> 'name:pt' AS name_pt,
21+
tags -> 'name:sr-Latn' AS name_sr_latn,
22+
tags -> 'name:ar' AS name_ar,
23+
tags -> 'name:hu' AS name_hu,
2124
tags -> 'name:en-fonipa' AS name_en_fonipa,
2225
tags -> 'name:es-fonipa' AS name_es_fonipa,
23-
tags -> 'name:ar' AS name_ar,
2426
tags -> 'name:kk' AS name_kk,
25-
tags -> 'name:sr-Latn' AS name_sr_latn,
26-
tags -> 'name:hu' AS name_hu,
2727
tags -> 'name:hsb' AS name_hsb,
28-
tags -> 'name:he' AS name_he,
29-
tags -> 'name:lt' AS name_lt,
3028
tags -> 'name:ro' AS name_ro,
29+
tags -> 'name:he' AS name_he,
3130
tags -> 'name:ga' AS name_ga,
31+
tags -> 'name:lt' AS name_lt,
3232
tags -> 'name:tr' AS name_tr,
33-
tags -> 'name:th' AS name_th,
3433
tags -> 'name:sk' AS name_sk,
34+
tags -> 'name:th' AS name_th,
3535
tags -> 'name:bg' AS name_bg,
3636
tags -> 'name:vi' AS name_vi,
37-
tags -> 'name:mn' AS name_mn,
3837
tags -> 'name:sl' AS name_sl,
39-
tags -> 'name:cy' AS name_cy,
4038
tags -> 'name:fa' AS name_fa,
39+
tags -> 'name:id' AS name_id,
4140
tags -> 'name:hr' AS name_hr,
42-
tags -> 'name:hi' AS name_hi,
41+
tags -> 'name:mn' AS name_mn,
42+
tags -> 'name:cy' AS name_cy,
43+
tags -> 'name:zh-Hant' AS name_zh_hant,
44+
tags -> 'name:gd' AS name_gd,
4345
tags -> 'name:ka' AS name_ka,
44-
tags -> 'name:al' AS name_al,
46+
tags -> 'name:hi' AS name_hi,
4547
tags -> 'name:ca' AS name_ca,
48+
tags -> 'name:al' AS name_al,
4649
tags -> 'name:af' AS name_af,
4750
tags -> 'name:tt' AS name_tt,
48-
tags -> 'name:id' AS name_id,
4951
tags -> 'name:hy' AS name_hy,
50-
tags -> 'name:kn' AS name_kn,
52+
tags -> 'name:zh-Hans' AS name_zh_hans,
5153
tags -> 'name:az' AS name_az,
52-
tags -> 'name:et' AS name_et,
5354
tags -> 'name:mk' AS name_mk,
54-
tags -> 'name:gd' AS name_gd,
55+
tags -> 'name:et' AS name_et,
5556
tags -> 'name:ur' AS name_ur,
5657
tags -> 'name:eo' AS name_eo,
5758
tags -> 'name:eu' AS name_eu,
5859
tags -> 'name:grc' AS name_grc,
5960
tags -> 'name:tg' AS name_tg,
6061
tags -> 'name:lv' AS name_lv,
61-
tags -> 'name:br' AS name_br,
62+
tags -> 'name:kn' AS name_kn,
6263
tags -> 'name:ja-Hira' AS name_ja_hira,
63-
tags -> 'name:ku' AS name_ku,
64-
tags -> 'name:ky' AS name_ky,
64+
tags -> 'name:br' AS name_br,
6565
tags -> 'name:ja-Latn' AS name_ja_latn,
66+
tags -> 'name:ku' AS name_ku,
6667
tags -> 'name:oc' AS name_oc,
67-
tags -> 'name:gl' AS name_gl,
68-
tags -> 'name:zh-Hant' AS name_zh_hant,
6968
tags -> 'name:da' AS name_da,
69+
tags -> 'name:gl' AS name_gl,
70+
tags -> 'name:ky' AS name_ky,
7071
tags -> 'name:no' AS name_no,
71-
tags -> 'name:zh-Hans' AS name_zh_hans,
7272
tags -> 'name:ta' AS name_ta,
7373
tags -> 'name:ba' AS name_ba,
7474
tags -> 'name:my' AS name_my,
75-
tags -> 'name:mr' AS name_mr,
76-
tags -> 'name:ug' AS name_ug,
77-
tags -> 'name:sq' AS name_sq,
75+
tags -> 'name:km' AS name_km,
7876
tags -> 'name:pa' AS name_pa,
77+
tags -> 'name:sq' AS name_sq,
78+
tags -> 'name:fy' AS name_fy,
79+
tags -> 'name:ug' AS name_ug,
7980
tags -> 'name:uz' AS name_uz,
81+
tags -> 'name:ko-Hani' AS name_ko_hani,
8082
tags -> 'name:bs' AS name_bs,
81-
tags -> 'name:is' AS name_is,
82-
tags -> 'name:fy' AS name_fy,
8383
tags -> 'name:lb' AS name_lb,
84+
tags -> 'name:is' AS name_is,
8485
tags -> 'name:bo' AS name_bo,
8586
tags -> 'name:am' AS name_am,
86-
tags -> 'name:tl' AS name_tl,
87+
tags -> 'name:mr' AS name_mr,
88+
tags -> 'name:fur' AS name_fur,
8789
tags -> 'name:sw' AS name_sw,
90+
tags -> 'name:tl' AS name_tl,
8891
tags -> 'name:yue' AS name_yue,
89-
tags -> 'name:fur' AS name_fur,
9092
tags -> 'name:bn' AS name_bn,
9193
tags -> 'name:se' AS name_se,
94+
tags -> 'name:nds' AS name_nds,
9295
tags -> 'name:jv' AS name_jv,
93-
tags -> 'name:ml' AS name_ml,
94-
tags -> 'name:ko-Hani' AS name_ko_hani,
95-
tags -> 'name:te' AS name_te,
96-
tags -> 'name:lo' AS name_lo,
9796
tags -> 'name:sh' AS name_sh,
98-
tags -> 'name:nds' AS name_nds,
97+
tags -> 'name:rm' AS name_rm,
9998
tags -> 'name:nn' AS name_nn,
99+
tags -> 'name:ml' AS name_ml,
100+
tags -> 'name:lo' AS name_lo,
101+
tags -> 'name:ce' AS name_ce,
100102
tags -> 'name:dsb' AS name_dsb,
101-
tags -> 'name:km' AS name_km,
102-
tags -> 'name:rm' AS name_rm,
103103
tags -> 'name:ms' AS name_ms,
104-
tags -> 'name:ce' AS name_ce,
105-
tags -> 'name:ne' AS name_ne,
106-
tags -> 'name:an' AS name_an,
107104
tags -> 'name:nb' AS name_nb,
105+
tags -> 'name:an' AS name_an,
106+
tags -> 'name:ne' AS name_ne,
108107
tags -> 'name:kv' AS name_kv,
109108
tags -> 'name:alt' AS name_alt,
109+
tags -> 'name:os' AS name_os,
110+
tags -> 'name:sco' AS name_sco,
110111
tags -> 'name:jp' AS name_jp,
112+
tags -> 'name:lmo' AS name_lmo,
111113
tags -> 'name:el-Latn' AS name_el_latn,
112-
tags -> 'name:os' AS name_os,
113114
tags -> 'name:zu' AS name_zu,
114-
tags -> 'name:map' AS name_map
115+
tags -> 'name:te' AS name_te,
116+
tags -> 'name:gv' AS name_gv,
117+
tags -> 'name:map' AS name_map,
118+
tags -> 'name:mi' AS name_mi

images/tiler-server/config/providers/buildings.centroids.toml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Layer configuration for buildings
22
[[providers.layers]]
3-
name = "buildings_14"
3+
name = "buildings_centroids_z14"
44
geometry_fieldname = "geometry"
55
geometry_type = "point"
66
id_fieldname = "id"
@@ -27,7 +27,7 @@ WHERE
2727
"""
2828

2929
[[providers.layers]]
30-
name = "buildings_15"
30+
name = "buildings_centroids_z15"
3131
geometry_fieldname = "geometry"
3232
geometry_type = "point"
3333
id_fieldname = "id"
@@ -54,7 +54,7 @@ WHERE
5454
"""
5555

5656
[[providers.layers]]
57-
name = "buildings_16"
57+
name = "buildings_centroids_z16"
5858
geometry_fieldname = "geometry"
5959
geometry_type = "point"
6060
id_fieldname = "id"
@@ -81,7 +81,7 @@ WHERE
8181
"""
8282

8383
[[providers.layers]]
84-
name = "buildings_17"
84+
name = "buildings_centroids_z17"
8585
geometry_fieldname = "geometry"
8686
geometry_type = "point"
8787
id_fieldname = "id"
@@ -109,7 +109,7 @@ WHERE
109109

110110

111111
[[providers.layers]]
112-
name = "buildings_18"
112+
name = "buildings_centroids_z18"
113113
geometry_fieldname = "geometry"
114114
geometry_type = "point"
115115
id_fieldname = "id"
@@ -136,7 +136,7 @@ WHERE
136136
"""
137137

138138
[[providers.layers]]
139-
name = "buildings_19"
139+
name = "buildings_centroids_z19"
140140
geometry_fieldname = "geometry"
141141
geometry_type = "point"
142142
id_fieldname = "id"
@@ -163,7 +163,7 @@ WHERE
163163
"""
164164

165165
[[providers.layers]]
166-
name = "buildings_20"
166+
name = "buildings_centroids_z20"
167167
geometry_fieldname = "geometry"
168168
geometry_type = "point"
169169
id_fieldname = "id"
@@ -191,42 +191,42 @@ WHERE
191191
# Buildings
192192
[[maps.layers]]
193193
name = "buildings_centroids"
194-
provider_layer = "osm.buildings_14"
194+
provider_layer = "osm.buildings_centroids_z14"
195195
min_zoom = 14
196196
max_zoom = 14
197197

198198
[[maps.layers]]
199199
name = "buildings_centroids"
200-
provider_layer = "osm.buildings_15"
200+
provider_layer = "osm.buildings_centroids_z15"
201201
min_zoom = 15
202202
max_zoom = 15
203203

204204
[[maps.layers]]
205205
name = "buildings_centroids"
206-
provider_layer = "osm.buildings_16"
206+
provider_layer = "osm.buildings_centroids_z16"
207207
min_zoom = 16
208208
max_zoom = 16
209209

210210
[[maps.layers]]
211211
name = "buildings_centroids"
212-
provider_layer = "osm.buildings_17"
212+
provider_layer = "osm.buildings_centroids_z17"
213213
min_zoom = 17
214214
max_zoom = 17
215215

216216
[[maps.layers]]
217217
name = "buildings_centroids"
218-
provider_layer = "osm.buildings_18"
218+
provider_layer = "osm.buildings_centroids_z18"
219219
min_zoom = 18
220220
max_zoom = 18
221221

222222
[[maps.layers]]
223223
name = "buildings_centroids"
224-
provider_layer = "osm.buildings_19"
224+
provider_layer = "osm.buildings_centroids_z19"
225225
min_zoom = 19
226226
max_zoom = 19
227227

228228
[[maps.layers]]
229229
name = "buildings_centroids"
230-
provider_layer = "osm.buildings_20"
230+
provider_layer = "osm.buildings_centroids_z20"
231231
min_zoom = 20
232232
max_zoom = 20

images/tiler-server/config/providers/buildings_points.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# Layer configuration for buildings
21
[[providers.layers]]
32
name = "buildings_points"
43
geometry_fieldname = "geometry"

0 commit comments

Comments
 (0)