From 65d8770b28bfaaff56d34c9504916a2c0672394d Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Wed, 9 Dec 2020 11:38:19 +0100 Subject: [PATCH] update country_names from OSM data Update names in the coutry_names table on the fly from incomming OSM country data. Adding a small sanity check that the country must be an OSM relation and within the area where we expect the country to be. --- sql/functions/placex_triggers.sql | 12 ++++++++ test/bdd/db/import/country.feature | 47 ++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 test/bdd/db/import/country.feature diff --git a/sql/functions/placex_triggers.sql b/sql/functions/placex_triggers.sql index 87f15e8c..6965fe14 100644 --- a/sql/functions/placex_triggers.sql +++ b/sql/functions/placex_triggers.sql @@ -919,6 +919,18 @@ BEGIN THEN PERFORM create_country(NEW.name, lower(NEW.country_code)); --DEBUG: RAISE WARNING 'Country names updated'; + + -- Also update the list of country names. Adding an additional sanity + -- check here: make sure the country does overlap with the area where + -- we expect it to be as per static country grid. + FOR location IN + SELECT country_code FROM country_osm_grid + WHERE ST_Covers(geometry, NEW.centroid) and country_code = NEW.country_code + LIMIT 1 + LOOP + --DEBUG: RAISE WARNING 'Updating names for country '%' with: %', NEW.country_code, NEW.name; + UPDATE country_name SET name = name || NEW.name WHERE country_code = NEW.country_code; + END LOOP; END IF; -- For linear features we need the full geometry for determining the address diff --git a/test/bdd/db/import/country.feature b/test/bdd/db/import/country.feature new file mode 100644 index 00000000..21f95e1f --- /dev/null +++ b/test/bdd/db/import/country.feature @@ -0,0 +1,47 @@ +@DB +Feature: Country handling + Tests for import and use of country information + + Scenario: Country names from OSM country relations are added + Given the places + | osm | class | type | admin | name+name:xy | country | geometry | + | R1 | boundary | administrative | 2 | Loudou | de | (9 52, 9 53, 10 52, 9 52) | + Given the places + | osm | class | type | name | geometry | + | N1 | place | town | Wenig | country:de | + When importing + When searching for "Wenig, Loudou" + Then results contain + | osm_type | osm_id | name | + | N | 1 | Wenig, Deutschland | + When searching for "Wenig" + | accept-language | + | xy,en | + Then results contain + | osm_type | osm_id | name | + | N | 1 | Wenig, Loudou | + Scenario: OSM country relations outside expected boundaries are ignored + Given the places + | osm | class | type | admin | name+name:xy | country | geometry | + | R1 | boundary | administrative | 2 | Loudou | de | poly-area:0.1 | + Given the places + | osm | class | type | name | geometry | + | N1 | place | town | Wenig | country:de | + When importing + When searching for "Wenig" + | accept-language | + | xy,en | + Then results contain + | osm_type | osm_id | name | + | N | 1 | Wenig, Germany | + Scenario: Pre-defined country names are used + Given the places + | osm | class | type | name | geometry | + | N1 | place | town | Ingb | country:ch | + When importing + And searching for "Ingb" + | accept-language | + | en,de | + Then results contain + | osm_type | osm_id | name | + | N | 1 | Ingb, Switzerland |