Brunnel changes in transportation and transportation_name layers (#1027)

https://github.com/openmaptiles/openmaptiles/issues/999

- Point 1 solved only partially - there is `brunnel` value added into zooms 9, 10, 11. For zooms 8 and smaller it would need change in osm_transportation_merge_ tables - I am going to try it but maybe its SQL costs will be to high.

- Point 2 solved.
pull/1013/head
Eva Jelinkova 2020-10-14 14:26:43 +02:00 zatwierdzone przez GitHub
rodzic b7429ce6f5
commit 341c4df171
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 116 dodań i 32 usunięć

Wyświetl plik

@ -220,9 +220,9 @@ FROM (
NULL AS shipway,
NULL AS public_transport,
NULL AS service,
NULL::boolean AS is_bridge,
NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford,
is_bridge,
is_tunnel,
is_ford,
NULL::boolean AS is_ramp,
NULL::int AS is_oneway,
NULL AS man_made,
@ -250,9 +250,9 @@ FROM (
NULL AS shipway,
NULL AS public_transport,
NULL AS service,
NULL::boolean AS is_bridge,
NULL::boolean AS is_tunnel,
NULL::boolean AS is_ford,
is_bridge,
is_tunnel,
is_ford,
NULL::boolean AS is_ramp,
NULL::int AS is_oneway,
NULL AS man_made,

Wyświetl plik

@ -15,6 +15,7 @@ CREATE OR REPLACE FUNCTION layer_transportation_name(bbox geometry, zoom_level i
network text,
class text,
subclass text,
brunnel text,
layer int,
level int,
indoor int
@ -41,6 +42,7 @@ SELECT osm_id,
WHEN highway IS NOT NULL AND highway_class(highway, '', construction) = 'path'
THEN highway
END AS subclass,
brunnel,
NULLIF(layer, 0) AS layer,
"level",
CASE WHEN indoor = TRUE THEN 1 END AS indoor
@ -94,6 +96,7 @@ FROM (
ref,
highway,
construction,
brunnel,
network,
z_order,
layer,
@ -116,6 +119,7 @@ FROM (
ref,
highway,
construction,
brunnel,
network,
z_order,
layer,
@ -137,6 +141,7 @@ FROM (
ref,
highway,
construction,
brunnel,
network,
z_order,
layer,

Wyświetl plik

@ -69,6 +69,13 @@ layer:
- bridleway
- corridor
- platform
brunnel:
description: |
Mark whether way is a bridge, a tunnel or a ford.
values:
- bridge
- tunnel
- ford
level:
description: |
Experimental feature! Filled only for steps and footways. Original
@ -86,7 +93,7 @@ layer:
datasource:
geometry_field: geometry
srid: 900913
query: (SELECT geometry, name, name_en, name_de, {name_languages}, ref, ref_length, network::text, class::text, subclass, layer, level, indoor FROM layer_transportation_name(!bbox!, z(!scale_denominator!))) AS t
query: (SELECT geometry, name, name_en, name_de, {name_languages}, ref, ref_length, network::text, class::text, subclass, brunnel, layer, level, indoor FROM layer_transportation_name(!bbox!, z(!scale_denominator!))) AS t
schema:
- ./network_type.sql
- ./update_route_member.sql

Wyświetl plik

@ -17,6 +17,7 @@ SELECT
ref,
highway,
construction,
brunnel,
"level",
layer,
indoor,
@ -37,6 +38,7 @@ FROM (
END AS ref,
hl.highway,
hl.construction,
brunnel(hl.is_bridge, hl.is_tunnel, hl.is_ford) AS brunnel,
CASE WHEN highway IN ('footway', 'steps') THEN layer END AS layer,
CASE WHEN highway IN ('footway', 'steps') THEN level END AS level,
CASE WHEN highway IN ('footway', 'steps') THEN indoor END AS indoor,
@ -66,6 +68,7 @@ SELECT (ST_Dump(geometry)).geom AS geometry,
ref,
highway,
construction,
brunnel,
"level",
layer,
indoor,
@ -81,13 +84,14 @@ FROM (
ref,
highway,
construction,
brunnel,
"level",
layer,
indoor,
network_type,
min(z_order) AS z_order
FROM osm_transportation_name_network
GROUP BY name, name_en, name_de, tags, ref, highway, construction, "level", layer, indoor, network_type
GROUP BY name, name_en, name_de, tags, ref, highway, construction, brunnel, "level", layer, indoor, network_type
) AS highway_union
;
CREATE INDEX IF NOT EXISTS osm_transportation_name_linestring_name_ref_idx ON osm_transportation_name_linestring (coalesce(name, ''), coalesce(ref, ''));
@ -108,6 +112,7 @@ SELECT ST_Simplify(geometry, 50) AS geometry,
ref,
highway,
construction,
brunnel,
network,
z_order
FROM osm_transportation_name_linestring
@ -135,6 +140,7 @@ SELECT ST_Simplify(geometry, 120) AS geometry,
ref,
highway,
construction,
brunnel,
network,
z_order
FROM osm_transportation_name_linestring_gen1
@ -162,6 +168,7 @@ SELECT ST_Simplify(geometry, 200) AS geometry,
ref,
highway,
construction,
brunnel,
network,
z_order
FROM osm_transportation_name_linestring_gen2
@ -189,6 +196,7 @@ SELECT ST_Simplify(geometry, 500) AS geometry,
ref,
highway,
construction,
brunnel,
network,
z_order
FROM osm_transportation_name_linestring_gen3
@ -275,6 +283,7 @@ BEGIN
ref,
highway,
construction,
brunnel,
level,
layer,
indoor,
@ -295,6 +304,7 @@ BEGIN
END AS ref,
hl.highway,
hl.construction,
brunnel(hl.is_bridge, hl.is_tunnel, hl.is_ford) AS brunnel,
CASE WHEN highway IN ('footway', 'steps') THEN layer END AS layer,
CASE WHEN highway IN ('footway', 'steps') THEN level END AS level,
CASE WHEN highway IN ('footway', 'steps') THEN indoor END AS indoor,
@ -360,6 +370,7 @@ CREATE TABLE IF NOT EXISTS transportation_name.name_changes
ref character varying,
highway character varying,
construction character varying,
brunnel character varying,
level integer,
layer integer,
indoor boolean,
@ -372,16 +383,16 @@ BEGIN
IF (tg_op IN ('DELETE', 'UPDATE'))
THEN
INSERT INTO transportation_name.name_changes(is_old, osm_id, name, name_en, name_de, ref, highway, construction,
level, layer, indoor, network_type)
VALUES (TRUE, old.osm_id, old.name, old.name_en, old.name_de, old.ref, old.highway, old.construction, old.level,
old.layer, old.indoor, old.network_type);
brunnel, level, layer, indoor, network_type)
VALUES (TRUE, old.osm_id, old.name, old.name_en, old.name_de, old.ref, old.highway, old.construction,
old.brunnel, old.level, old.layer, old.indoor, old.network_type);
END IF;
IF (tg_op IN ('UPDATE', 'INSERT'))
THEN
INSERT INTO transportation_name.name_changes(is_old, osm_id, name, name_en, name_de, ref, highway, construction,
level, layer, indoor, network_type)
VALUES (FALSE, new.osm_id, new.name, new.name_en, new.name_de, new.ref, new.highway, new.construction, new.level,
new.layer, new.indoor, new.network_type);
brunnel, level, layer, indoor, network_type)
VALUES (FALSE, new.osm_id, new.name, new.name_en, new.name_de, new.ref, new.highway, new.construction,
new.brunnel, new.level, new.layer, new.indoor, new.network_type);
END IF;
RETURN NULL;
END;
@ -412,13 +423,14 @@ BEGIN
-- Compact the change history to keep only the first and last version, and then uniq version of row
CREATE TEMP TABLE name_changes_compact AS
SELECT DISTINCT ON (name, name_en, name_de, ref, highway, construction, level, layer, indoor, network_type)
SELECT DISTINCT ON (name, name_en, name_de, ref, highway, construction, brunnel, level, layer, indoor, network_type)
name,
name_en,
name_de,
ref,
highway,
construction,
brunnel,
level,
layer,
indoor,
@ -449,6 +461,7 @@ BEGIN
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.level IS NOT DISTINCT FROM c.level
AND n.layer IS NOT DISTINCT FROM c.layer
AND n.indoor IS NOT DISTINCT FROM c.indoor
@ -464,6 +477,7 @@ BEGIN
ref,
highway,
construction,
brunnel,
level,
layer,
indoor,
@ -480,6 +494,7 @@ BEGIN
n.ref,
n.highway,
n.construction,
n.brunnel,
n.level,
n.layer,
n.indoor,
@ -493,68 +508,125 @@ BEGIN
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.level IS NOT DISTINCT FROM c.level
AND n.layer IS NOT DISTINCT FROM c.layer
AND n.indoor IS NOT DISTINCT FROM c.indoor
AND n.network_type IS NOT DISTINCT FROM c.network_type
GROUP BY n.name, n.name_en, n.name_de, n.ref, n.highway, n.construction, n.level, n.layer, n.indoor, n.network_type
GROUP BY n.name, n.name_en, n.name_de, n.ref, n.highway, n.construction, n.brunnel, n.level, n.layer, n.indoor, n.network_type
) AS highway_union;
-- REFRESH osm_transportation_name_linestring_gen1
DELETE FROM osm_transportation_name_linestring_gen1 AS n
USING name_changes_compact AS c
WHERE
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
INSERT INTO osm_transportation_name_linestring_gen1
SELECT n.*
FROM osm_transportation_name_linestring_gen1_view AS n
JOIN name_changes_compact AS c ON
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
-- REFRESH osm_transportation_name_linestring_gen2
DELETE FROM osm_transportation_name_linestring_gen2 AS n
USING name_changes_compact AS c
WHERE
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
INSERT INTO osm_transportation_name_linestring_gen2
SELECT n.*
FROM osm_transportation_name_linestring_gen2_view AS n
JOIN name_changes_compact AS c ON
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
-- REFRESH osm_transportation_name_linestring_gen3
DELETE FROM osm_transportation_name_linestring_gen3 AS n
USING name_changes_compact AS c
WHERE
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
INSERT INTO osm_transportation_name_linestring_gen3
SELECT n.*
FROM osm_transportation_name_linestring_gen3_view AS n
JOIN name_changes_compact AS c ON
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
-- REFRESH osm_transportation_name_linestring_gen4
DELETE FROM osm_transportation_name_linestring_gen4 AS n
USING name_changes_compact AS c
WHERE
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
INSERT INTO osm_transportation_name_linestring_gen4
SELECT n.*
FROM osm_transportation_name_linestring_gen4_view AS n
JOIN name_changes_compact AS c ON
coalesce(n.name, n.ref) = c.name_ref AND
n.name IS NOT DISTINCT FROM c.name AND n.name_en IS NOT DISTINCT FROM c.name_en AND n.name_de IS NOT DISTINCT FROM c.name_de AND n.ref IS NOT DISTINCT FROM c.ref AND n.highway IS NOT DISTINCT FROM c.highway AND n.construction IS NOT DISTINCT FROM c.construction AND n.network IS NOT DISTINCT FROM c.network_type;
coalesce(n.name, n.ref) = c.name_ref
AND n.name IS NOT DISTINCT FROM c.name
AND n.name_en IS NOT DISTINCT FROM c.name_en
AND n.name_de IS NOT DISTINCT FROM c.name_de
AND n.ref IS NOT DISTINCT FROM c.ref
AND n.highway IS NOT DISTINCT FROM c.highway
AND n.construction IS NOT DISTINCT FROM c.construction
AND n.brunnel IS NOT DISTINCT FROM c.brunnel
AND n.network IS NOT DISTINCT FROM c.network_type;
DROP TABLE name_changes_compact;
DELETE FROM transportation_name.name_changes;