]> git.openstreetmap.org Git - rails.git/commitdiff
Label boundaries by regional official designations
authorMinh Nguyễn <mxn@1ec5.org>
Sat, 11 Jan 2025 23:37:37 +0000 (15:37 -0800)
committerMinh Nguyễn <mxn@1ec5.org>
Fri, 7 Mar 2025 12:37:01 +0000 (04:37 -0800)
app/assets/javascripts/index/query.js
app/controllers/geocoder_controller.rb
config/locales/en.yml

index c0395c70182438a55854a8ce2068f552807d2f6b..dfe0adfe2d62fb492309562ec143dfd5fda3bed9 100644 (file)
@@ -68,9 +68,11 @@ OSM.Query = function (map) {
     const tags = feature.tags;
     let prefix = "";
 
-    if (tags.boundary === "administrative" && tags.admin_level) {
-      prefix = I18n.t("geocoder.search_osm_nominatim.admin_levels.level" + tags.admin_level, {
-        defaultValue: I18n.t("geocoder.search_osm_nominatim.prefix.boundary.administrative")
+    if (tags.boundary === "administrative" && (tags.border_type || tags.admin_level)) {
+      prefix = I18n.t("geocoder.search_osm_nominatim.border_types." + tags.border_type, {
+        defaultValue: I18n.t("geocoder.search_osm_nominatim.admin_levels.level" + tags.admin_level, {
+          defaultValue: I18n.t("geocoder.search_osm_nominatim.prefix.boundary.administrative")
+        })
       });
     } else {
       const prefixes = I18n.t("geocoder.search_osm_nominatim.prefix");
index 85b4476f6d4f2d620b65a4244bb23e7b0b458a20..5f3b4dbb65875dab909f1dc5c482d20bcb5f1d35 100644 (file)
@@ -101,10 +101,14 @@ class GeocoderController < ApplicationController
       if klass == "boundary" && type == "administrative"
         rank = (place.attributes["address_rank"].to_i + 1) / 2
         prefix_name = t "geocoder.search_osm_nominatim.admin_levels.level#{rank}", :default => prefix_name
+        border_type = nil
+        place_type = nil
         place_tags = %w[linked_place place]
         place.elements["extratags"].elements.each("tag") do |extratag|
-          prefix_name = t "geocoder.search_osm_nominatim.prefix.place.#{extratag.attributes['value']}", :default => prefix_name if place_tags.include?(extratag.attributes["key"])
+          border_type = t "geocoder.search_osm_nominatim.border_types.#{extratag.attributes['value']}", :default => border_type if extratag.attributes["key"] == "border_type"
+          place_type = t "geocoder.search_osm_nominatim.prefix.place.#{extratag.attributes['value']}", :default => place_type if place_tags.include?(extratag.attributes["key"])
         end
+        prefix_name = place_type || border_type || prefix_name
       end
       prefix = t ".prefix_format", :name => prefix_name
       object_type = place.attributes["osm_type"]
index 15dba31bffab37bee0456f3bc15f6b11689e9a71..f7db08da5907d8b4160666fbb64f0b6c2417f2a7 100644 (file)
@@ -1506,6 +1506,33 @@ en:
         level9: "Administrative Boundary (Level 9)"
         level10: "Administrative Boundary (Level 10)"
         level11: "Administrative Boundary (Level 11)"
+      border_types:
+        arrondissement: "Arrondissement Boundary"
+        borough: "Borough Boundary"
+        cercle: "Cercle Boundary"
+        city: "City Boundary"
+        comarca: "Comarca Boundary"
+        county: "County Boundary"
+        departement: "Departmental Boundary"
+        department: "Departmental Boundary"
+        district: "District Boundary"
+        distrito: "District Boundary"
+        freguesia: "Freguesia Boundary"
+        local_authority: "Local Authority Boundary"
+        municipality: "Municipal Boundary"
+        municipi: "Municipal Boundary"
+        município: "Municipal Boundary"
+        nation: "International Boundary"
+        national: "International Boundary"
+        neighbourhood: "Neighborhood Boundary"
+        parish: "Parish Boundary"
+        province: "Provincial Boundary"
+        região: "Regional Boundary"
+        region: "Regional Boundary"
+        state: "State Boundary"
+        town: "Town Boundary"
+        township: "Township Boundary"
+        village: "Village Boundary"
     results:
       no_results: "No results found"
       more_results: "More results"