diff --git a/layers/aerodrome_label/aerodrome_label.sql b/layers/aerodrome_label/aerodrome_label.sql index 818d3fd8..9a68a2b5 100644 --- a/layers/aerodrome_label/aerodrome_label.sql +++ b/layers/aerodrome_label/aerodrome_label.sql @@ -19,6 +19,28 @@ CREATE OR REPLACE FUNCTION layer_aerodrome_label(bbox geometry, ) AS $$ +SELECT + -- etldoc: osm_aerodrome_label_point -> layer_aerodrome_label:z8 + -- etldoc: osm_aerodrome_label_point -> layer_aerodrome_label:z9 + ABS(osm_id) AS id, -- mvt feature IDs can't be negative + geometry, + name, + COALESCE(NULLIF(name_en, ''), name) AS name_en, + COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, + tags, + aerodrome_type AS class, + NULLIF(iata, '') AS iata, + NULLIF(icao, '') AS icao, + substring(ele FROM E'^(-?\\d+)(\\D|$)')::int AS ele, + round(substring(ele FROM E'^(-?\\d+)(\\D|$)')::int * 3.2808399)::int AS ele_ft +FROM osm_aerodrome_label_point +WHERE geometry && bbox + AND aerodrome_type = 'international' + AND iata <> '' + AND zoom_level BETWEEN 8 AND 9 + +UNION ALL + SELECT -- etldoc: osm_aerodrome_label_point -> layer_aerodrome_label:z10_ ABS(osm_id) AS id, -- mvt feature IDs can't be negative @@ -27,10 +49,7 @@ SELECT COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, tags, - CASE - %%FIELD_MAPPING: class %% - ELSE 'other' - END AS class, + aerodrome_type AS class, NULLIF(iata, '') AS iata, NULLIF(icao, '') AS icao, substring(ele FROM E'^(-?\\d+)(\\D|$)')::int AS ele, diff --git a/layers/aerodrome_label/etl_diagram.png b/layers/aerodrome_label/etl_diagram.png index 38796644..0198ff2e 100644 Binary files a/layers/aerodrome_label/etl_diagram.png and b/layers/aerodrome_label/etl_diagram.png differ diff --git a/layers/aerodrome_label/update_aerodrome_label_point.sql b/layers/aerodrome_label/update_aerodrome_label_point.sql index a0031e02..4a8c7ff7 100644 --- a/layers/aerodrome_label/update_aerodrome_label_point.sql +++ b/layers/aerodrome_label/update_aerodrome_label_point.sql @@ -2,6 +2,18 @@ DROP TRIGGER IF EXISTS trigger_flag ON osm_aerodrome_label_point; DROP TRIGGER IF EXISTS trigger_store ON osm_aerodrome_label_point; DROP TRIGGER IF EXISTS trigger_refresh ON aerodrome_label.updates; +-- Partial index for zoom 8/9 queries +CREATE INDEX IF NOT EXISTS osm_aerodrome_label_point_type_partial_idx + ON osm_aerodrome_label_point USING gist (geometry) + WHERE aerodrome_type = 'international' + AND iata <> ''; + +UPDATE osm_aerodrome_label_point SET aerodrome_type=( + CASE + %%FIELD_MAPPING: class %% + ELSE 'other' END +); + CREATE SCHEMA IF NOT EXISTS aerodrome_label; CREATE TABLE IF NOT EXISTS aerodrome_label.osm_ids