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:
Sarah Hoffmann 2022-06-16 11:20:23 +02:00
parent df0142678a
commit f833cc80df

View File

@ -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