From: Sarah Hoffmann Date: Mon, 2 May 2022 14:04:32 +0000 (+0200) Subject: Merge pull request #2687 from lonvia/check-for-wikipedia X-Git-Tag: v4.1.0~51 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/896199c9d4f9252307b1068cbe94fa8aedfedcf8?hp=3d58254462289cad257cb96d60b7a24f8e7fc8da Merge pull request #2687 from lonvia/check-for-wikipedia Add check for presence of wikipedia importance --- diff --git a/lib-php/SearchDescription.php b/lib-php/SearchDescription.php index fbf6b650..65df58ef 100644 --- a/lib-php/SearchDescription.php +++ b/lib-php/SearchDescription.php @@ -642,6 +642,7 @@ class SearchDescription // Housenumbers on streets and places. $sPlacexSql = 'SELECT array_agg(place_id) FROM placex'; $sPlacexSql .= ' WHERE parent_place_id = sin.place_id AND sin.address_rank < 30'; + $sPlacexSql .= $this->oContext->excludeSQL(' AND place_id'); $sPlacexSql .= ' and housenumber ~* E'.$sHouseNumberRegex; // Interpolations on streets and places. diff --git a/lib-sql/functions/placex_triggers.sql b/lib-sql/functions/placex_triggers.sql index 8a65c555..f8580d7f 100644 --- a/lib-sql/functions/placex_triggers.sql +++ b/lib-sql/functions/placex_triggers.sql @@ -28,35 +28,38 @@ DECLARE result prepare_update_info; extra_names HSTORE; BEGIN + IF not p.address ? '_inherited' THEN + result.address := p.address; + END IF; + -- For POI nodes, check if the address should be derived from a surrounding -- building. - IF p.rank_search < 30 OR p.osm_type != 'N' THEN - result.address := p.address; - ELSEIF p.address is null THEN - -- The additional && condition works around the misguided query - -- planner of postgis 3.0. - SELECT placex.address || hstore('_inherited', '') INTO result.address - FROM placex - WHERE ST_Covers(geometry, p.centroid) - and geometry && p.centroid - and placex.address is not null - and (placex.address ? 'housenumber' or placex.address ? 'street' or placex.address ? 'place') - and rank_search = 30 AND ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') - LIMIT 1; - ELSE - result.address := p.address; - -- See if we can inherit addtional address tags from an interpolation. - -- These will become permanent. - FOR location IN - SELECT (address - 'interpolation'::text - 'housenumber'::text) as address - FROM place, planet_osm_ways w - WHERE place.osm_type = 'W' and place.address ? 'interpolation' - and place.geometry && p.geometry - and place.osm_id = w.id - and p.osm_id = any(w.nodes) - LOOP - result.address := location.address || result.address; - END LOOP; + IF p.rank_search = 30 AND p.osm_type = 'N' THEN + IF p.address is null THEN + -- The additional && condition works around the misguided query + -- planner of postgis 3.0. + SELECT placex.address || hstore('_inherited', '') INTO result.address + FROM placex + WHERE ST_Covers(geometry, p.centroid) + and geometry && p.centroid + and placex.address is not null + and (placex.address ? 'housenumber' or placex.address ? 'street' or placex.address ? 'place') + and rank_search = 30 AND ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') + LIMIT 1; + ELSE + -- See if we can inherit addtional address tags from an interpolation. + -- These will become permanent. + FOR location IN + SELECT (address - 'interpolation'::text - 'housenumber'::text) as address + FROM place, planet_osm_ways w + WHERE place.osm_type = 'W' and place.address ? 'interpolation' + and place.geometry && p.geometry + and place.osm_id = w.id + and p.osm_id = any(w.nodes) + LOOP + result.address := location.address || result.address; + END LOOP; + END IF; END IF; -- remove internal and derived names @@ -117,7 +120,8 @@ BEGIN IF location.members[i+1] = 'street' THEN FOR parent IN SELECT place_id from placex - WHERE osm_type = 'W' and osm_id = substring(location.members[i],2)::bigint + WHERE osm_type = upper(substring(location.members[i], 1, 1))::char(1) + and osm_id = substring(location.members[i], 2)::bigint and name is not null and rank_search between 26 and 27 LOOP @@ -984,15 +988,6 @@ BEGIN {% endif %} NEW.token_info := token_strip_info(NEW.token_info); - -- If the address was inherited from a surrounding building, - -- do not add it permanently to the table. - IF NEW.address ? '_inherited' THEN - IF NEW.address ? '_unlisted_place' THEN - NEW.address := hstore('_unlisted_place', NEW.address->'_unlisted_place'); - ELSE - NEW.address := null; - END IF; - END IF; RETURN NEW; END IF; diff --git a/test/bdd/db/import/parenting.feature b/test/bdd/db/import/parenting.feature index ef25b6cc..ba4cc28c 100644 --- a/test/bdd/db/import/parenting.feature +++ b/test/bdd/db/import/parenting.feature @@ -355,6 +355,29 @@ Feature: Parenting of objects | object | parent_place_id | | N1 | W3 | + + Scenario: street member in associatedStreet relation can be a relation + Given the grid + | 1 | | | 2 | + | 3 | | | 4 | + | | | | | + | | 9 | | | + | 5 | | | 6 | + And the places + | osm | class | type | housenr | geometry | + | N9 | place | house | 34 | 9 | + And the named places + | osm | class | type | name | geometry | + | R14 | highway | pedestrian | Right St | (1,2,4,3,1) | + | W14 | highway | pedestrian | Left St | 5,6 | + And the relations + | id | members | tags+type | + | 1 | N9:house,R14:street | associatedStreet | + When importing + Then placex contains + | object | parent_place_id | + | N9 | R14 | + Scenario: POIs in building inherit address Given the scene building-on-street-corner And the named places @@ -376,6 +399,10 @@ Feature: Parenting of objects | N1 | W3 | 3 | | N2 | W3 | 3 | | N3 | W3 | 3 | + When sending geocodejson search query "3, foo" with address + Then results contain + | housenumber | + | 3 | Scenario: POIs don't inherit from streets Given the scene building-on-street-corner diff --git a/vagrant/Install-on-Ubuntu-20.sh b/vagrant/Install-on-Ubuntu-20.sh index 68bd6b04..cdfb20f2 100755 --- a/vagrant/Install-on-Ubuntu-20.sh +++ b/vagrant/Install-on-Ubuntu-20.sh @@ -258,7 +258,7 @@ EOF_NGINX_CONF # if [ "x$NOSYSTEMD" == "xyes" ]; then #DOCS: - sudo /usr/sbin/php-fpm7.3 --nodaemonize --fpm-config /etc/php/7.3/fpm/php-fpm.conf & #DOCS: + sudo /usr/sbin/php-fpm7.4 --nodaemonize --fpm-config /etc/php/7.4/fpm/php-fpm.conf & #DOCS: sudo /usr/sbin/nginx & #DOCS: else #DOCS: sudo systemctl restart php7.4-fpm nginx