mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-14 18:37:58 +00:00
Merge pull request #3345 from lonvia/simplify-large-geometries
Simplify very large polygons that are not used in addresses
This commit is contained in:
@@ -296,7 +296,9 @@ BEGIN
|
||||
extratags = NEW.extratags,
|
||||
admin_level = NEW.admin_level,
|
||||
indexed_status = 2,
|
||||
geometry = NEW.geometry
|
||||
geometry = CASE WHEN existingplacex.rank_address = 0
|
||||
THEN simplify_large_polygons(NEW.geometry)
|
||||
ELSE NEW.geometry END
|
||||
WHERE place_id = existingplacex.place_id;
|
||||
|
||||
-- Invalidate linked places: they potentially get a new name and addresses.
|
||||
|
||||
@@ -718,6 +718,12 @@ BEGIN
|
||||
NEW.country_code := NULL;
|
||||
END IF;
|
||||
|
||||
-- Simplify polygons with a very large memory footprint when they
|
||||
-- do not take part in address computation.
|
||||
IF NEW.rank_address = 0 THEN
|
||||
NEW.geometry := simplify_large_polygons(NEW.geometry);
|
||||
END IF;
|
||||
|
||||
END IF;
|
||||
|
||||
{% if debug %}RAISE WARNING 'placex_insert:END: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type;{% endif %}
|
||||
|
||||
@@ -436,6 +436,20 @@ END;
|
||||
$$
|
||||
LANGUAGE plpgsql IMMUTABLE;
|
||||
|
||||
CREATE OR REPLACE FUNCTION simplify_large_polygons(geometry GEOMETRY)
|
||||
RETURNS GEOMETRY
|
||||
AS $$
|
||||
BEGIN
|
||||
IF ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon')
|
||||
and ST_MemSize(geometry) > 3000000
|
||||
THEN
|
||||
geometry := ST_SimplifyPreserveTopology(geometry, 0.0001);
|
||||
END IF;
|
||||
RETURN geometry;
|
||||
END;
|
||||
$$
|
||||
LANGUAGE plpgsql IMMUTABLE;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION place_force_delete(placeid BIGINT)
|
||||
RETURNS BOOLEAN
|
||||
|
||||
Reference in New Issue
Block a user