mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
add explicit bbox contains check
Now that the containment check uses ST_Relate, we need to add a separate bbox contains check to ensure that Postgis does the efficient check first. Note that we still cannot get rid of the overlap(&&) check because then Postgis will use the wrong indexes.
This commit is contained in:
@@ -618,18 +618,21 @@ BEGIN
|
|||||||
NEW.rank_address := parent_address_level + 2;
|
NEW.rank_address := parent_address_level + 2;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
-- Second check that the boundary is not completely contained in a
|
IF NEW.rank_address > 9 THEN
|
||||||
-- place area with a higher address rank
|
-- Second check that the boundary is not completely contained in a
|
||||||
FOR location IN
|
-- place area with a higher address rank
|
||||||
SELECT rank_address FROM placex
|
FOR location IN
|
||||||
WHERE class = 'place' and rank_address < 24
|
SELECT rank_address FROM placex
|
||||||
and rank_address > NEW.rank_address
|
WHERE class = 'place' and rank_address < 24
|
||||||
and geometry && NEW.geometry
|
and rank_address > NEW.rank_address
|
||||||
and ST_Relate(geometry, NEW.geometry, 'T*T***FF*') -- contains but not equal
|
and geometry && NEW.geometry
|
||||||
ORDER BY rank_address desc LIMIT 1
|
and geometry ~ NEW.geometry -- needed because ST_Relate does not do bbox cover test
|
||||||
LOOP
|
and ST_Relate(geometry, NEW.geometry, 'T*T***FF*') -- contains but not equal
|
||||||
NEW.rank_address := location.rank_address + 2;
|
ORDER BY rank_address desc LIMIT 1
|
||||||
END LOOP;
|
LOOP
|
||||||
|
NEW.rank_address := location.rank_address + 2;
|
||||||
|
END LOOP;
|
||||||
|
END IF;
|
||||||
ELSEIF NEW.class = 'place' and NEW.osm_type = 'N'
|
ELSEIF NEW.class = 'place' and NEW.osm_type = 'N'
|
||||||
and NEW.rank_address between 16 and 23
|
and NEW.rank_address between 16 and 23
|
||||||
THEN
|
THEN
|
||||||
|
|||||||
Reference in New Issue
Block a user