- IF NEW.osm_type = 'R' AND NEW.rank_search < 26 THEN
-
- -- see if we have any special relation members
- select members from planet_osm_rels where id = NEW.osm_id INTO relation_members;
- --DEBUG: RAISE WARNING 'Got relation members';
-
- IF relation_members IS NOT NULL THEN
- FOR relMember IN select get_osm_rel_members(relation_members,ARRAY['label']) as member LOOP
- --DEBUG: RAISE WARNING 'Found label member %', relMember.member;
-
- FOR linkedPlacex IN select * from placex where osm_type = upper(substring(relMember.member,1,1))::char(1)
- and osm_id = substring(relMember.member,2,10000)::bigint
- and class = 'place' order by rank_search desc limit 1 LOOP
-
- -- If we don't already have one use this as the centre point of the geometry
- IF NEW.centroid IS NULL THEN
- NEW.centroid := coalesce(linkedPlacex.centroid,st_centroid(linkedPlacex.geometry));
- END IF;
-
- -- merge in the label name, re-init word vector
- IF NOT linkedPlacex.name IS NULL THEN
- NEW.name := linkedPlacex.name || NEW.name;
- name_vector := array_merge(name_vector, make_keywords(linkedPlacex.name));
- END IF;
-
- -- merge in extra tags
- NEW.extratags := hstore(linkedPlacex.class, linkedPlacex.type) || coalesce(linkedPlacex.extratags, ''::hstore) || coalesce(NEW.extratags, ''::hstore);
-
- -- mark the linked place (excludes from search results)
- UPDATE placex set linked_place_id = NEW.place_id where place_id = linkedPlacex.place_id;
-
- select wikipedia, importance
- FROM compute_importance(linkedPlacex.extratags, NEW.country_code,
- 'N', linkedPlacex.osm_id)
- INTO linked_wikipedia,linked_importance;
- --DEBUG: RAISE WARNING 'Linked label member';
- END LOOP;
-
- END LOOP;
-
- IF NEW.centroid IS NULL THEN
-
- FOR relMember IN select get_osm_rel_members(relation_members,ARRAY['admin_center','admin_centre']) as member LOOP
- --DEBUG: RAISE WARNING 'Found admin_center member %', relMember.member;
-
- FOR linkedPlacex IN select * from placex where osm_type = upper(substring(relMember.member,1,1))::char(1)
- and osm_id = substring(relMember.member,2,10000)::bigint
- and class = 'place' order by rank_search desc limit 1 LOOP
-
- -- For an admin centre we also want a name match - still not perfect, for example 'new york, new york'
- -- But that can be fixed by explicitly setting the label in the data
- IF make_standard_name(NEW.name->'name') = make_standard_name(linkedPlacex.name->'name')
- AND NEW.rank_address = linkedPlacex.rank_address THEN
-
- -- If we don't already have one use this as the centre point of the geometry
- IF NEW.centroid IS NULL THEN
- NEW.centroid := coalesce(linkedPlacex.centroid,st_centroid(linkedPlacex.geometry));
- END IF;
-
- -- merge in the name, re-init word vector
- IF NOT linkedPlacex.name IS NULL THEN
- NEW.name := linkedPlacex.name || NEW.name;
- name_vector := make_keywords(NEW.name);
- END IF;
-
- -- merge in extra tags
- NEW.extratags := hstore(linkedPlacex.class, linkedPlacex.type) || coalesce(linkedPlacex.extratags, ''::hstore) || coalesce(NEW.extratags, ''::hstore);
-
- -- mark the linked place (excludes from search results)
- UPDATE placex set linked_place_id = NEW.place_id where place_id = linkedPlacex.place_id;
-
- select wikipedia, importance
- FROM compute_importance(linkedPlacex.extratags, NEW.country_code,
- 'N', linkedPlacex.osm_id)
- INTO linked_wikipedia,linked_importance;
- --DEBUG: RAISE WARNING 'Linked admin_center';
- END IF;
-
- END LOOP;
-
- END LOOP;
-
- END IF;