From afa85ea37eb7f5a8d9544281ad98fd67c25cf84c Mon Sep 17 00:00:00 2001 From: jirik <jirik@users.noreply.github.com> Date: Tue, 28 Nov 2017 19:38:59 +0100 Subject: [PATCH] Add osm_id as key of POI --- layers/poi/layer.sql | 20 +++++++++++++++----- layers/poi/poi.yaml | 4 +++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/layers/poi/layer.sql b/layers/poi/layer.sql index 5103c0e6..c16fab1b 100644 --- a/layers/poi/layer.sql +++ b/layers/poi/layer.sql @@ -4,7 +4,7 @@ CREATE OR REPLACE FUNCTION layer_poi(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, class text, subclass text, agg_stop integer, "rank" int) AS $$ - SELECT osm_id, geometry, NULLIF(name, '') AS name, + SELECT osm_id_hash AS osm_id, geometry, NULLIF(name, '') AS name, COALESCE(NULLIF(name_en, ''), name) AS name_en, COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de, tags, @@ -22,14 +22,17 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de FROM ( -- etldoc: osm_poi_point -> layer_poi:z12 -- etldoc: osm_poi_point -> layer_poi:z13 - SELECT * FROM osm_poi_point + SELECT *, + osm_id*10 AS osm_id_hash FROM osm_poi_point WHERE geometry && bbox AND zoom_level BETWEEN 12 AND 13 AND ((subclass='station' AND mapping_key = 'railway') OR subclass IN ('halt', 'ferry_terminal')) UNION ALL + -- etldoc: osm_poi_point -> layer_poi:z14_ - SELECT * FROM osm_poi_point + SELECT *, + osm_id*10 AS osm_id_hash FROM osm_poi_point WHERE geometry && bbox AND zoom_level >= 14 @@ -37,16 +40,23 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de -- etldoc: osm_poi_polygon -> layer_poi:z12 -- etldoc: osm_poi_polygon -> layer_poi:z13 SELECT *, - NULL::INTEGER AS agg_stop + NULL::INTEGER AS agg_stop, + CASE WHEN osm_id<0 THEN -osm_id*10+4 + ELSE osm_id*10+1 + END AS osm_id_hash FROM osm_poi_polygon WHERE geometry && bbox AND zoom_level BETWEEN 12 AND 13 AND ((subclass='station' AND mapping_key = 'railway') OR subclass IN ('halt', 'ferry_terminal')) + UNION ALL -- etldoc: osm_poi_polygon -> layer_poi:z14_ SELECT *, - NULL::INTEGER AS agg_stop + NULL::INTEGER AS agg_stop, + CASE WHEN osm_id<0 THEN -osm_id*10+4 + ELSE osm_id*10+1 + END AS osm_id_hash FROM osm_poi_polygon WHERE geometry && bbox AND zoom_level >= 14 diff --git a/layers/poi/poi.yaml b/layers/poi/poi.yaml index 29999546..6c215e5c 100644 --- a/layers/poi/poi.yaml +++ b/layers/poi/poi.yaml @@ -42,8 +42,10 @@ layer: values: [1] datasource: geometry_field: geometry + key_field: osm_id + key_field_as_attribute: no srid: 900913 - query: (SELECT geometry, name, name_en, name_de, {name_languages}, class, subclass, agg_stop, rank FROM layer_poi(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t + query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, subclass, agg_stop, rank FROM layer_poi(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t schema: - ./public_transport_stop_type.sql - ./update_poi_polygon.sql