centroid GEOMETRY;
parent_address_level SMALLINT;
+ place_address_level SMALLINT;
addr_street TEXT;
addr_place TEXT;
where linked_place_id = NEW.place_id;
-- update not necessary for osmline, cause linked_place_id does not exist
+ NEW.extratags := NEW.extratags - 'linked_place'::TEXT;
+
IF NEW.linked_place_id is not null THEN
--DEBUG: RAISE WARNING 'place already linked to %', NEW.linked_place_id;
RETURN NEW;
IF NEW.class = 'boundary' and NEW.type = 'administrative' THEN
parent_address_level := get_parent_address_level(NEW.geometry, NEW.admin_level);
IF parent_address_level >= NEW.rank_address THEN
- NEW.rank_address := parent_address_level + 2;
+ IF parent_address_level >= 24 THEN
+ NEW.rank_address := 25;
+ ELSE
+ NEW.rank_address := parent_address_level + 2;
+ END IF;
END IF;
ELSE
parent_address_level := 3;
THEN
NEW.importance = linked_importance;
END IF;
+ ELSE
+ -- No linked place? As a last resort check if the boundary is tagged with
+ -- a place type and adapt the rank address.
+ IF NEW.rank_address > 0 and NEW.extratags ? 'place' THEN
+ SELECT address_rank INTO place_address_level
+ FROM compute_place_rank(NEW.country_code, 'A', 'place',
+ NEW.extratags->'place', 0::SMALLINT, False, null);
+ IF place_address_level > parent_address_level and
+ place_address_level < 26 THEN
+ NEW.rank_address := place_address_level;
+ END IF;
+ END IF;
END IF;
-- Initialise the name vector using our name
END IF;
SELECT * FROM insert_addresslines(NEW.place_id, NEW.partition,
- NEW.rank_search, NEW.address,
+ CASE WHEN NEW.rank_address = 0
+ THEN NEW.rank_search ELSE NEW.rank_address END,
+ NEW.address,
CASE WHEN NEW.rank_search >= 26
AND NEW.rank_search < 30
THEN NEW.geometry ELSE NEW.centroid END)
BEGIN
-- RAISE WARNING 'placex_delete % %',OLD.osm_type,OLD.osm_id;
- update placex set linked_place_id = null, indexed_status = 2 where linked_place_id = OLD.place_id and indexed_status = 0;
- --DEBUG: RAISE WARNING 'placex_delete:01 % %',OLD.osm_type,OLD.osm_id;
- update placex set linked_place_id = null where linked_place_id = OLD.place_id;
- --DEBUG: RAISE WARNING 'placex_delete:02 % %',OLD.osm_type,OLD.osm_id;
+ IF OLD.linked_place_id is null THEN
+ update placex set linked_place_id = null, indexed_status = 2 where linked_place_id = OLD.place_id and indexed_status = 0;
+ --DEBUG: RAISE WARNING 'placex_delete:01 % %',OLD.osm_type,OLD.osm_id;
+ update placex set linked_place_id = null where linked_place_id = OLD.place_id;
+ --DEBUG: RAISE WARNING 'placex_delete:02 % %',OLD.osm_type,OLD.osm_id;
+ ELSE
+ update placex set indexed_status = 2 where place_id = OLD.linked_place_id and indexed_status = 0;
+ END IF;
IF OLD.rank_address < 30 THEN