-- Instead simply use the containing area with the largest rank.
FOR location IN
SELECT place_id FROM placex
- WHERE bbox @ geometry AND _ST_Covers(geometry, ST_Centroid(bbox))
+ WHERE bbox && geometry AND _ST_Covers(geometry, ST_Centroid(bbox))
AND rank_address between 5 and 25
ORDER BY rank_address desc
LOOP
-- contains the bbox, only use addressable features
FOR location IN
SELECT place_id FROM placex
- WHERE bbox @ geometry AND _ST_Covers(geometry, ST_Centroid(bbox))
+ WHERE bbox && geometry AND _ST_Covers(geometry, ST_Centroid(bbox))
AND rank_address between 5 and 25
ORDER BY rank_address desc
LOOP
WHERE make_standard_name(name->'name') = bnd_name
AND placex.class = 'place' AND placex.type = bnd.extratags->'place'
AND placex.osm_type = 'N'
+ AND placex.linked_place_id is null
AND placex.rank_search < 26 -- needed to select the right index
AND _st_covers(bnd.geometry, placex.geometry)
LOOP
WHERE placex.class = 'place' AND placex.osm_type = 'N'
AND placex.extratags ? 'wikidata' -- needed to select right index
AND placex.extratags->'wikidata' = bnd.extratags->'wikidata'
+ AND placex.linked_place_id is null
AND placex.rank_search < 26
AND _st_covers(bnd.geometry, placex.geometry)
ORDER BY make_standard_name(name->'name') = bnd_name desc
false, placex.postcode)).address_rank)
OR (bnd.rank_address = 0 and placex.rank_search = bnd.rank_search))
AND placex.osm_type = 'N'
+ AND placex.linked_place_id is null
AND placex.rank_search < 26 -- needed to select the right index
AND _st_covers(bnd.geometry, placex.geometry)
LOOP
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