Skip to content

Commit

Permalink
do not save names when falling back to addresses
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
lonvia committed Dec 9, 2024
1 parent 9fb45ff commit 006e0e5
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 3 deletions.
20 changes: 18 additions & 2 deletions lib-lua/themes/nominatim/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,22 @@ function PlaceTransform.named_with_key(place, k)
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)
Expand Down Expand Up @@ -379,7 +395,7 @@ function Place:grab_name_parts(data)
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
Expand Down Expand Up @@ -636,7 +652,7 @@ function module.process_tags(o)

-- 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
Expand Down
8 changes: 8 additions & 0 deletions settings/address-levels.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@
"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],
Expand Down
2 changes: 1 addition & 1 deletion test/bdd/api/search/queries.feature
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ Feature: Search queries
Then exactly 1 result is returned
And results contain
| class |
| natural |
| water |

Examples:
| data |
Expand Down
13 changes: 13 additions & 0 deletions test/bdd/osm2pgsql/import/tags.feature
Original file line number Diff line number Diff line change
Expand Up @@ -256,3 +256,16 @@ Feature: Tag evaluation
| 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' | - |

0 comments on commit 006e0e5

Please sign in to comment.