Improve guessing of labels for Nominatim results

This adapts to two changes in place handling by Nominatim:

* Place links that are computed by Nominatim are now found in
  extratags['linked_places']. Keep the check for extratags['place']
  as this may contain an explicitly mapped place label.
* Use address rank for guessing the admin level. This gets normalised
  by Nominatim with respect to country-specific use of admin_level.

Also adds additional labels for admin levels, so that we now have
complete coverage for all levels that are in use in OSM.
This commit is contained in:
Sarah Hoffmann 2020-12-01 22:37:09 +01:00
parent c418523ed8
commit a7b95e2a63
2 changed files with 5 additions and 2 deletions

View file

@ -149,10 +149,10 @@ class GeocoderController < ApplicationController
t "geocoder.search_osm_nominatim.prefix.#{klass}.#{type}", :default => type.tr("_", " ").capitalize
end
if klass == "boundary" && type == "administrative"
rank = (place.attributes["place_rank"].to_i + 1) / 2
rank = (place.attributes["address_rank"].to_i + 1) / 2
prefix_name = t "geocoder.search_osm_nominatim.admin_levels.level#{rank}", :default => prefix_name
place.elements["extratags"].elements.each("tag") do |extratag|
prefix_name = t "geocoder.search_osm_nominatim.prefix.place.#{extratag.attributes['value']}", :default => prefix_name if extratag.attributes["key"] == "place"
prefix_name = t "geocoder.search_osm_nominatim.prefix.place.#{extratag.attributes['value']}", :default => prefix_name if extratag.attributes["key"] == "linked_place" || extratag.attributes["key"] == "place"
end
end
prefix = t "geocoder.search_osm_nominatim.prefix_format", :name => prefix_name

View file

@ -1244,12 +1244,15 @@ en:
"yes": "Waterway"
admin_levels:
level2: "Country Boundary"
level3: "Region Boundary"
level4: "State Boundary"
level5: "Region Boundary"
level6: "County Boundary"
level7: "Municipality Boundary"
level8: "City Boundary"
level9: "Village Boundary"
level10: "Suburb Boundary"
level11: "Neighbourhood Boundary"
types:
cities: Cities
towns: Towns