Merge remote-tracking branch 'github/master' into merge-gh-2025
# Conflicts: # layers/boundary/mapping.yaml # layers/mountain_peak/style.json # layers/place/style.json # layers/poi/poi.yaml
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 772 KiB After Width: | Height: | Size: 865 KiB |
@@ -102,10 +102,6 @@ name_de_field: &name_de
|
||||
name: name_de
|
||||
key: name:de
|
||||
type: string
|
||||
short_name_field: &short_name
|
||||
key: short_name
|
||||
name: short_name
|
||||
type: string
|
||||
tunnel_field: &tunnel
|
||||
key: tunnel
|
||||
name: is_tunnel
|
||||
@@ -236,7 +232,6 @@ tables:
|
||||
- *name_de
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- *short_name
|
||||
- *tunnel
|
||||
- *bridge
|
||||
- *ramp
|
||||
@@ -316,12 +311,10 @@ tables:
|
||||
- *name_de
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- *short_name
|
||||
- *tunnel
|
||||
- *bridge
|
||||
- *ramp
|
||||
- *ford
|
||||
- *oneway
|
||||
- *area
|
||||
- *service
|
||||
- *usage
|
||||
@@ -355,7 +348,6 @@ tables:
|
||||
- *name_de
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- *short_name
|
||||
- *tunnel
|
||||
- *bridge
|
||||
- *ramp
|
||||
@@ -394,12 +386,10 @@ tables:
|
||||
- *name_de
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- *short_name
|
||||
- *tunnel
|
||||
- *bridge
|
||||
- *ramp
|
||||
- *ford
|
||||
- *oneway
|
||||
- *area
|
||||
- *service
|
||||
- *usage
|
||||
@@ -493,6 +483,9 @@ tables:
|
||||
- name: colour
|
||||
key: colour
|
||||
type: string
|
||||
- name: ref_colour
|
||||
key: ref:colour
|
||||
type: string
|
||||
mapping:
|
||||
route:
|
||||
- road
|
||||
|
||||
@@ -17,7 +17,9 @@ $$
|
||||
'us-interstate', 'us-highway', 'us-state',
|
||||
'ca-transcanada', 'ca-provincial-arterial', 'ca-provincial',
|
||||
'gb-motorway', 'gb-trunk', 'gb-primary',
|
||||
'ie-motorway', 'ie-national', 'ie-regional'
|
||||
'ie-motorway', 'ie-national', 'ie-regional',
|
||||
'e-road',
|
||||
'a-road'
|
||||
);
|
||||
END
|
||||
$$;
|
||||
@@ -29,6 +31,27 @@ $$
|
||||
-- Canada
|
||||
'ca-transcanada', 'ca-provincial-arterial',
|
||||
-- United States
|
||||
'us-interstate');
|
||||
'us-interstate', 'us-highway',
|
||||
-- UK
|
||||
'gb-motorway', 'gb-trunk',
|
||||
-- Ireland
|
||||
'ie-motorway', 'ie-national',
|
||||
-- Europe
|
||||
'e-road',
|
||||
-- Asia
|
||||
'a-road'
|
||||
);
|
||||
$$ LANGUAGE sql IMMUTABLE
|
||||
PARALLEL SAFE;
|
||||
|
||||
CREATE OR REPLACE FUNCTION create_route_hstore(network TEXT, ref TEXT, name TEXT, colour TEXT, ref_colour TEXT)
|
||||
RETURNS hstore AS $$
|
||||
SELECT CASE
|
||||
WHEN network = '' THEN hstore('')
|
||||
ELSE hstore(
|
||||
ARRAY['network', 'ref', 'name', 'colour'],
|
||||
ARRAY[network, NULLIF(ref, ''), NULLIF(name, ''), COALESCE(NULLIF(colour, ''), NULLIF(ref_colour, ''))]
|
||||
)
|
||||
END;
|
||||
$$ LANGUAGE sql IMMUTABLE
|
||||
PARALLEL SAFE;
|
||||
|
||||
@@ -4529,37 +4529,21 @@
|
||||
"all",
|
||||
[
|
||||
"==",
|
||||
[
|
||||
"geometry-type"
|
||||
],
|
||||
"$type",
|
||||
"LineString"
|
||||
],
|
||||
[
|
||||
"all",
|
||||
[
|
||||
"match",
|
||||
[
|
||||
"get",
|
||||
"brunnel"
|
||||
],
|
||||
[
|
||||
"bridge",
|
||||
"tunnel"
|
||||
],
|
||||
false,
|
||||
true
|
||||
"!in",
|
||||
"brunnel",
|
||||
"bridge",
|
||||
"tunnel"
|
||||
],
|
||||
[
|
||||
"match",
|
||||
[
|
||||
"get",
|
||||
"class"
|
||||
],
|
||||
[
|
||||
"minor"
|
||||
],
|
||||
true,
|
||||
false
|
||||
"in",
|
||||
"class",
|
||||
"minor"
|
||||
]
|
||||
]
|
||||
],
|
||||
@@ -4633,37 +4617,21 @@
|
||||
"all",
|
||||
[
|
||||
"==",
|
||||
[
|
||||
"geometry-type"
|
||||
],
|
||||
"$type",
|
||||
"LineString"
|
||||
],
|
||||
[
|
||||
"all",
|
||||
[
|
||||
"match",
|
||||
[
|
||||
"get",
|
||||
"brunnel"
|
||||
],
|
||||
[
|
||||
"bridge",
|
||||
"tunnel"
|
||||
],
|
||||
false,
|
||||
true
|
||||
"!in",
|
||||
"brunnel",
|
||||
"bridge",
|
||||
"tunnel"
|
||||
],
|
||||
[
|
||||
"match",
|
||||
[
|
||||
"get",
|
||||
"class"
|
||||
],
|
||||
[
|
||||
"minor_construction"
|
||||
],
|
||||
true,
|
||||
false
|
||||
"in",
|
||||
"class",
|
||||
"minor_construction"
|
||||
]
|
||||
]
|
||||
],
|
||||
@@ -5607,7 +5575,7 @@
|
||||
"stops": [
|
||||
[
|
||||
8,
|
||||
" #787878"
|
||||
"#787878"
|
||||
],
|
||||
[
|
||||
14,
|
||||
@@ -7834,4 +7802,4 @@
|
||||
"order": 178
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ SELECT osm_id,
|
||||
NULLIF(service, '') AS service,
|
||||
access,
|
||||
CASE WHEN toll = TRUE THEN 1 END AS toll,
|
||||
CASE WHEN highway NOT IN ('', 'motorway') AND expressway = TRUE THEN 1 END AS expressway,
|
||||
CASE WHEN highway NOT IN ('', 'motorway') AND NOT is_ramp AND expressway = TRUE THEN 1 END AS expressway,
|
||||
NULLIF(layer, 0) AS layer,
|
||||
"level",
|
||||
CASE WHEN indoor = TRUE THEN 1 END AS indoor,
|
||||
@@ -372,7 +372,7 @@ FROM (
|
||||
hl.z_order
|
||||
FROM osm_highway_linestring hl
|
||||
LEFT OUTER JOIN osm_transportation_name_network n ON hl.osm_id = n.osm_id
|
||||
WHERE NOT is_area
|
||||
WHERE zoom_level > 11 AND NOT is_area
|
||||
AND
|
||||
CASE WHEN zoom_level = 12 THEN
|
||||
CASE WHEN transportation_filter_z12(hl.highway, hl.construction) THEN TRUE
|
||||
@@ -483,7 +483,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -518,7 +518,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -553,7 +553,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -589,7 +589,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -625,7 +625,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -659,7 +659,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -692,7 +692,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -725,7 +725,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -758,7 +758,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -791,7 +791,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -824,7 +824,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -857,7 +857,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -890,7 +890,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -923,7 +923,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -956,7 +956,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
@@ -990,7 +990,7 @@ FROM (
|
||||
is_ford,
|
||||
NULL::boolean AS expressway,
|
||||
is_ramp,
|
||||
is_oneway,
|
||||
NULL::int AS is_oneway,
|
||||
NULL AS man_made,
|
||||
layer,
|
||||
NULL::int AS level,
|
||||
|
||||
@@ -48,6 +48,7 @@ WHERE length(ref) > 1
|
||||
CREATE OR REPLACE FUNCTION osm_route_member_network_type(network text, ref text) RETURNS route_network_type AS
|
||||
$$
|
||||
SELECT CASE
|
||||
-- https://wiki.openstreetmap.org/wiki/United_States_roads_tagging
|
||||
WHEN network = 'US:I' THEN 'us-interstate'::route_network_type
|
||||
WHEN network = 'US:US' THEN 'us-highway'::route_network_type
|
||||
WHEN network LIKE 'US:__' THEN 'us-state'::route_network_type
|
||||
@@ -58,7 +59,7 @@ SELECT CASE
|
||||
CASE
|
||||
WHEN ref LIKE '4__' THEN 'ca-provincial-arterial'::route_network_type
|
||||
WHEN ref = 'QEW' THEN 'ca-provincial-arterial'::route_network_type
|
||||
ELSE 'ca-provincial-arterial'::route_network_type
|
||||
ELSE 'ca-provincial'::route_network_type
|
||||
END
|
||||
WHEN network = 'CA:MB:PTH' AND ref = '75' THEN 'ca-provincial-arterial'::route_network_type
|
||||
WHEN network = 'CA:AB:primary' AND ref IN ('2','3','4') THEN 'ca-provincial-arterial'::route_network_type
|
||||
@@ -85,6 +86,7 @@ CREATE TABLE IF NOT EXISTS transportation_route_member_coalesced
|
||||
name varchar,
|
||||
osmc_symbol varchar,
|
||||
colour varchar,
|
||||
ref_colour varchar,
|
||||
network_type route_network_type,
|
||||
concurrency_index integer,
|
||||
rank integer,
|
||||
@@ -104,33 +106,6 @@ BEGIN
|
||||
USING transportation_name.network_changes c
|
||||
WHERE c.is_old IS TRUE AND transportation_route_member_coalesced.member = c.osm_id;
|
||||
|
||||
-- Create GBR/IRE relations (so we can use it in the same way as other relations)
|
||||
-- etldoc: gbr_route_members_view -> transportation_route_member_coalesced
|
||||
INSERT INTO transportation_route_member_coalesced (member, network, ref, network_type, concurrency_index, osm_id)
|
||||
SELECT member, network, ref, osm_route_member_network_type(network, ref) AS network_type,
|
||||
1 AS concurrency_index, 0 AS osm_id
|
||||
FROM gbr_route_members_view
|
||||
WHERE full_update OR EXISTS(
|
||||
SELECT NULL
|
||||
FROM transportation_name.network_changes c
|
||||
WHERE c.is_old IS FALSE AND c.osm_id = gbr_route_members_view.member
|
||||
)
|
||||
GROUP BY member, network, ref
|
||||
ON CONFLICT (member, network, ref) DO NOTHING;
|
||||
|
||||
-- etldoc: ire_route_members_view -> transportation_route_member_coalesced
|
||||
INSERT INTO transportation_route_member_coalesced (member, network, ref, network_type, concurrency_index, osm_id)
|
||||
SELECT member, network, ref, osm_route_member_network_type(network, ref) AS network_type,
|
||||
1 AS concurrency_index, 0 AS osm_id
|
||||
FROM ire_route_members_view
|
||||
WHERE full_update OR EXISTS(
|
||||
SELECT NULL
|
||||
FROM transportation_name.network_changes c
|
||||
WHERE c.is_old IS FALSE AND c.osm_id = ire_route_members_view.member
|
||||
)
|
||||
GROUP BY member, network, ref
|
||||
ON CONFLICT (member, network, ref) DO NOTHING;
|
||||
|
||||
-- etldoc: osm_route_member -> transportation_route_member_coalesced
|
||||
INSERT INTO transportation_route_member_coalesced
|
||||
SELECT
|
||||
@@ -147,33 +122,40 @@ BEGIN
|
||||
END AS rank
|
||||
FROM (
|
||||
-- etldoc: osm_route_member -> osm_route_member
|
||||
-- etldoc: gbr_route_members_view -> osm_route_member
|
||||
-- etldoc: ire_route_members_view -> osm_route_member
|
||||
-- see http://wiki.openstreetmap.org/wiki/Relation:route#Road_routes
|
||||
SELECT DISTINCT ON (member, network, ref)
|
||||
member,
|
||||
network,
|
||||
ref,
|
||||
SELECT DISTINCT ON (member, COALESCE(rel.network, ''), COALESCE(rel.ref, ''))
|
||||
rel.member,
|
||||
COALESCE(NULLIF(rel.network,''), gb_way.network, ir_way.network, '') AS network,
|
||||
COALESCE(rel.ref, '') AS ref,
|
||||
osm_id,
|
||||
role,
|
||||
type,
|
||||
name,
|
||||
osmc_symbol,
|
||||
colour
|
||||
FROM osm_route_member
|
||||
colour,
|
||||
ref_colour
|
||||
FROM osm_route_member rel
|
||||
LEFT JOIN gbr_route_members_view gb_way ON (gb_way.member=rel.member)
|
||||
LEFT JOIN ire_route_members_view ir_way ON (ir_way.member=rel.member)
|
||||
WHERE full_update OR EXISTS(
|
||||
SELECT NULL
|
||||
FROM transportation_name.network_changes c
|
||||
WHERE c.is_old IS FALSE AND c.osm_id = osm_route_member.member
|
||||
WHERE c.is_old IS FALSE AND c.osm_id = rel.member
|
||||
)
|
||||
) osm_route_member_filtered
|
||||
ON CONFLICT (member, network, ref) DO UPDATE SET osm_id = EXCLUDED.osm_id, role = EXCLUDED.role,
|
||||
type = EXCLUDED.type, name = EXCLUDED.name,
|
||||
osmc_symbol = EXCLUDED.osmc_symbol, colour = EXCLUDED.colour,
|
||||
osmc_symbol = EXCLUDED.osmc_symbol, colour = EXCLUDED.colour, ref_colour = EXCLUDED.ref_colour,
|
||||
concurrency_index = EXCLUDED.concurrency_index,
|
||||
rank = EXCLUDED.rank;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Indexes which can be utilized during full-update for queries originating from update_osm_route_member() function
|
||||
CREATE INDEX IF NOT EXISTS osm_route_member_member_network_ref_idx ON osm_route_member (member, network, ref);
|
||||
CREATE INDEX IF NOT EXISTS osm_route_member_member_network_ref_idx
|
||||
ON osm_route_member (member, COALESCE(network, ''), COALESCE(ref, ''));
|
||||
|
||||
-- Analyze created index
|
||||
ANALYZE osm_route_member;
|
||||
|
||||
@@ -22,7 +22,7 @@ SELECT
|
||||
ST_Length(g) *
|
||||
COS(RADIANS(ST_Y(ST_Centroid(ST_Transform(g, 4326))))) *
|
||||
POW(2, zoom_level) / 20131560 > 0.02
|
||||
$$ LANGUAGE SQL IMMUTABLE LEAKPROOF
|
||||
$$ LANGUAGE SQL IMMUTABLE
|
||||
PARALLEL SAFE;
|
||||
|
||||
-- Determine whether a segment is long enough to have layer attributes
|
||||
@@ -39,7 +39,24 @@ SELECT
|
||||
COS(RADIANS(ST_Y(ST_Centroid(ST_Transform(g, 4326))))) *
|
||||
POW(2, zoom_level) / 20131560 > 0.02
|
||||
THEN layer END
|
||||
$$ LANGUAGE SQL IMMUTABLE LEAKPROOF
|
||||
$$ LANGUAGE SQL IMMUTABLE
|
||||
PARALLEL SAFE;
|
||||
|
||||
-- Determine whether a segment is long enough to have an attribute
|
||||
CREATE OR REPLACE FUNCTION visible_text(g geometry, attr text, zoom_level integer)
|
||||
RETURNS text AS
|
||||
$$
|
||||
SELECT
|
||||
CASE WHEN
|
||||
-- Width of a tile in meters (111,842 is the length of one degree of latitude at the equator in meters)
|
||||
-- 111,842 * 180 / 2^zoom_level
|
||||
-- = 20131560 / POW(2, zoom_level)
|
||||
-- Drop brunnel if length of way < 2% of tile width (less than 3 pixels)
|
||||
ST_Length(g) *
|
||||
COS(RADIANS(ST_Y(ST_Centroid(ST_Transform(g, 4326))))) *
|
||||
POW(2, zoom_level) / 20131560 > 0.02
|
||||
THEN attr END
|
||||
$$ LANGUAGE SQL IMMUTABLE
|
||||
PARALLEL SAFE;
|
||||
|
||||
-- Instead of using relations to find out the road names we
|
||||
@@ -49,7 +66,8 @@ $$ LANGUAGE SQL IMMUTABLE LEAKPROOF
|
||||
|
||||
-- etldoc: osm_highway_linestring -> osm_transportation_name_network
|
||||
-- etldoc: transportation_route_member_coalesced -> osm_transportation_name_network
|
||||
CREATE TABLE IF NOT EXISTS osm_transportation_name_network AS
|
||||
DROP TABLE IF EXISTS osm_transportation_name_network;
|
||||
CREATE TABLE osm_transportation_name_network AS
|
||||
SELECT
|
||||
geometry,
|
||||
osm_id,
|
||||
@@ -84,12 +102,12 @@ FROM (
|
||||
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,
|
||||
NULLIF(rm1.network, '') || '=' || COALESCE(rm1.ref, '') AS route_1,
|
||||
NULLIF(rm2.network, '') || '=' || COALESCE(rm2.ref, '') AS route_2,
|
||||
NULLIF(rm3.network, '') || '=' || COALESCE(rm3.ref, '') AS route_3,
|
||||
NULLIF(rm4.network, '') || '=' || COALESCE(rm4.ref, '') AS route_4,
|
||||
NULLIF(rm5.network, '') || '=' || COALESCE(rm5.ref, '') AS route_5,
|
||||
NULLIF(rm6.network, '') || '=' || COALESCE(rm6.ref, '') AS route_6,
|
||||
create_route_hstore(rm1.network, rm1.ref, rm1.name, rm1.colour, rm1.ref_colour) AS route_1,
|
||||
create_route_hstore(rm2.network, rm2.ref, rm2.name, rm2.colour, rm2.ref_colour) AS route_2,
|
||||
create_route_hstore(rm3.network, rm3.ref, rm3.name, rm3.colour, rm3.ref_colour) AS route_3,
|
||||
create_route_hstore(rm4.network, rm4.ref, rm4.name, rm4.colour, rm4.ref_colour) AS route_4,
|
||||
create_route_hstore(rm5.network, rm5.ref, rm5.name, rm5.colour, rm5.ref_colour) AS route_5,
|
||||
create_route_hstore(rm6.network, rm6.ref, rm6.name, rm6.colour, rm6.ref_colour) AS route_6,
|
||||
hl.z_order,
|
||||
LEAST(rm1.rank, rm2.rank, rm3.rank, rm4.rank, rm5.rank, rm6.rank) AS route_rank
|
||||
FROM osm_highway_linestring hl
|
||||
@@ -126,6 +144,8 @@ CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z11(
|
||||
id SERIAL,
|
||||
osm_id bigint,
|
||||
source_ids bigint[],
|
||||
new_source_ids bigint[],
|
||||
old_source_ids bigint[],
|
||||
highway character varying,
|
||||
network character varying,
|
||||
construction character varying,
|
||||
@@ -144,12 +164,23 @@ CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z11(
|
||||
layer integer
|
||||
);
|
||||
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z11 ADD COLUMN IF NOT EXISTS source_ids bigint[];
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z11 ADD COLUMN IF NOT EXISTS new_source_ids BIGINT[];
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z11 ADD COLUMN IF NOT EXISTS old_source_ids BIGINT[];
|
||||
|
||||
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen_z11_n_source_ids_not_null_idx
|
||||
ON osm_transportation_merge_linestring_gen_z11 ((new_source_ids IS NOT NULL));
|
||||
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen_z11_o_source_ids_not_null_idx
|
||||
ON osm_transportation_merge_linestring_gen_z11 ((old_source_ids IS NOT NULL));
|
||||
|
||||
-- Create osm_transportation_merge_linestring_gen_z10 as a copy of osm_transportation_merge_linestring_gen_z11 but
|
||||
-- drop the "source_ids" column. This can be done because z10 and z9 tables are only simplified and not merged,
|
||||
-- therefore relations to sources are direct via the id column.
|
||||
CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z10
|
||||
(LIKE osm_transportation_merge_linestring_gen_z11);
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z10 DROP COLUMN IF EXISTS source_ids;
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z10 DROP COLUMN IF EXISTS new_source_ids;
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z10 DROP COLUMN IF EXISTS old_source_ids;
|
||||
|
||||
-- Create osm_transportation_merge_linestring_gen_z9 as a copy of osm_transportation_merge_linestring_gen_z10
|
||||
CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z9
|
||||
@@ -445,10 +476,12 @@ CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen_z9_geometry_i
|
||||
|
||||
-- etldoc: osm_transportation_merge_linestring_gen_z9 -> osm_transportation_merge_linestring_gen_z8
|
||||
CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z8(
|
||||
geometry geometry('LineString'),
|
||||
geometry geometry,
|
||||
id SERIAL,
|
||||
osm_id bigint,
|
||||
source_ids int[],
|
||||
new_source_ids bigint[],
|
||||
old_source_ids bigint[],
|
||||
highway character varying,
|
||||
network character varying,
|
||||
construction character varying,
|
||||
@@ -459,12 +492,23 @@ CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z8(
|
||||
z_order integer
|
||||
);
|
||||
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z8 ADD COLUMN IF NOT EXISTS source_ids bigint[];
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z8 ADD COLUMN IF NOT EXISTS new_source_ids bigint[];
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z8 ADD COLUMN IF NOT EXISTS old_source_ids bigint[];
|
||||
|
||||
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen_z8_n_source_ids_not_null_idx
|
||||
ON osm_transportation_merge_linestring_gen_z8 ((new_source_ids IS NOT NULL));
|
||||
CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen_z8_o_source_ids_not_null_idx
|
||||
ON osm_transportation_merge_linestring_gen_z8 ((old_source_ids IS NOT NULL));
|
||||
|
||||
-- Create osm_transportation_merge_linestring_gen_z7 as a copy of osm_transportation_merge_linestring_gen_z8 but
|
||||
-- drop the "source_ids" column. This can be done because z7 to z5 tables are only simplified and not merged,
|
||||
-- therefore relations to sources are direct via the id column.
|
||||
CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z7
|
||||
(LIKE osm_transportation_merge_linestring_gen_z8);
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z7 DROP COLUMN IF EXISTS source_ids;
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z7 DROP COLUMN IF EXISTS new_source_ids;
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z7 DROP COLUMN IF EXISTS old_source_ids;
|
||||
|
||||
-- Create osm_transportation_merge_linestring_gen_z6 as a copy of osm_transportation_merge_linestring_gen_z7
|
||||
CREATE TABLE IF NOT EXISTS osm_transportation_merge_linestring_gen_z6
|
||||
@@ -662,25 +706,68 @@ BEGIN
|
||||
|
||||
-- etldoc: osm_transportation_merge_linestring_gen_z8 -> osm_transportation_merge_linestring_gen_z7
|
||||
INSERT INTO osm_transportation_merge_linestring_gen_z7
|
||||
SELECT ST_Simplify(geometry, ZRes(9)) AS geometry,
|
||||
id,
|
||||
osm_id,
|
||||
highway,
|
||||
network,
|
||||
construction,
|
||||
-- Remove bridge/tunnel/ford attributes from short sections of road so they can be merged
|
||||
visible_brunnel(geometry, is_bridge, 8) AS is_bridge,
|
||||
visible_brunnel(geometry, is_tunnel, 8) AS is_tunnel,
|
||||
visible_brunnel(geometry, is_ford, 8) AS is_ford,
|
||||
expressway,
|
||||
z_order
|
||||
FROM osm_transportation_merge_linestring_gen_z8
|
||||
WITH roads_z8 AS (
|
||||
SELECT id,
|
||||
osm_id,
|
||||
ST_SnapToGrid(
|
||||
ST_Node(
|
||||
ST_Collect(
|
||||
ST_Simplify(geometry, ZRes(9))
|
||||
)
|
||||
), ZRes(9)
|
||||
) AS geometry,
|
||||
highway,
|
||||
NULLIF(network, '') as network,
|
||||
construction,
|
||||
is_bridge,
|
||||
is_tunnel,
|
||||
is_ford,
|
||||
expressway,
|
||||
z_order
|
||||
FROM osm_transportation_merge_linestring_gen_z8
|
||||
GROUP BY id, osm_id, highway, construction, network, is_bridge, is_tunnel, is_ford, expressway, z_order
|
||||
),
|
||||
roads_z8_merge AS (
|
||||
SELECT id,
|
||||
osm_id,
|
||||
ST_LineMerge(
|
||||
ST_Union(geometry)
|
||||
) AS geometry,
|
||||
highway,
|
||||
network,
|
||||
construction,
|
||||
is_bridge,
|
||||
is_tunnel,
|
||||
is_ford,
|
||||
expressway,
|
||||
z_order
|
||||
FROM roads_z8
|
||||
GROUP BY id, osm_id, highway, network, construction, is_bridge, is_tunnel, is_ford, expressway, z_order
|
||||
)
|
||||
|
||||
SELECT CASE
|
||||
WHEN ST_StartPoint(geometry) = ST_EndPoint(geometry)
|
||||
THEN ST_RemovePoint(geometry, ST_NPoints(geometry) - 1)
|
||||
ELSE geometry
|
||||
END AS geometry,
|
||||
id,
|
||||
osm_id,
|
||||
highway,
|
||||
network,
|
||||
construction,
|
||||
-- Remove bridge/tunnel/ford attributes from short sections of road so they can be merged
|
||||
visible_brunnel(geometry, is_bridge, 8) AS is_bridge,
|
||||
visible_brunnel(geometry, is_tunnel, 8) AS is_tunnel,
|
||||
visible_brunnel(geometry, is_ford, 8) AS is_ford,
|
||||
expressway,
|
||||
z_order
|
||||
FROM roads_z8_merge
|
||||
-- Current view: motorway/trunk/primary
|
||||
WHERE
|
||||
(full_update IS TRUE OR EXISTS(
|
||||
SELECT NULL FROM transportation.changes_z4_z5_z6_z7
|
||||
WHERE transportation.changes_z4_z5_z6_z7.is_old IS FALSE AND
|
||||
transportation.changes_z4_z5_z6_z7.id = osm_transportation_merge_linestring_gen_z8.id
|
||||
transportation.changes_z4_z5_z6_z7.id = roads_z8_merge.id
|
||||
)) AND
|
||||
(ST_Length(geometry) > 50)
|
||||
ON CONFLICT (id) DO UPDATE SET osm_id = excluded.osm_id, highway = excluded.highway, network = excluded.network,
|
||||
@@ -803,7 +890,12 @@ BEGIN
|
||||
WHERE transportation.changes_z4_z5_z6_z7.is_old IS FALSE AND
|
||||
transportation.changes_z4_z5_z6_z7.id = osm_transportation_merge_linestring_gen_z5.id
|
||||
)) AND
|
||||
osm_national_network(network) AND
|
||||
-- All motorways without network (e.g. EU, Asia, South America)
|
||||
((highway = 'motorway' OR construction = 'motorway') AND (network is NULL or network = '')
|
||||
) OR
|
||||
-- All roads in network included in osm_national_network except gb-trunk and us-highway
|
||||
( (osm_national_network(network) AND network NOT IN ('gb-trunk', 'us-highway')
|
||||
)) AND
|
||||
-- Current view: national-importance motorways and trunks
|
||||
ST_Length(geometry) > 1000
|
||||
ON CONFLICT (id) DO UPDATE SET osm_id = excluded.osm_id, highway = excluded.highway, network = excluded.network,
|
||||
@@ -857,6 +949,12 @@ CREATE INDEX IF NOT EXISTS osm_transportation_merge_linestring_gen_z4_geometry_i
|
||||
-- osm_highway_linestring_gen_z11 -> osm_transportation_merge_linestring_gen_z11
|
||||
-- osm_transportation_merge_linestring_gen_z11 -> osm_transportation_merge_linestring_gen_z10
|
||||
-- osm_transportation_merge_linestring_gen_z11 -> osm_transportation_merge_linestring_gen_z9
|
||||
CREATE OR REPLACE AGGREGATE array_cat_agg(anycompatiblearray) (
|
||||
SFUNC=array_cat,
|
||||
STYPE=anycompatiblearray,
|
||||
INITCOND = '{}'
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS transportation.changes_z11
|
||||
(
|
||||
is_old boolean NULL,
|
||||
@@ -958,7 +1056,8 @@ BEGIN
|
||||
-- Create a table containing all LineStrings which should be merged
|
||||
CREATE TEMPORARY TABLE linestrings_to_merge AS
|
||||
-- Add all Source-LineStrings affected by this update
|
||||
SELECT osm_highway_linestring_gen_z11.osm_id, NULL::INTEGER AS id, geometry, highway, network, construction,
|
||||
SELECT osm_highway_linestring_gen_z11.osm_id, NULL::INTEGER AS id, NULL::BIGINT[] AS source_ids,
|
||||
geometry, highway, network, construction,
|
||||
visible_brunnel(geometry, is_bridge, 11) AS is_bridge,
|
||||
visible_brunnel(geometry, is_tunnel, 11) AS is_tunnel,
|
||||
visible_brunnel(geometry, is_ford, 11) AS is_ford,
|
||||
@@ -981,22 +1080,22 @@ BEGIN
|
||||
-- Drop temporary tables early to save resources
|
||||
DROP TABLE affected_merged_linestrings;
|
||||
|
||||
-- Create index on geometry column and analyze the created table to speed up subsequent queries
|
||||
CREATE INDEX ON linestrings_to_merge USING GIST (geometry);
|
||||
-- Analyze the created table to speed up subsequent queries
|
||||
ANALYZE linestrings_to_merge;
|
||||
|
||||
-- Add all Merged-LineStrings intersecting with Source-LineStrings affected by this update
|
||||
INSERT INTO linestrings_to_merge
|
||||
SELECT s.source_id AS osm_id, m.id,
|
||||
geometry, highway, network, construction,
|
||||
visible_brunnel(geometry, is_bridge, 11) AS is_bridge,
|
||||
visible_brunnel(geometry, is_tunnel, 11) AS is_tunnel,
|
||||
visible_brunnel(geometry, is_ford, 11) AS is_ford,
|
||||
expressway, bicycle, foot, horse, mtb_scale, sac_scale, access, toll,
|
||||
visible_layer(geometry, layer, 11) AS layer, z_order
|
||||
FROM osm_transportation_merge_linestring_gen_z11 m
|
||||
JOIN osm_transportation_merge_linestring_gen_z11_source_ids s ON (m.id = s.id)
|
||||
WHERE EXISTS(SELECT NULL FROM linestrings_to_merge WHERE ST_Intersects(linestrings_to_merge.geometry, m.geometry));
|
||||
SELECT NULL::BIGINT AS osm_id, m.id,
|
||||
ARRAY(
|
||||
SELECT s.source_id FROM osm_transportation_merge_linestring_gen_z11_source_ids s WHERE s.id = m.id
|
||||
)::BIGINT[] AS source_ids, m.geometry, m.highway, m.network, m.construction,
|
||||
visible_brunnel(m.geometry, m.is_bridge, 11) AS is_bridge,
|
||||
visible_brunnel(m.geometry, m.is_tunnel, 11) AS is_tunnel,
|
||||
visible_brunnel(m.geometry, m.is_ford, 11) AS is_ford,
|
||||
m.expressway, m.bicycle, m.foot, m.horse, m.mtb_scale, m.sac_scale, m.access, m.toll,
|
||||
visible_layer(m.geometry, m.layer, 11) AS layer, m.z_order
|
||||
FROM linestrings_to_merge
|
||||
JOIN osm_transportation_merge_linestring_gen_z11 m ON (ST_Intersects(linestrings_to_merge.geometry, m.geometry));
|
||||
|
||||
-- Analyze the created table to speed up subsequent queries
|
||||
ANALYZE linestrings_to_merge;
|
||||
@@ -1039,16 +1138,12 @@ BEGIN
|
||||
CREATE INDEX ON clustered_linestrings_to_merge (cluster_group, cluster);
|
||||
ANALYZE clustered_linestrings_to_merge;
|
||||
|
||||
-- Create temporary Merged-LineString to Source-LineStrings-ID column to store relations before they have been
|
||||
-- intersected
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z11 ADD COLUMN IF NOT EXISTS source_ids bigint[];
|
||||
|
||||
WITH inserted_linestrings AS (
|
||||
-- Merge LineStrings of each cluster and insert them
|
||||
INSERT INTO osm_transportation_merge_linestring_gen_z11(geometry, source_ids, highway, network, construction,
|
||||
is_bridge, is_tunnel, is_ford, expressway, z_order,
|
||||
bicycle, foot, horse, mtb_scale, sac_scale, access,
|
||||
toll, layer)
|
||||
INSERT INTO osm_transportation_merge_linestring_gen_z11(geometry, new_source_ids, old_source_ids, highway,
|
||||
network, construction, is_bridge, is_tunnel, is_ford,
|
||||
expressway, z_order, bicycle, foot, horse, mtb_scale,
|
||||
sac_scale, access, toll, layer)
|
||||
SELECT (ST_Dump(ST_LineMerge(ST_Union(geometry)))).geom AS geometry,
|
||||
-- We use St_Union instead of St_Collect to ensure no overlapping points exist within the geometries to
|
||||
-- merge. https://postgis.net/docs/ST_Union.html
|
||||
@@ -1057,7 +1152,8 @@ BEGIN
|
||||
-- https://postgis.net/docs/ST_LineMerge.html
|
||||
-- In order to not end up with a mixture of LineStrings and MultiLineStrings we dump eventual
|
||||
-- MultiLineStrings via ST_Dump. https://postgis.net/docs/ST_Dump.html
|
||||
array_agg(osm_id) AS source_ids,
|
||||
coalesce( array_agg(osm_id) FILTER (WHERE osm_id IS NOT NULL), '{}' )::BIGINT[] AS new_source_ids,
|
||||
array_cat_agg(source_ids)::BIGINT[] AS old_source_ids,
|
||||
highway,
|
||||
network,
|
||||
construction,
|
||||
@@ -1077,7 +1173,7 @@ BEGIN
|
||||
FROM clustered_linestrings_to_merge
|
||||
GROUP BY cluster_group, cluster, highway, network, construction, is_bridge, is_tunnel, is_ford, expressway,
|
||||
bicycle, foot, horse, mtb_scale, sac_scale, access, toll, layer
|
||||
RETURNING id, source_ids, geometry
|
||||
RETURNING id, new_source_ids, old_source_ids, geometry
|
||||
)
|
||||
-- Store OSM-IDs of Source-LineStrings by intersecting Merged-LineStrings with their sources.
|
||||
-- This is required because ST_LineMerge only merges across singular intersections and groups its output into a
|
||||
@@ -1085,8 +1181,14 @@ BEGIN
|
||||
INSERT INTO osm_transportation_merge_linestring_gen_z11_source_ids (id, source_id)
|
||||
SELECT m.id, source_id
|
||||
FROM (
|
||||
SELECT id, unnest(source_ids) AS source_id, geometry
|
||||
SELECT id, source_id, geometry
|
||||
FROM inserted_linestrings
|
||||
CROSS JOIN LATERAL (
|
||||
SELECT DISTINCT all_source_ids.source_id
|
||||
FROM unnest(
|
||||
array_cat(inserted_linestrings.new_source_ids, inserted_linestrings.old_source_ids)
|
||||
) AS all_source_ids(source_id)
|
||||
) source_ids
|
||||
) m
|
||||
JOIN osm_highway_linestring_gen_z11 s ON (m.source_id = s.osm_id)
|
||||
WHERE ST_Intersects(s.geometry, m.geometry)
|
||||
@@ -1095,8 +1197,9 @@ BEGIN
|
||||
-- Cleanup remaining table
|
||||
DROP TABLE clustered_linestrings_to_merge;
|
||||
|
||||
-- Drop temporary Merged-LineString to Source-LineStrings-ID column
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z11 DROP COLUMN IF EXISTS source_ids;
|
||||
-- Restore temporary Merged-LineString to Source-LineStrings-ID columns
|
||||
UPDATE osm_transportation_merge_linestring_gen_z11 SET new_source_ids = NULL WHERE new_source_ids IS NOT NULL;
|
||||
UPDATE osm_transportation_merge_linestring_gen_z11 SET old_source_ids = NULL WHERE old_source_ids IS NOT NULL;
|
||||
|
||||
-- noinspection SqlWithoutWhere
|
||||
DELETE FROM transportation.changes_z11;
|
||||
@@ -1246,7 +1349,7 @@ BEGIN
|
||||
-- Create a table containing all LineStrings which should be merged
|
||||
CREATE TEMPORARY TABLE linestrings_to_merge AS
|
||||
-- Add all Source-LineStrings affected by this update
|
||||
SELECT id AS source_id, NULL::int AS id, geometry, highway, network, construction,
|
||||
SELECT id AS source_id, NULL::INT AS id, NULL::INT[] AS source_ids, geometry, highway, network, construction,
|
||||
visible_brunnel(geometry, is_bridge, 9) AS is_bridge,
|
||||
visible_brunnel(geometry, is_tunnel, 9) AS is_tunnel,
|
||||
visible_brunnel(geometry, is_ford, 9) AS is_ford, expressway, z_order
|
||||
@@ -1260,31 +1363,32 @@ BEGIN
|
||||
ORDER BY source_id
|
||||
) affected_source_linestrings
|
||||
JOIN osm_transportation_merge_linestring_gen_z9 ON (
|
||||
affected_source_linestrings.source_id = osm_transportation_merge_linestring_gen_z9.id AND
|
||||
(
|
||||
highway IN ('motorway', 'trunk', 'primary') OR
|
||||
construction IN ('motorway', 'trunk', 'primary')
|
||||
) AND
|
||||
ST_IsValid(geometry) AND
|
||||
access IS NULL
|
||||
);
|
||||
affected_source_linestrings.source_id = osm_transportation_merge_linestring_gen_z9.id
|
||||
)
|
||||
WHERE (
|
||||
highway IN ('motorway', 'trunk', 'primary') OR
|
||||
construction IN ('motorway', 'trunk', 'primary')
|
||||
) AND
|
||||
ST_IsValid(geometry) AND
|
||||
access IS NULL;
|
||||
|
||||
-- Drop temporary tables early to save resources
|
||||
DROP TABLE affected_merged_linestrings;
|
||||
|
||||
-- Create index on geometry column and analyze the created table to speed up subsequent queries
|
||||
CREATE INDEX ON linestrings_to_merge USING GIST (geometry);
|
||||
-- Analyze the created table to speed up subsequent queries
|
||||
ANALYZE linestrings_to_merge;
|
||||
|
||||
-- Add all Merged-LineStrings intersecting with Source-LineStrings affected by this update
|
||||
INSERT INTO linestrings_to_merge
|
||||
SELECT s.source_id, m.id, geometry, highway, network, construction,
|
||||
visible_brunnel(geometry, is_bridge, 9) AS is_bridge,
|
||||
visible_brunnel(geometry, is_tunnel, 9) AS is_tunnel,
|
||||
visible_brunnel(geometry, is_ford, 9) AS is_ford, expressway, z_order
|
||||
FROM osm_transportation_merge_linestring_gen_z8 m
|
||||
JOIN osm_transportation_merge_linestring_gen_z8_source_ids s ON (m.id = s.id)
|
||||
WHERE EXISTS(SELECT NULL FROM linestrings_to_merge WHERE ST_Intersects(linestrings_to_merge.geometry, m.geometry));
|
||||
SELECT NULL::INT AS source_id, m.id,
|
||||
ARRAY(
|
||||
SELECT s.source_id FROM osm_transportation_merge_linestring_gen_z8_source_ids s WHERE s.id = m.id
|
||||
)::INT[] AS source_ids, m.geometry, m.highway, m.network, m.construction,
|
||||
visible_brunnel(m.geometry, m.is_bridge, 9) AS is_bridge,
|
||||
visible_brunnel(m.geometry, m.is_tunnel, 9) AS is_tunnel,
|
||||
visible_brunnel(m.geometry, m.is_ford, 9) AS is_ford, m.expressway, m.z_order
|
||||
FROM linestrings_to_merge
|
||||
JOIN osm_transportation_merge_linestring_gen_z8 m ON (ST_Intersects(linestrings_to_merge.geometry, m.geometry));
|
||||
|
||||
-- Analyze the created table to speed up subsequent queries
|
||||
ANALYZE linestrings_to_merge;
|
||||
@@ -1325,14 +1429,13 @@ BEGIN
|
||||
CREATE INDEX ON clustered_linestrings_to_merge (cluster_group, cluster);
|
||||
ANALYZE clustered_linestrings_to_merge;
|
||||
|
||||
-- Create temporary Merged-LineString to Source-LineStrings-ID column to store relations before they have been
|
||||
-- Create temporary Merged-LineString to Source-LineStrings-ID columns to store relations before they have been
|
||||
-- intersected
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z8 ADD COLUMN IF NOT EXISTS source_ids bigint[];
|
||||
|
||||
WITH inserted_linestrings AS (
|
||||
-- Merge LineStrings of each cluster and insert them
|
||||
INSERT INTO osm_transportation_merge_linestring_gen_z8(geometry, source_ids, highway, network, construction,
|
||||
is_bridge, is_tunnel, is_ford, expressway, z_order)
|
||||
INSERT INTO osm_transportation_merge_linestring_gen_z8(geometry, new_source_ids, old_source_ids, highway,
|
||||
network, construction, is_bridge, is_tunnel, is_ford,
|
||||
expressway, z_order)
|
||||
SELECT (ST_Dump(ST_Simplify(ST_LineMerge(ST_Union(geometry)), ZRes(10)))).geom AS geometry,
|
||||
-- We use St_Union instead of St_Collect to ensure no overlapping points exist within the geometries to
|
||||
-- merge. https://postgis.net/docs/ST_Union.html
|
||||
@@ -1341,7 +1444,8 @@ BEGIN
|
||||
-- https://postgis.net/docs/ST_LineMerge.html
|
||||
-- In order to not end up with a mixture of LineStrings and MultiLineStrings we dump eventual
|
||||
-- MultiLineStrings via ST_Dump. https://postgis.net/docs/ST_Dump.html
|
||||
array_agg(source_id) as source_ids,
|
||||
coalesce( array_agg(source_id) FILTER (WHERE source_id IS NOT NULL), '{}' )::INT[] AS new_source_ids,
|
||||
array_cat_agg(source_ids)::INT[] as old_source_ids,
|
||||
highway,
|
||||
network,
|
||||
construction,
|
||||
@@ -1352,7 +1456,7 @@ BEGIN
|
||||
min(z_order) as z_order
|
||||
FROM clustered_linestrings_to_merge
|
||||
GROUP BY cluster_group, cluster, highway, network, construction, is_bridge, is_tunnel, is_ford, expressway
|
||||
RETURNING id, source_ids, geometry
|
||||
RETURNING id, new_source_ids, old_source_ids, geometry
|
||||
)
|
||||
-- Store OSM-IDs of Source-LineStrings by intersecting Merged-LineStrings with their sources. This required because
|
||||
-- ST_LineMerge only merges across singular intersections and groups its output into a MultiLineString if
|
||||
@@ -1360,8 +1464,14 @@ BEGIN
|
||||
INSERT INTO osm_transportation_merge_linestring_gen_z8_source_ids (id, source_id)
|
||||
SELECT m.id, m.source_id
|
||||
FROM (
|
||||
SELECT id, unnest(source_ids) AS source_id, geometry
|
||||
SELECT id, source_id, geometry
|
||||
FROM inserted_linestrings
|
||||
CROSS JOIN LATERAL (
|
||||
SELECT DISTINCT all_source_ids.source_id
|
||||
FROM unnest(
|
||||
array_cat(inserted_linestrings.new_source_ids, inserted_linestrings.old_source_ids)
|
||||
) AS all_source_ids(source_id)
|
||||
) source_ids
|
||||
) m
|
||||
JOIN osm_transportation_merge_linestring_gen_z9 s ON (m.source_id = s.id)
|
||||
WHERE ST_Intersects(s.geometry, m.geometry)
|
||||
@@ -1370,9 +1480,10 @@ BEGIN
|
||||
-- Cleanup
|
||||
DROP TABLE clustered_linestrings_to_merge;
|
||||
|
||||
-- Drop temporary Merged-LineString to Source-LineStrings-ID column
|
||||
ALTER TABLE osm_transportation_merge_linestring_gen_z8 DROP COLUMN IF EXISTS source_ids;
|
||||
-- Restore temporary Merged-LineString to Source-LineStrings-ID columns
|
||||
|
||||
UPDATE osm_transportation_merge_linestring_gen_z8 SET new_source_ids = NULL WHERE new_source_ids IS NOT NULL;
|
||||
UPDATE osm_transportation_merge_linestring_gen_z8 SET old_source_ids = NULL WHERE old_source_ids IS NOT NULL;
|
||||
-- noinspection SqlWithoutWhere
|
||||
DELETE FROM transportation.changes_z9;
|
||||
-- noinspection SqlWithoutWhere
|
||||
|
||||
Reference in New Issue
Block a user