X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/cf4dbbd681cfb515a83bd4c1c2cc3f929b952872..84ea0753d8d7861ff6a47a6eb29f072a1d342879:/sql/functions/utils.sql diff --git a/sql/functions/utils.sql b/sql/functions/utils.sql index a682931a..6371e9ad 100644 --- a/sql/functions/utils.sql +++ b/sql/functions/utils.sql @@ -240,6 +240,53 @@ $$ LANGUAGE plpgsql STABLE; +-- Find the parent of an address with addr:street/addr:place tag. +-- +-- \param street Value of addr:street or NULL if tag is missing. +-- \param place Value of addr:place or NULL if tag is missing. +-- \param partition Partition where to search the parent. +-- \param centroid Location of the address. +-- +-- \return Place ID of the parent if one was found, NULL otherwise. +CREATE OR REPLACE FUNCTION find_parent_for_address(street TEXT, place TEXT, + partition SMALLINT, + centroid GEOMETRY) + RETURNS BIGINT + AS $$ +DECLARE + parent_place_id BIGINT; + word_ids INTEGER[]; +BEGIN + IF street is not null THEN + -- Check for addr:street attributes + -- Note that addr:street links can only be indexed, once the street itself is indexed + word_ids := word_ids_from_name(street); + IF word_ids is not null THEN + parent_place_id := getNearestNamedRoadPlaceId(partition, centroid, word_ids); + IF parent_place_id is not null THEN + --DEBUG: RAISE WARNING 'Get parent form addr:street: %', parent.place_id; + RETURN parent_place_id; + END IF; + END IF; + END IF; + + -- Check for addr:place attributes. + IF place is not null THEN + word_ids := word_ids_from_name(place); + IF word_ids is not null THEN + parent_place_id := getNearestNamedPlacePlaceId(partition, centroid, word_ids); + IF parent_place_id is not null THEN + --DEBUG: RAISE WARNING 'Get parent form addr:place: %', parent.place_id; + RETURN parent_place_id; + END IF; + END IF; + END IF; + + RETURN NULL; +END; +$$ +LANGUAGE plpgsql STABLE; + CREATE OR REPLACE FUNCTION delete_location(OLD_place_id BIGINT) RETURNS BOOLEAN AS $$