diff --git a/layers/mountain_peak/layer.sql b/layers/mountain_peak/layer.sql index 1fc292c..6c9643c 100644 --- a/layers/mountain_peak/layer.sql +++ b/layers/mountain_peak/layer.sql @@ -2,29 +2,52 @@ -- etldoc: layer_mountain_peak[shape=record fillcolor=lightpink, -- etldoc: style="rounded,filled", label="layer_mountain_peak | z7+" ] ; -CREATE OR REPLACE FUNCTION layer_mountain_peak(bbox geometry, zoom_level integer, pixel_width numeric) -RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, ele int, ele_ft int, "rank" int) AS $$ +CREATE OR REPLACE FUNCTION layer_mountain_peak( + bbox geometry, + zoom_level integer, + pixel_width numeric) + RETURNS TABLE( + osm_id bigint, + geometry geometry, + name text, + name_en text, + name_de text, + class text, + tags hstore, + ele int, + ele_ft int, + "rank" int) AS +$$ -- etldoc: osm_peak_point -> layer_mountain_peak:z7_ - SELECT osm_id, geometry, name, name_en, name_de, tags, ele::int, ele_ft::int, rank::int - FROM ( - SELECT osm_id, geometry, name, - COALESCE(NULLIF(name_en, ''), name) AS name_en, - COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, - tags, - substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele, - round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft, - row_number() OVER ( - PARTITION BY LabelGrid(geometry, 100 * pixel_width) - ORDER BY ( - substring(ele from E'^(-?\\d+)(\\D|$)')::int + - (CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) + - (CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END) - ) DESC - )::int AS "rank" - FROM osm_peak_point - WHERE geometry && bbox AND ele is not null AND ele ~ E'^-?\\d+' - ) AS ranked_peaks - WHERE zoom_level >= 7 AND (rank <= 5 OR zoom_level >= 14) - ORDER BY "rank" ASC; + SELECT + osm_id, + geometry, + name, + name_en, + name_de, + tags -> 'natural' AS class, + tags, + ele::int, + ele_ft::int, + rank::int FROM ( + SELECT osm_id, geometry, name, + COALESCE(NULLIF(name_en, ''), name) AS name_en, + COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, + tags, + substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele, + round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft, + row_number() OVER ( + PARTITION BY LabelGrid(geometry, 100 * pixel_width) + ORDER BY ( + substring(ele from E'^(-?\\d+)(\\D|$)')::int + + (CASE WHEN NULLIF(wikipedia, '') is not null THEN 10000 ELSE 0 END) + + (CASE WHEN NULLIF(name, '') is not null THEN 10000 ELSE 0 END) + ) DESC + )::int AS "rank" + FROM osm_peak_point + WHERE geometry && bbox AND ele is not null AND ele ~ E'^-?\\d+' + ) AS ranked_peaks + WHERE zoom_level >= 7 AND (rank <= 5 OR zoom_level >= 14) + ORDER BY "rank" ASC; $$ LANGUAGE SQL IMMUTABLE; diff --git a/layers/mountain_peak/mapping.yaml b/layers/mountain_peak/mapping.yaml index 890fd58..7b9cc68 100644 --- a/layers/mountain_peak/mapping.yaml +++ b/layers/mountain_peak/mapping.yaml @@ -28,3 +28,4 @@ tables: mapping: natural: - peak + - volcano diff --git a/layers/mountain_peak/mapping_diagram.png b/layers/mountain_peak/mapping_diagram.png index 842b8f5..77e06db 100644 Binary files a/layers/mountain_peak/mapping_diagram.png and b/layers/mountain_peak/mapping_diagram.png differ diff --git a/layers/mountain_peak/mountain_peak.yaml b/layers/mountain_peak/mountain_peak.yaml index 8d82910..1d75bae 100644 --- a/layers/mountain_peak/mountain_peak.yaml +++ b/layers/mountain_peak/mountain_peak.yaml @@ -8,13 +8,19 @@ layer: name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak. name_en: English name `name:en` if available, otherwise `name`. name_de: German name `name:de` if available, otherwise `name` or `name:en`. + class: + description: | + Use the **class** to differentiate between mountain peak and volcano. + values: + - peak + - volcano ele: Elevation (`ele`) in meters. ele_ft: Elevation (`ele`) in feets. rank: Rank of the peak within one tile (starting at 1 that is the most important peak). datasource: geometry_field: geometry srid: 900913 - query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t + query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t schema: - ./update_peak_point.sql - ./layer.sql