openmaptiles/layers/highway_name/merge_highways.sql
2016-10-25 14:54:34 +02:00

30 lines
978 B
SQL

-- Instead of using relations to find out the road names we
-- stitch together the touching ways with the same name
-- to allow for nice label rendering
-- Because this works well for roads that do not have relations as well
CREATE TABLE IF NOT EXISTS osm_highway_name_linestring AS (
SELECT
(ST_Dump(geometry)).geom AS geometry,
-- NOTE: The osm_id is no longer the original one which can make it difficult
-- to lookup road names by OSM ID
member_osm_ids[0] AS osm_id,
member_osm_ids,
name,
highway,
z_order
FROM (
SELECT
ST_LineMerge(ST_Union(geometry)) AS geometry,
name,
highway,
min(z_order) AS z_order,
array_agg(DISTINCT osm_id) AS member_osm_ids
FROM osm_highway_linestring
-- We only care about roads for labelling
WHERE name <> ''
GROUP BY name, highway
) AS highway_union
);
CREATE INDEX IF NOT EXISTS osm_highway_name_linestring_geometry_idx ON osm_important_place_point USING gist(geometry);