]> git.openstreetmap.org Git - nominatim.git/commitdiff
do not save names when falling back to addresses
authorSarah Hoffmann <lonvia@denofr.de>
Mon, 9 Dec 2024 16:28:30 +0000 (17:28 +0100)
committerSarah Hoffmann <lonvia@denofr.de>
Mon, 16 Dec 2024 09:26:55 +0000 (10:26 +0100)
If an object doesn't have a useable main tag, then the names should
always be ignored, independently of the presence of housenumbers.
We have to assume that the name belongs to a feature that was
intentionally filtered out.

lib-lua/themes/nominatim/init.lua
settings/address-levels.json
test/bdd/api/search/queries.feature
test/bdd/osm2pgsql/import/tags.feature

index 6d3804e274af078d383c57cc0bee07418e835d7a..dacaaae8ecce047436202b9920cd96ee54da27a0 100644 (file)
@@ -134,6 +134,22 @@ function PlaceTransform.named_with_key(place, k)
     end
 end
 
     end
 end
 
+-- Special transform used with address fallbacks: ignore all names
+-- except for those marked as being part of the address.
+local function address_fallback(place)
+    if next(place.names) == nil or NAMES.house == nil then
+        return place
+    end
+
+    local names = {}
+    for k, v in pairs(place.names) do
+        if NAME_FILTER(k, v) == 'house' then
+            names[k] = v
+        end
+    end
+    return place:clone{names=names}
+end
+
 --------- Built-in extratags transformation functions ---------------
 
 local function default_extratags_filter(p, k)
 --------- Built-in extratags transformation functions ---------------
 
 local function default_extratags_filter(p, k)
@@ -379,7 +395,7 @@ function Place:grab_name_parts(data)
                     self.has_name = true
                 elseif atype == 'house' then
                     self.has_name = true
                     self.has_name = true
                 elseif atype == 'house' then
                     self.has_name = true
-                    fallback = {'place', 'house', PlaceTransform.always}
+                    fallback = {'place', 'house', address_fallback}
                 end
             end
         end
                 end
             end
         end
@@ -636,7 +652,7 @@ function module.process_tags(o)
 
     -- address keys
     if o:grab_address_parts{groups=ADDRESS_FILTER} > 0 and fallback == nil then
 
     -- address keys
     if o:grab_address_parts{groups=ADDRESS_FILTER} > 0 and fallback == nil then
-        fallback = {'place', 'house', PlaceTransform.always}
+        fallback = {'place', 'house', address_fallback}
     end
     if o.address.country ~= nil and #o.address.country ~= 2 then
         o.address['country'] = nil
     end
     if o.address.country ~= nil and #o.address.country ~= 2 then
         o.address['country'] = nil
index b63eac4efa065de8c3782cd1d75658af0197283c..a82133ef0d1e17b2c9e0aeadf88451334769dff2 100644 (file)
           "stone" : 30,
           "" : [22, 0]
       },
           "stone" : 30,
           "" : [22, 0]
       },
+      "water" : {
+          "lake" : [20, 0],
+          "reservoir" : [20, 0],
+          "wastewater" : [24, 0],
+          "pond" : [24, 0],
+          "fountain" : [24, 0],
+          "" : [22, 0]
+      },
       "waterway" : {
           "river" : [19, 0],
           "stream" : [22, 0],
       "waterway" : {
           "river" : [19, 0],
           "stream" : [22, 0],
index 6e640accab02e4d166a65b91e4d2a64b27699f15..3b06af786219dcf8855d0839740a0133cabe3b71 100644 (file)
@@ -192,7 +192,7 @@ Feature: Search queries
         Then exactly 1 result is returned
         And results contain
           | class   |
         Then exactly 1 result is returned
         And results contain
           | class   |
-          | natural |
+          | water |
 
     Examples:
       | data |
 
     Examples:
       | data |
index 8df726ca1d3216145fb2fd8daa0f8d3fe177abc0..2a7673b7583ee51186539d6e747c72b1e8ea30fe 100644 (file)
@@ -256,3 +256,16 @@ Feature: Tag evaluation
             | N21:natural | water |
             | N23:water   | pond  |
             | N26:natural | water |
             | N21:natural | water |
             | N23:water   | pond  |
             | N26:natural | water |
+
+    Scenario: Drop name for address fallback
+        When loading osm data
+            """
+            n1 Taddr:housenumber=23,name=Foo
+            n2 Taddr:housenumber=23,addr:housename=Foo
+            n3 Taddr:housenumber=23
+            """
+        Then place contains exactly
+            | object      | type  | address             | name |
+            | N1:place    | house | 'housenumber': '23' | -    |
+            | N2:place    | house | 'housenumber': '23' | 'addr:housename': 'Foo' |
+            | N3:place    | house | 'housenumber': '23' | -    |