]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #2687 from lonvia/check-for-wikipedia
authorSarah Hoffmann <lonvia@denofr.de>
Mon, 2 May 2022 14:04:32 +0000 (16:04 +0200)
committerGitHub <noreply@github.com>
Mon, 2 May 2022 14:04:32 +0000 (16:04 +0200)
Add check for presence of wikipedia importance

lib-php/SearchDescription.php
lib-sql/functions/placex_triggers.sql
test/bdd/db/import/parenting.feature
vagrant/Install-on-Ubuntu-20.sh

index fbf6b650bc9ee8dffcdfc738e15239e5d2bc69a9..65df58ef0850b120bbc4e5a1b7b8af19dfd9ef34 100644 (file)
@@ -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.
index 8a65c555b7553dda42671abb20002f229f331f69..f8580d7faefe14e5f3e3f0934614ef45d6eee9a2 100644 (file)
@@ -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;
index ef25b6cc0acd6b9c4c9501109e697f1fcf158d20..ba4cc28cf36d338758293d6bb143c3ffc8f6dd78 100644 (file)
@@ -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
index 68bd6b04e287f6ac8615492a13cdd3d535617f4f..cdfb20f28f2d0a366f67c12a2217138265611156 100755 (executable)
@@ -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