forked from hans/Nominatim
do not save names when falling back to addresses
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.
This commit is contained in:
@@ -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 ---------------
|
--------- Built-in extratags transformation functions ---------------
|
||||||
|
|
||||||
local function default_extratags_filter(p, k)
|
local function default_extratags_filter(p, k)
|
||||||
@@ -379,7 +395,7 @@ function Place:grab_name_parts(data)
|
|||||||
self.has_name = true
|
self.has_name = true
|
||||||
elseif atype == 'house' then
|
elseif atype == 'house' then
|
||||||
self.has_name = true
|
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
|
-- address keys
|
||||||
if o:grab_address_parts{groups=ADDRESS_FILTER} > 0 and fallback == nil then
|
if o:grab_address_parts{groups=ADDRESS_FILTER} > 0 and fallback == nil then
|
||||||
fallback = {'place', 'house', PlaceTransform.always}
|
fallback = {'place', 'house', address_fallback}
|
||||||
end
|
end
|
||||||
if o.address.country ~= nil and #o.address.country ~= 2 then
|
if o.address.country ~= nil and #o.address.country ~= 2 then
|
||||||
o.address['country'] = nil
|
o.address['country'] = nil
|
||||||
|
|||||||
@@ -74,6 +74,14 @@
|
|||||||
"stone" : 30,
|
"stone" : 30,
|
||||||
"" : [22, 0]
|
"" : [22, 0]
|
||||||
},
|
},
|
||||||
|
"water" : {
|
||||||
|
"lake" : [20, 0],
|
||||||
|
"reservoir" : [20, 0],
|
||||||
|
"wastewater" : [24, 0],
|
||||||
|
"pond" : [24, 0],
|
||||||
|
"fountain" : [24, 0],
|
||||||
|
"" : [22, 0]
|
||||||
|
},
|
||||||
"waterway" : {
|
"waterway" : {
|
||||||
"river" : [19, 0],
|
"river" : [19, 0],
|
||||||
"stream" : [22, 0],
|
"stream" : [22, 0],
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ Feature: Search queries
|
|||||||
Then exactly 1 result is returned
|
Then exactly 1 result is returned
|
||||||
And results contain
|
And results contain
|
||||||
| class |
|
| class |
|
||||||
| natural |
|
| water |
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
| data |
|
| data |
|
||||||
|
|||||||
@@ -256,3 +256,16 @@ Feature: Tag evaluation
|
|||||||
| N21:natural | water |
|
| N21:natural | water |
|
||||||
| N23:water | pond |
|
| N23:water | pond |
|
||||||
| N26:natural | water |
|
| 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' | - |
|
||||||
|
|||||||
Reference in New Issue
Block a user