X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/a2cf6db61be508bb1f23e78f87e4eaa109f62c62..ad50016c498098d0f0850c3a9de60623a3bd7e1f:/lib-sql/functions/placex_triggers.sql diff --git a/lib-sql/functions/placex_triggers.sql b/lib-sql/functions/placex_triggers.sql index 681c302d..9d0d73b5 100644 --- a/lib-sql/functions/placex_triggers.sql +++ b/lib-sql/functions/placex_triggers.sql @@ -668,7 +668,7 @@ BEGIN NEW.place_id := nextval('seq_place'); NEW.indexed_status := 1; --STATUS_NEW - NEW.centroid := ST_PointOnSurface(NEW.geometry); + NEW.centroid := get_center_point(NEW.geometry); NEW.country_code := lower(get_country_code(NEW.centroid)); NEW.partition := get_partition(NEW.country_code); @@ -727,10 +727,12 @@ BEGIN {% if not disable_diff_updates %} -- The following is not needed until doing diff updates, and slows the main index process down - IF NEW.rank_address > 0 THEN + IF NEW.rank_address between 2 and 27 THEN IF (ST_GeometryType(NEW.geometry) in ('ST_Polygon','ST_MultiPolygon') AND ST_IsValid(NEW.geometry)) THEN -- Performance: We just can't handle re-indexing for country level changes - IF st_area(NEW.geometry) < 1 THEN + IF (NEW.rank_address < 26 and st_area(NEW.geometry) < 1) + OR (NEW.rank_address >= 26 and st_area(NEW.geometry) < 0.01) + THEN -- mark items within the geometry for re-indexing -- RAISE WARNING 'placex poly insert: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type; @@ -745,9 +747,11 @@ BEGIN or name is not null or (NEW.rank_address >= 16 and address ? 'place')); END IF; - ELSE + ELSEIF ST_GeometryType(NEW.geometry) not in ('ST_LineString', 'ST_MultiLineString') + OR ST_Length(NEW.geometry) < 0.5 + THEN -- mark nearby items for re-indexing, where 'nearby' depends on the features rank_search and is a complete guess :( - diameter := update_place_diameter(NEW.rank_search); + diameter := update_place_diameter(NEW.rank_address); IF diameter > 0 THEN -- RAISE WARNING 'placex point insert: % % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type,diameter; IF NEW.rank_search >= 26 THEN @@ -866,7 +870,7 @@ BEGIN END IF; -- Compute a preliminary centroid. - NEW.centroid := ST_PointOnSurface(NEW.geometry); + NEW.centroid := get_center_point(NEW.geometry); -- recalculate country and partition IF NEW.rank_search = 4 AND NEW.address is not NULL AND NEW.address ? 'country' THEN @@ -1399,6 +1403,8 @@ BEGIN {% if debug %}RAISE WARNING 'placex_delete:12 % %',OLD.osm_type,OLD.osm_id;{% endif %} + UPDATE location_postcode SET indexed_status = 2 WHERE parent_place_id = OLD.place_id; + RETURN OLD; END;