From 6ef138635db22c44ec839d5739176a30f0900b3f Mon Sep 17 00:00:00 2001 From: Brian Sperlongano Date: Fri, 20 Aug 2021 10:40:02 -0400 Subject: [PATCH] Fix negative feature IDs (#1185) This PR removes the possibility of negative feature IDs for the `aerodrome_label` layer by defining the feature as the absolute value of the OSM id (imposm maps relations with negative numbers). There is a very unlikely scenario in which a relation and a way have the same ID (and are also in the same tile), however, unique IDs are not a strict requirement of MVT. Noted in: https://github.com/openmaptiles/openmaptiles/pull/1176#issuecomment-902503655 Positive feature ID for Quonset State Airport, which is mapped as a relation: ![image](https://user-images.githubusercontent.com/3254090/130232322-c797d491-ece9-4889-9695-ffb6f3ac011f.png) --- layers/aerodrome_label/aerodrome_label.sql | 4 ++-- layers/aerodrome_label/aerodrome_label.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/layers/aerodrome_label/aerodrome_label.sql b/layers/aerodrome_label/aerodrome_label.sql index 7c2c41f..818d3fd 100644 --- a/layers/aerodrome_label/aerodrome_label.sql +++ b/layers/aerodrome_label/aerodrome_label.sql @@ -5,7 +5,7 @@ CREATE OR REPLACE FUNCTION layer_aerodrome_label(bbox geometry, zoom_level integer) RETURNS TABLE ( - osm_id bigint, + id bigint, geometry geometry, name text, name_en text, @@ -21,7 +21,7 @@ AS $$ SELECT -- etldoc: osm_aerodrome_label_point -> layer_aerodrome_label:z10_ - osm_id, + ABS(osm_id) AS id, -- mvt feature IDs can't be negative geometry, name, COALESCE(NULLIF(name_en, ''), name) AS name_en, diff --git a/layers/aerodrome_label/aerodrome_label.yaml b/layers/aerodrome_label/aerodrome_label.yaml index a1e398a..3a48cf6 100644 --- a/layers/aerodrome_label/aerodrome_label.yaml +++ b/layers/aerodrome_label/aerodrome_label.yaml @@ -38,10 +38,10 @@ layer: ele_ft: Elevation (`ele`) in feets. datasource: geometry_field: geometry - key_field: osm_id + key_field: id key_field_as_attribute: no srid: 900913 - query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, iata, icao, ele, ele_ft FROM layer_aerodrome_label(!bbox!, z(!scale_denominator!))) AS t + query: (SELECT id, geometry, name, name_en, name_de, {name_languages}, class, iata, icao, ele, ele_ft FROM layer_aerodrome_label(!bbox!, z(!scale_denominator!))) AS t schema: - ./update_aerodrome_label_point.sql - ./aerodrome_label.sql