END IF;
IF fallback THEN
- IF ST_Area(bbox) < 0.005 THEN
+ IF addr_street is null and addr_place is not null THEN
+ -- The address is attached to a place we don't know. Find the
+ -- nearest place instead.
+ FOR location IN
+ SELECT place_id FROM getNearFeatures(poi_partition, bbox, 26, '{}'::INTEGER[])
+ ORDER BY rank_address DESC, isguess asc, distance LIMIT 1
+ LOOP
+ parent_place_id := location.place_id;
+ END LOOP;
+ ELSEIF ST_Area(bbox) < 0.005 THEN
-- for smaller features get the nearest road
SELECT getNearestRoadPlaceId(poi_partition, bbox) INTO parent_place_id;
--DEBUG: RAISE WARNING 'Checked for nearest way (%)', parent_place_id;
END IF;
END IF;
END LOOP;
-
- IF address ? 'is_in' THEN
- -- is_in items need splitting
- isin := regexp_split_to_array(address->'is_in', E'[;,]');
- IF array_upper(isin, 1) IS NOT NULL THEN
- FOR i IN 1..array_upper(isin, 1) LOOP
- isin_tokens := array_merge(isin_tokens,
- word_ids_from_name(isin[i]));
-
- -- merge word into address vector
- IF NOT %REVERSE-ONLY% THEN
- nameaddress_vector := array_merge(nameaddress_vector,
- addr_ids_from_name(isin[i]));
- END IF;
- END LOOP;
- END IF;
- END IF;
END IF;
IF NOT %REVERSE-ONLY% THEN
nameaddress_vector := array_merge(nameaddress_vector, isin_tokens);
NEW.name := hstore('ref', NEW.address->'postcode');
- ELSEIF NEW.class = 'boundary' AND NOT is_area THEN
+ ELSEIF NEW.class = 'highway' AND is_area AND NEW.name is null
+ AND NEW.extratags ? 'area' AND NEW.extratags->'area' = 'yes'
+ THEN
+ RETURN NULL;
+ ELSEIF NEW.class = 'boundary' AND NOT is_area
+ THEN
RETURN NULL;
ELSEIF NEW.class = 'boundary' AND NEW.type = 'administrative'
AND NEW.admin_level <= 4 AND NEW.osm_type = 'W'