mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-24 13:31:37 +03:00
use default ranks when reorganising rank_address
When shifting address ranks, the evaluation is always done against unshifted address ranks on import because the objects we compare against have not been indexed yet. This changes for updates when the object have been touched in the meantime. To ensure consistent behaviour across imports and updates, always use the unshifted address ranks.
This commit is contained in:
parent
df0142678a
commit
f833cc80df
@ -866,13 +866,16 @@ BEGIN
|
||||
-- Second check that the boundary is not completely contained in a
|
||||
-- place area with a equal or higher address rank.
|
||||
FOR location IN
|
||||
SELECT rank_address FROM placex
|
||||
SELECT rank_address
|
||||
FROM placex,
|
||||
LATERAL compute_place_rank(country_code, 'A', class, type,
|
||||
admin_level, False, null) prank
|
||||
WHERE class = 'place' and rank_address < 24
|
||||
and rank_address >= NEW.rank_address
|
||||
and prank.address_rank >= NEW.rank_address
|
||||
and geometry && NEW.geometry
|
||||
and geometry ~ NEW.geometry -- needed because ST_Relate does not do bbox cover test
|
||||
and ST_Relate(geometry, NEW.geometry, 'T*T***FF*') -- contains but not equal
|
||||
ORDER BY rank_address desc LIMIT 1
|
||||
ORDER BY prank.address_rank desc LIMIT 1
|
||||
LOOP
|
||||
NEW.rank_address := location.rank_address + 2;
|
||||
END LOOP;
|
||||
@ -884,13 +887,16 @@ BEGIN
|
||||
-- For place areas make sure they are not completely contained in an area
|
||||
-- with a equal or higher address rank.
|
||||
FOR location IN
|
||||
SELECT rank_address FROM placex
|
||||
WHERE rank_address < 24
|
||||
and rank_address >= NEW.rank_address
|
||||
SELECT rank_address
|
||||
FROM placex,
|
||||
LATERAL compute_place_rank(country_code, 'A', class, type,
|
||||
admin_level, False, null) prank
|
||||
WHERE prank.address_rank < 24
|
||||
and prank.address_rank >= NEW.rank_address
|
||||
and geometry && NEW.geometry
|
||||
and geometry ~ NEW.geometry -- needed because ST_Relate does not do bbox cover test
|
||||
and ST_Relate(geometry, NEW.geometry, 'T*T***FF*') -- contains but not equal
|
||||
ORDER BY rank_address desc LIMIT 1
|
||||
ORDER BY prank.address_rank desc LIMIT 1
|
||||
LOOP
|
||||
NEW.rank_address := location.rank_address + 2;
|
||||
END LOOP;
|
||||
@ -901,9 +907,12 @@ BEGIN
|
||||
-- address level and has not been linked, then make the node a subpart
|
||||
-- by increasing the address rank (city level and above).
|
||||
FOR location IN
|
||||
SELECT rank_address FROM placex
|
||||
SELECT rank_address
|
||||
FROM placex,
|
||||
LATERAL compute_place_rank(country_code, 'A', class, type,
|
||||
admin_level, False, null) prank
|
||||
WHERE osm_type = 'R'
|
||||
and rank_address = NEW.rank_address
|
||||
and prank.address_rank = NEW.rank_address
|
||||
and geometry && NEW.centroid and _ST_Covers(geometry, NEW.centroid)
|
||||
LIMIT 1
|
||||
LOOP
|
||||
|
Loading…
Reference in New Issue
Block a user