diff --git a/layers/mountain_peak/layer.sql b/layers/mountain_peak/layer.sql new file mode 100644 index 00000000..1e1cde07 --- /dev/null +++ b/layers/mountain_peak/layer.sql @@ -0,0 +1,23 @@ +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, ele int, ele_ft int, "rank" int) AS $$ + -- etldoc: osm_housenumber_point -> layer_housenumber:z14_ + SELECT osm_id, geometry, name, name_en, ele, ele_ft, rank + FROM ( + SELECT osm_id, geometry, name, name_en, + substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele, + round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399) AS ele_ft, + row_number() OVER ( + PARTITION BY LabelGrid(geometry, 100 * pixel_width) + ORDER BY ( + substring(ele from E'^(-?\\d+)(\\D|$)')::int + + (CASE WHEN length(NULLIF(wikipedia, '')) > 0 THEN 10000 ELSE 0 END) + + (CASE WHEN length(NULLIF(name, '')) > 0 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 new file mode 100644 index 00000000..ea2fed46 --- /dev/null +++ b/layers/mountain_peak/mapping.yaml @@ -0,0 +1,26 @@ + +tables: + + # etldoc: imposm3 -> osm_housenumber_point + peak_point: + type: point + fields: + - name: osm_id + type: id + - name: geometry + type: geometry + - name: name + key: name + type: string + - name: name_en + key: name:en + type: string + - name: ele + key: ele + type: string + - name: wikipedia + key: wikipedia + type: string + mapping: + natural: + - peak diff --git a/layers/mountain_peak/mountain_peak.yaml b/layers/mountain_peak/mountain_peak.yaml new file mode 100644 index 00000000..de64889d --- /dev/null +++ b/layers/mountain_peak/mountain_peak.yaml @@ -0,0 +1,20 @@ +layer: + id: "mountain_peak" + description: | + [Peaks](http://wiki.openstreetmap.org/wiki/Tag:natural%3Dpeak) + or [volcanoes](http://wiki.openstreetmap.org/wiki/Tag:natural%3Dvolcano) + buffer_size: 64 + srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over + fields: + name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the peak. + name_en: The english `name:en` value if available. + elev_m: Elevation (`ele`) in meters. + datasource: + geometry_field: geometry + srid: 900913 + query: (SELECT osm_id, geometry, name, name_en, ele, ele_ft, rank FROM layer_mountain_peak(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t +schema: + - ./layer.sql +datasources: + - type: imposm3 + mapping_file: ./mapping.yaml diff --git a/openmaptiles.yaml b/openmaptiles.yaml index c2078840..e7c9a6bc 100644 --- a/openmaptiles.yaml +++ b/openmaptiles.yaml @@ -4,6 +4,7 @@ tileset: - layers/waterway/waterway.yaml - layers/landcover/landcover.yaml - layers/landuse/landuse.yaml + - layers/mountain_peak/mountain_peak.yaml - layers/park/park.yaml - layers/boundary/boundary.yaml - layers/aeroway/aeroway.yaml