From: Sarah Hoffmann Date: Wed, 23 Sep 2020 15:33:42 +0000 (+0200) Subject: use closest containing place for unlisted addr:place X-Git-Tag: v3.6.0~65^2 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/e552f6bce557df08ef7305369664fd70dd3aed96?ds=sidebyside;hp=-c use closest containing place for unlisted addr:place We can't use getNearFeatures() to determine the parent of a place with an unlisted addr:place because this function returns place nodes that are potentially outside the area of interest. Doing the complete address computation is too expensive, so simply use the area with the largest rank that contains the feature instead. --- e552f6bce557df08ef7305369664fd70dd3aed96 diff --git a/sql/functions/placex_triggers.sql b/sql/functions/placex_triggers.sql index d39699f7..e8bbdb18 100644 --- a/sql/functions/placex_triggers.sql +++ b/sql/functions/placex_triggers.sql @@ -93,13 +93,15 @@ BEGIN IF fallback THEN IF addr_street is null and addr_place is not null THEN - -- The address is attached to a place we don't know. Find the - -- nearest place instead. + -- The address is attached to a place we don't know. + -- Instead simply use the containing area with the largest rank. FOR location IN - SELECT place_id FROM getNearFeatures(poi_partition, bbox, 26, '{}'::INTEGER[]) - ORDER BY rank_address DESC, isguess asc, distance LIMIT 1 + SELECT place_id FROM placex + WHERE bbox @ geometry AND _ST_Covers(geometry, ST_Centroid(bbox)) + AND rank_address between 5 and 25 + ORDER BY rank_address desc LOOP - parent_place_id := location.place_id; + RETURN location.place_id; END LOOP; ELSEIF ST_Area(bbox) < 0.005 THEN -- for smaller features get the nearest road