]> git.openstreetmap.org Git - nominatim.git/commitdiff
simplify getNearestRoadFeature function
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 26 Feb 2020 09:04:17 +0000 (10:04 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 26 Feb 2020 09:58:55 +0000 (10:58 +0100)
The function only ever returns one result of which only the
place_id is used. So simplify it to return a single place_id
only (or NULL if none is found). Rename funciton to avoid
conflicts when updating an existing database.

sql/functions/aux_property.sql
sql/functions/placex_triggers.sql
sql/partition-functions.src.sql
sql/tiger_import_start.sql

index cee5cfb2e3619145b4b10ff856d6057d54b59b3a..6dd99eb241436e286c65602d3b5be3b94b1a133f 100644 (file)
@@ -28,8 +28,8 @@ BEGIN
   END IF;
 
   IF out_parent_place_id IS NULL THEN
-    FOR location IN SELECT place_id FROM getNearestRoadFeature(out_partition, place_centroid) LOOP
-      out_parent_place_id := location.place_id;
+    SELECT getNearestRoadPlaceId(out_partition, place_centroid)
+      INTO out_parent_place_id;
     END LOOP;
   END IF;
 
index fb3f2dc5e6b920d76180a093810a9edb1fbfba36..ffc83fa3aa03197e9a3ca22ac32cfbcbf219a12d 100644 (file)
@@ -135,8 +135,7 @@ BEGIN
     IF fallback THEN
       IF ST_Area(bbox) < 0.01 THEN
         -- for smaller features get the nearest road
-        SELECT place_id FROM getNearestRoadFeature(poi_partition, bbox)
-          INTO parent_place_id;
+        SELECT getNearestRoadPlaceId(poi_partition, bbox) INTO parent_place_id;
         --DEBUG: RAISE WARNING 'Checked for nearest way (%)', parent_place_id;
       ELSE
         -- for larger features simply find the area with the largest rank that
index 41758c83d22481234b2e2253f30169033e03a36d..4a8f913996a6b6f03c071f6e3163986fdf3e482e 100644 (file)
@@ -214,29 +214,28 @@ END
 $$
 LANGUAGE plpgsql;
 
-create or replace function getNearestRoadFeature(in_partition INTEGER, point GEOMETRY) RETURNS setof nearfeature AS $$
+CREATE OR REPLACE FUNCTION getNearestRoadPlaceId(in_partition INTEGER, point GEOMETRY)
+  RETURNS BIGINT
+  AS $$
 DECLARE
-  r nearfeature%rowtype;
-  search_diameter FLOAT;  
+  r RECORD;
+  search_diameter FLOAT;
 BEGIN
 
 -- start
   IF in_partition = -partition- THEN
     search_diameter := 0.00005;
     WHILE search_diameter < 0.1 LOOP
-      FOR r IN 
-        SELECT place_id, null, null, null,
-            ST_Distance(geometry, point) as distance, null as isguess
-            FROM location_road_-partition-
-            WHERE ST_DWithin(geometry, point, search_diameter) 
-        ORDER BY distance ASC limit 1
+      FOR r IN
+        SELECT place_id FROM location_road_-partition-
+          WHERE ST_DWithin(geometry, point, search_diameter)
+          ORDER BY ST_Distance(geometry, point) ASC limit 1
       LOOP
-        RETURN NEXT r;
-        RETURN;
+        RETURN r.place_id;
       END LOOP;
       search_diameter := search_diameter * 2;
     END LOOP;
-    RETURN;
+    RETURN NULL;
   END IF;
 -- end
 
index b9c4fcfc86e83e9855c4c63b7e5d7e23cc72a08a..5f9165015853458f3c5f1580a1cee832b94e804f 100644 (file)
@@ -69,9 +69,8 @@ BEGIN
   END IF;
 
   IF out_parent_place_id IS NULL THEN
-    FOR location IN SELECT place_id FROM getNearestRoadFeature(out_partition, place_centroid) LOOP
-      out_parent_place_id := location.place_id;
-    END LOOP;    
+    SELECT getNearestRoadPlaceId(out_partition, place_centroid)
+      INTO out_parent_place_id;
   END IF;
 
 --insert street(line) into import table