From: Sarah Hoffmann Date: Wed, 23 Sep 2020 07:20:16 +0000 (+0200) Subject: Merge pull request #1972 from lonvia/exclude-unnamed-highway-areas X-Git-Tag: v3.6.0~69 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/c5c242d19392ce2253ec0249d18976f49f33bebb?ds=inline;hp=-c Merge pull request #1972 from lonvia/exclude-unnamed-highway-areas Exclude unnamed highway areas --- c5c242d19392ce2253ec0249d18976f49f33bebb diff --combined sql/functions/placex_triggers.sql index d6a8f762,fa1a1f40..0faa8020 --- a/sql/functions/placex_triggers.sql +++ b/sql/functions/placex_triggers.sql @@@ -92,16 -92,7 +92,16 @@@ BEGI END IF; IF fallback THEN - IF ST_Area(bbox) < 0.005 THEN + IF addr_street is null and addr_place is not null THEN + -- The address is attached to a place we don't know. Find the + -- nearest place instead. + FOR location IN + SELECT place_id FROM getNearFeatures(poi_partition, bbox, 26, '{}'::INTEGER[]) + ORDER BY rank_address DESC, isguess asc, distance LIMIT 1 + LOOP + parent_place_id := location.place_id; + END LOOP; + ELSEIF ST_Area(bbox) < 0.005 THEN -- for smaller features get the nearest road SELECT getNearestRoadPlaceId(poi_partition, bbox) INTO parent_place_id; --DEBUG: RAISE WARNING 'Checked for nearest way (%)', parent_place_id; @@@ -233,7 -224,7 +233,7 @@@ LANGUAGE plpgsql STABLE -- \param maxrank Rank of the place. All address features must have -- a search rank lower than the given rank. -- \param address Address terms for the place. --- \param geoemtry Geometry to which the address objects should be close. +-- \param geometry Geometry to which the address objects should be close. -- -- \retval parent_place_id Place_id of the address object that is the direct -- ancestor. @@@ -426,7 -417,12 +426,12 @@@ BEGI NEW.name := hstore('ref', NEW.address->'postcode'); - ELSEIF NEW.class = 'boundary' AND NOT is_area THEN + ELSEIF NEW.class = 'highway' AND is_area AND NEW.name is null + AND NEW.extratags ? 'area' AND NEW.extratags->'area' = 'yes' + THEN + RETURN NULL; + ELSEIF NEW.class = 'boundary' AND NOT is_area + THEN RETURN NULL; ELSEIF NEW.class = 'boundary' AND NEW.type = 'administrative' AND NEW.admin_level <= 4 AND NEW.osm_type = 'W' @@@ -550,9 -546,6 +555,9 @@@ DECLAR name_vector INTEGER[]; nameaddress_vector INTEGER[]; + addr_nameaddress_vector INTEGER[]; + + inherited_address HSTORE; linked_node_id BIGINT; linked_importance FLOAT; @@@ -722,7 -715,6 +727,7 @@@ BEGI -- if we have a POI and there is no address information, -- see if we can get it from a surrounding building + inherited_address := ''::HSTORE; IF NEW.osm_type = 'N' AND addr_street IS NULL AND addr_place IS NULL AND NEW.housenumber IS NULL THEN FOR location IN @@@ -737,7 -729,6 +742,7 @@@ NEW.housenumber := location.address->'housenumber'; addr_street := location.address->'street'; addr_place := location.address->'place'; + inherited_address := location.address; END LOOP; END IF; @@@ -768,26 -759,28 +773,26 @@@ NEW.postcode := get_nearest_postcode(NEW.country_code, NEW.geometry); END IF; - -- If there is no name it isn't searchable, don't bother to create a search record - IF NEW.name is NULL THEN - --DEBUG: RAISE WARNING 'Not a searchable place % %', NEW.osm_type, NEW.osm_id; - return NEW; - END IF; + IF NEW.name is not NULL THEN + NEW.name := add_default_place_name(NEW.country_code, NEW.name); + name_vector := make_keywords(NEW.name); - NEW.name := add_default_place_name(NEW.country_code, NEW.name); - name_vector := make_keywords(NEW.name); + IF NEW.rank_search <= 25 and NEW.rank_address > 0 THEN + result := add_location(NEW.place_id, NEW.country_code, NEW.partition, + name_vector, NEW.rank_search, NEW.rank_address, + upper(trim(NEW.address->'postcode')), NEW.geometry); + --DEBUG: RAISE WARNING 'Place added to location table'; + END IF; - -- Performance, it would be more acurate to do all the rest of the import - -- process but it takes too long - -- Just be happy with inheriting from parent road only - result := insertSearchName(NEW.partition, NEW.place_id, name_vector, - NEW.rank_search, NEW.rank_address, NEW.geometry); + END IF; IF NOT %REVERSE-ONLY% THEN - -- Merge address from parent - SELECT array_merge(s.name_vector, s.nameaddress_vector) - INTO nameaddress_vector - FROM search_name s - WHERE s.place_id = NEW.parent_place_id; + SELECT * INTO name_vector, nameaddress_vector + FROM create_poi_search_terms(NEW.parent_place_id, + inherited_address || NEW.address, + NEW.housenumber, name_vector); + IF array_length(name_vector, 1) is not NULL THEN INSERT INTO search_name (place_id, search_rank, address_rank, importance, country_code, name_vector, nameaddress_vector, centroid) @@@ -796,9 -789,8 +801,9 @@@ nameaddress_vector, NEW.centroid); --DEBUG: RAISE WARNING 'Place added to search table'; END IF; + END IF; - return NEW; + RETURN NEW; END IF; END IF;