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