X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/01f0f453dd349d94854c7a8ea0ac700fc86d0a4e..7b21354a8ae6f07ec3774e7114e546c38568f693:/lib-sql/functions/interpolation.sql diff --git a/lib-sql/functions/interpolation.sql b/lib-sql/functions/interpolation.sql index 8bc9ad42..2fd21e8a 100644 --- a/lib-sql/functions/interpolation.sql +++ b/lib-sql/functions/interpolation.sql @@ -121,6 +121,8 @@ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION osmline_insert() RETURNS TRIGGER AS $$ +DECLARE + centroid GEOMETRY; BEGIN NEW.place_id := nextval('seq_place'); NEW.indexed_date := now(); @@ -135,10 +137,11 @@ BEGIN END IF; NEW.indexed_status := 1; --STATUS_NEW - NEW.country_code := lower(get_country_code(NEW.linegeo)); + centroid := get_center_point(NEW.linegeo); + NEW.country_code := lower(get_country_code(centroid)); NEW.partition := get_partition(NEW.country_code); - NEW.geometry_sector := geometry_sector(NEW.partition, NEW.linegeo); + NEW.geometry_sector := geometry_sector(NEW.partition, centroid); END IF; RETURN NEW; @@ -176,8 +179,8 @@ BEGIN END IF; NEW.parent_place_id := get_interpolation_parent(NEW.token_info, NEW.partition, - ST_PointOnSurface(NEW.linegeo), - NEW.linegeo); + get_center_point(NEW.linegeo), + NEW.linegeo); -- Cannot find a parent street. We will not be able to display a reliable -- address, so drop entire interpolation. @@ -222,10 +225,11 @@ BEGIN -- formatted postcode and therefore 'postcode' contains a derived -- variant. CASE WHEN address ? 'postcode' THEN placex.postcode ELSE NULL::text END as postcode, - substring(address->'housenumber','[0-9]+')::integer as hnr + (address->'housenumber')::integer as hnr FROM placex, generate_series(1, array_upper(waynodes, 1)) nodeidpos WHERE osm_type = 'N' and osm_id = waynodes[nodeidpos]::BIGINT and address is not NULL and address ? 'housenumber' + and address->'housenumber' ~ '^[0-9]{1,6}$' and ST_Distance(NEW.linegeo, geometry) < 0.0005 ORDER BY nodeidpos LOOP