X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/df0142678a10eaf51f2acac40bcff6350211b305..a6dab5e300de9c5664f714eb2c9290d18f01067f:/lib-sql/functions/placex_triggers.sql?ds=sidebyside diff --git a/lib-sql/functions/placex_triggers.sql b/lib-sql/functions/placex_triggers.sql index a73df59c..1f7e6dc6 100644 --- a/lib-sql/functions/placex_triggers.sql +++ b/lib-sql/functions/placex_triggers.sql @@ -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 @@ -983,7 +992,7 @@ BEGIN {% if debug %}RAISE WARNING 'Got parent details from search name';{% endif %} -- determine postcode - NEW.postcode := coalesce(token_normalized_postcode(NEW.address->'postcode'), + NEW.postcode := coalesce(token_get_postcode(NEW.token_info), location.postcode, get_nearest_postcode(NEW.country_code, NEW.centroid)); @@ -1141,8 +1150,7 @@ BEGIN {% if debug %}RAISE WARNING 'RETURN insert_addresslines: %, %, %', NEW.parent_place_id, NEW.postcode, nameaddress_vector;{% endif %} - NEW.postcode := coalesce(token_normalized_postcode(NEW.address->'postcode'), - NEW.postcode); + NEW.postcode := coalesce(token_get_postcode(NEW.token_info), NEW.postcode); -- if we have a name add this to the name search table IF NEW.name IS NOT NULL THEN