X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/ffc2d82b0ed150d52a718dc563f9399062e579a7..00959fac57d6c1b35d009e68ad857989ae71de6c:/lib-sql/functions/interpolation.sql?ds=sidebyside diff --git a/lib-sql/functions/interpolation.sql b/lib-sql/functions/interpolation.sql index 8bfc307b..55e44dfd 100644 --- a/lib-sql/functions/interpolation.sql +++ b/lib-sql/functions/interpolation.sql @@ -43,8 +43,8 @@ LANGUAGE plpgsql STABLE; -- find the parent road of the cut road parts -CREATE OR REPLACE FUNCTION get_interpolation_parent(street TEXT, - place TEXT, partition SMALLINT, +CREATE OR REPLACE FUNCTION get_interpolation_parent(street INTEGER[], place INTEGER[], + partition SMALLINT, centroid GEOMETRY, geom GEOMETRY) RETURNS BIGINT AS $$ @@ -155,16 +155,13 @@ BEGIN NEW.interpolationtype = NEW.address->'interpolation'; place_centroid := ST_PointOnSurface(NEW.linegeo); - NEW.parent_place_id = get_interpolation_parent(NEW.address->'street', - NEW.address->'place', + NEW.parent_place_id = get_interpolation_parent(token_addr_street_match_tokens(NEW.token_info), + token_addr_place_match_tokens(NEW.token_info), NEW.partition, place_centroid, NEW.linegeo); - IF NEW.address is not NULL AND NEW.address ? 'postcode' AND NEW.address->'postcode' not similar to '%(,|;)%' THEN - interpol_postcode := NEW.address->'postcode'; - ELSE - interpol_postcode := NULL; - END IF; + interpol_postcode := token_normalized_postcode(NEW.address->'postcode'); + NEW.token_info := token_strip_info(NEW.token_info); IF NEW.address ? '_inherited' THEN NEW.address := hstore('interpolation', NEW.interpolationtype); END IF; @@ -213,12 +210,13 @@ BEGIN -- determine postcode postcode := coalesce(interpol_postcode, - prevnode.address->'postcode', - nextnode.address->'postcode', + token_normalized_postcode(prevnode.address->'postcode'), + token_normalized_postcode(nextnode.address->'postcode'), postcode); IF postcode is NULL THEN - SELECT placex.postcode FROM placex WHERE place_id = NEW.parent_place_id INTO postcode; + SELECT token_normalized_postcode(placex.postcode) + FROM placex WHERE place_id = NEW.parent_place_id INTO postcode; END IF; IF postcode is NULL THEN postcode := get_nearest_postcode(NEW.country_code, nextnode.geometry); @@ -228,7 +226,7 @@ BEGIN NEW.startnumber := startnumber; NEW.endnumber := endnumber; NEW.linegeo := sectiongeo; - NEW.postcode := upper(trim(postcode)); + NEW.postcode := postcode; ELSE insert into location_property_osmline (linegeo, partition, osm_id, parent_place_id,