]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #1975 from lonvia/simplify-parent-assignment-for-unlisted-places
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 23 Sep 2020 17:10:42 +0000 (19:10 +0200)
committerGitHub <noreply@github.com>
Wed, 23 Sep 2020 17:10:42 +0000 (19:10 +0200)
Use closest containing place area for parent of unlisted addr:place

1  2 
sql/functions/placex_triggers.sql

index ad0f041de7a5b4c4f927f96e1eef616ed3fefa9c,e8bbdb18a4c82fa7582d231096ea7e19f97f16ea..9ef83b82d3ed9b9db332796a43dcab09c9186917
@@@ -93,13 -93,15 +93,15 @@@ BEGI
  
      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
@@@ -450,16 -452,11 +452,16 @@@ BEGI
          -- mark items within the geometry for re-indexing
    --    RAISE WARNING 'placex poly insert: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type;
  
 -        -- work around bug in postgis, this may have been fixed in 2.0.0 (see http://trac.osgeo.org/postgis/ticket/547)
 -        update placex set indexed_status = 2 where (st_covers(NEW.geometry, placex.geometry) OR ST_Intersects(NEW.geometry, placex.geometry)) 
 -         AND rank_search > NEW.rank_search and indexed_status = 0 and ST_geometrytype(placex.geometry) = 'ST_Point' and (rank_search < 28 or name is not null or (NEW.rank_search >= 16 and address ? 'place'));
 -        update placex set indexed_status = 2 where (st_covers(NEW.geometry, placex.geometry) OR ST_Intersects(NEW.geometry, placex.geometry)) 
 -         AND rank_search > NEW.rank_search and indexed_status = 0 and ST_geometrytype(placex.geometry) != 'ST_Point' and (rank_search < 28 or name is not null or (NEW.rank_search >= 16 and address ? 'place'));
 +        UPDATE placex SET indexed_status = 2
 +         WHERE ST_Intersects(NEW.geometry, placex.geometry)
 +               and indexed_status = 0
 +               and ((rank_address = 0 and rank_search > NEW.rank_address)
 +                    or rank_address > NEW.rank_address
 +                    or (class = 'place' and osm_type = 'N')
 +                   )
 +               and (rank_search < 28
 +                    or name is not null
 +                    or (NEW.rank_address >= 16 and address ? 'place'));
        END IF;
      ELSE
        -- mark nearby items for re-indexing, where 'nearby' depends on the features rank_search and is a complete guess :(