mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-11-23 21:54:10 +03:00
use rank_address when invalidating containing objects
Only rank_address is now relevant for determining if a place could be part of an address.
This commit is contained in:
parent
d3ca9dd3f7
commit
d9325dc11a
@ -450,11 +450,16 @@ BEGIN
|
||||
-- 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_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 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 :(
|
||||
|
@ -470,14 +470,20 @@ DECLARE
|
||||
rank SMALLINT;
|
||||
BEGIN
|
||||
UPDATE placex SET indexed_status = 2 WHERE place_id = placeid;
|
||||
SELECT geometry, rank_search FROM placex WHERE place_id = placeid INTO placegeom, rank;
|
||||
|
||||
SELECT geometry, rank_address INTO placegeom, rank
|
||||
FROM placex WHERE place_id = placeid;
|
||||
|
||||
IF placegeom IS NOT NULL AND ST_IsValid(placegeom) THEN
|
||||
IF ST_GeometryType(placegeom) in ('ST_Polygon','ST_MultiPolygon') THEN
|
||||
FOR geom IN select split_geometry(placegeom) FROM placex WHERE place_id = placeid LOOP
|
||||
update placex set indexed_status = 2 where ST_Intersects(geom, placex.geometry)
|
||||
AND rank_search > rank and indexed_status = 0 and ST_geometrytype(placex.geometry) = 'ST_Point' and (rank_search < 28 or name is not null or (rank >= 16 and address ? 'place'));
|
||||
update placex set indexed_status = 2 where ST_Intersects(geom, placex.geometry)
|
||||
AND rank_search > rank and indexed_status = 0 and ST_geometrytype(placex.geometry) != 'ST_Point' and (rank_search < 28 or name is not null or (rank >= 16 and address ? 'place'));
|
||||
IF ST_GeometryType(placegeom) in ('ST_Polygon','ST_MultiPolygon')
|
||||
AND rank > 0
|
||||
THEN
|
||||
FOR geom IN SELECT split_geometry(placegeom) LOOP
|
||||
UPDATE placex SET indexed_status = 2
|
||||
WHERE ST_Intersects(geom, placex.geometry)
|
||||
and indexed_status = 0
|
||||
and ((rank_address = 0 and rank_search > rank) or rank_address > rank)
|
||||
and (rank_search < 28 or name is not null or (rank >= 16 and address ? 'place'));
|
||||
END LOOP;
|
||||
ELSE
|
||||
diameter := update_place_diameter(rank);
|
||||
|
Loading…
Reference in New Issue
Block a user