From 45f5b53c9c6ad754b052b09bd4c76ca01f8eed8f Mon Sep 17 00:00:00 2001 From: zstadler Date: Mon, 21 Sep 2020 12:38:13 +0300 Subject: [PATCH] Stitch `transportation_name` by all language tags (#989) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When OSM roads in the `transportation_name` layer are stitched together, their grouping does not consider all `name:*` tags. As a result, roads with different `name:*` tags may be stitched together. The `waterway` layer performs the grouping properly, for the same purpose: https://github.com/openmaptiles/openmaptiles/blob/1685eaccbd0ab9f8e4b32bcd4f4a20fd502a5d13/layers/waterway/update_important_waterway.sql#L34 Co-authored-by: Frédéric Rodrigo --- layers/transportation_name/layer.sql | 12 ++++---- .../update_transportation_name.sql | 29 +++++++++---------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/layers/transportation_name/layer.sql b/layers/transportation_name/layer.sql index 9242160..0cf23f6 100644 --- a/layers/transportation_name/layer.sql +++ b/layers/transportation_name/layer.sql @@ -23,11 +23,11 @@ AS $$ SELECT osm_id, geometry, - NULLIF(name, '') AS name, - COALESCE(NULLIF(name_en, ''), name) AS name_en, - COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, + name, + COALESCE(name_en, name) AS name_en, + COALESCE(name_de, name, name_en) AS name_de, tags, - NULLIF(ref, ''), + ref, NULLIF(LENGTH(ref), 0) AS ref_length, --TODO: The road network of the road is not yet implemented CASE @@ -101,7 +101,7 @@ FROM ( indoor FROM osm_transportation_name_linestring WHERE zoom_level = 12 - AND LineLabel(zoom_level, COALESCE(NULLIF(name, ''), ref), geometry) + AND LineLabel(zoom_level, COALESCE(name, ref), geometry) AND highway_class(highway, '', construction) NOT IN ('minor', 'track', 'path') AND NOT highway_is_link(highway) UNION ALL @@ -123,7 +123,7 @@ FROM ( indoor FROM osm_transportation_name_linestring WHERE zoom_level = 13 - AND LineLabel(zoom_level, COALESCE(NULLIF(name, ''), ref), geometry) + AND LineLabel(zoom_level, COALESCE(name, ref), geometry) AND highway_class(highway, '', construction) NOT IN ('track', 'path') UNION ALL diff --git a/layers/transportation_name/update_transportation_name.sql b/layers/transportation_name/update_transportation_name.sql index c7589a7..e3a55b2 100644 --- a/layers/transportation_name/update_transportation_name.sql +++ b/layers/transportation_name/update_transportation_name.sql @@ -25,15 +25,15 @@ SELECT FROM ( SELECT hl.geometry, hl.osm_id, - CASE WHEN length(hl.name) > 15 THEN osml10n_street_abbrev_all(hl.name) ELSE hl.name END AS "name", - CASE WHEN length(hl.name_en) > 15 THEN osml10n_street_abbrev_en(hl.name_en) ELSE hl.name_en END AS "name_en", - CASE WHEN length(hl.name_de) > 15 THEN osml10n_street_abbrev_de(hl.name_de) ELSE hl.name_de END AS "name_de", - hl.tags, + CASE WHEN length(hl.name) > 15 THEN osml10n_street_abbrev_all(hl.name) ELSE NULLIF(hl.name, '') END AS "name", + CASE WHEN length(hl.name_en) > 15 THEN osml10n_street_abbrev_en(hl.name_en) ELSE NULLIF(hl.name_en, '') END AS "name_en", + CASE WHEN length(hl.name_de) > 15 THEN osml10n_street_abbrev_de(hl.name_de) ELSE NULLIF(hl.name_de, '') END AS "name_de", + slice_language_tags(hl.tags) AS tags, rm.network_type, CASE WHEN rm.network_type IS NOT NULL AND nullif(rm.ref::text, '') IS NOT NULL THEN rm.ref::text - ELSE hl.ref + ELSE NULLIF(hl.ref, '') END AS ref, hl.highway, hl.construction, @@ -76,9 +76,8 @@ FROM ( name, name_en, name_de, - hstore(string_agg(nullif(slice_language_tags(tags || - hstore(ARRAY ['name', name, 'name:en', name_en, 'name:de', name_de]))::text, - ''), ',')) AS "tags", + tags || hstore( -- store results of osml10n_street_abbrev_* above + ARRAY ['name', name, 'name:en', name_en, 'name:de', name_de]) AS tags, ref, highway, construction, @@ -88,7 +87,7 @@ FROM ( network_type, min(z_order) AS z_order FROM osm_transportation_name_network - GROUP BY name, name_en, name_de, ref, highway, construction, "level", layer, indoor, network_type + GROUP BY name, name_en, name_de, tags, ref, highway, construction, "level", layer, indoor, network_type ) AS highway_union ) /* DELAY_MATERIALIZED_VIEW_CREATION */; CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_geometry_idx ON osm_transportation_name_linestring USING gist (geometry); @@ -253,15 +252,15 @@ BEGIN INSERT INTO osm_transportation_name_network SELECT hl.geometry, hl.osm_id, - CASE WHEN length(hl.name) > 15 THEN osml10n_street_abbrev_all(hl.name) ELSE hl.name END AS "name", - CASE WHEN length(hl.name_en) > 15 THEN osml10n_street_abbrev_en(hl.name_en) ELSE hl.name_en END AS "name_en", - CASE WHEN length(hl.name_de) > 15 THEN osml10n_street_abbrev_de(hl.name_de) ELSE hl.name_de END AS "name_de", - hl.tags, + CASE WHEN length(hl.name) > 15 THEN osml10n_street_abbrev_all(hl.name) ELSE NULLIF(hl.name, '') END AS "name", + CASE WHEN length(hl.name_en) > 15 THEN osml10n_street_abbrev_en(hl.name_en) ELSE NULLIF(hl.name_en, '') END AS "name_en", + CASE WHEN length(hl.name_de) > 15 THEN osml10n_street_abbrev_de(hl.name_de) ELSE NULLIF(hl.name_de, '') END AS "name_de", + slice_language_tags(hl.tags) AS tags, rm.network_type, CASE - WHEN rm.network_type IS NOT NULL AND nullif(rm.ref::text, '') IS NOT NULL + WHEN rm.network_type IS NOT NULL AND NULLIF(rm.ref::text, '') IS NOT NULL THEN rm.ref::text - ELSE hl.ref + ELSE NULLIF(hl.ref, '') END AS ref, hl.highway, hl.construction,