Stitch transportation_name by all language tags (#989)

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:
1685eaccbd/layers/waterway/update_important_waterway.sql (L34)

Co-authored-by: Frédéric Rodrigo <fred.rodrigo@gmail.com>
This commit is contained in:
zstadler 2020-09-21 12:38:13 +03:00 committed by GitHub
parent 5c640daf4f
commit 45f5b53c9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 21 deletions

View File

@ -23,11 +23,11 @@ AS
$$ $$
SELECT osm_id, SELECT osm_id,
geometry, geometry,
NULLIF(name, '') AS name, name,
COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(name_en, name) AS name_en,
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, COALESCE(name_de, name, name_en) AS name_de,
tags, tags,
NULLIF(ref, ''), ref,
NULLIF(LENGTH(ref), 0) AS ref_length, NULLIF(LENGTH(ref), 0) AS ref_length,
--TODO: The road network of the road is not yet implemented --TODO: The road network of the road is not yet implemented
CASE CASE
@ -101,7 +101,7 @@ FROM (
indoor indoor
FROM osm_transportation_name_linestring FROM osm_transportation_name_linestring
WHERE zoom_level = 12 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 highway_class(highway, '', construction) NOT IN ('minor', 'track', 'path')
AND NOT highway_is_link(highway) AND NOT highway_is_link(highway)
UNION ALL UNION ALL
@ -123,7 +123,7 @@ FROM (
indoor indoor
FROM osm_transportation_name_linestring FROM osm_transportation_name_linestring
WHERE zoom_level = 13 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') AND highway_class(highway, '', construction) NOT IN ('track', 'path')
UNION ALL UNION ALL

View File

@ -25,15 +25,15 @@ SELECT
FROM ( FROM (
SELECT hl.geometry, SELECT hl.geometry,
hl.osm_id, 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) > 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 hl.name_en END AS "name_en", 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 hl.name_de END AS "name_de", CASE WHEN length(hl.name_de) > 15 THEN osml10n_street_abbrev_de(hl.name_de) ELSE NULLIF(hl.name_de, '') END AS "name_de",
hl.tags, slice_language_tags(hl.tags) AS tags,
rm.network_type, rm.network_type,
CASE 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 THEN rm.ref::text
ELSE hl.ref ELSE NULLIF(hl.ref, '')
END AS ref, END AS ref,
hl.highway, hl.highway,
hl.construction, hl.construction,
@ -76,9 +76,8 @@ FROM (
name, name,
name_en, name_en,
name_de, name_de,
hstore(string_agg(nullif(slice_language_tags(tags || tags || hstore( -- store results of osml10n_street_abbrev_* above
hstore(ARRAY ['name', name, 'name:en', name_en, 'name:de', name_de]))::text, ARRAY ['name', name, 'name:en', name_en, 'name:de', name_de]) AS tags,
''), ',')) AS "tags",
ref, ref,
highway, highway,
construction, construction,
@ -88,7 +87,7 @@ FROM (
network_type, network_type,
min(z_order) AS z_order min(z_order) AS z_order
FROM osm_transportation_name_network 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 ) AS highway_union
) /* DELAY_MATERIALIZED_VIEW_CREATION */; ) /* DELAY_MATERIALIZED_VIEW_CREATION */;
CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_geometry_idx ON osm_transportation_name_linestring USING gist (geometry); 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 INSERT INTO osm_transportation_name_network
SELECT hl.geometry, SELECT hl.geometry,
hl.osm_id, 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) > 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 hl.name_en END AS "name_en", 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 hl.name_de END AS "name_de", CASE WHEN length(hl.name_de) > 15 THEN osml10n_street_abbrev_de(hl.name_de) ELSE NULLIF(hl.name_de, '') END AS "name_de",
hl.tags, slice_language_tags(hl.tags) AS tags,
rm.network_type, rm.network_type,
CASE 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 THEN rm.ref::text
ELSE hl.ref ELSE NULLIF(hl.ref, '')
END AS ref, END AS ref,
hl.highway, hl.highway,
hl.construction, hl.construction,