mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
remove ST_Covers check when also testing for ST_Intersects
Using both is slightly problematic because they have different ways to use the index. Newer versions of Postgis exhibit a query planner issue when both functions appear together. As ST_Intersects includes ST_Covers, simply remove the latter.
This commit is contained in:
@@ -162,14 +162,14 @@ BEGIN
|
|||||||
IF st_area(NEW.geometry) < 0.000000001 AND st_area(existinggeometry) < 1 THEN
|
IF st_area(NEW.geometry) < 0.000000001 AND st_area(existinggeometry) < 1 THEN
|
||||||
|
|
||||||
-- re-index points that have moved in / out of the polygon, could be done as a single query but postgres gets the index usage wrong
|
-- re-index points that have moved in / out of the polygon, could be done as a single query but postgres gets the index usage wrong
|
||||||
update placex set indexed_status = 2 where indexed_status = 0 and
|
update placex set indexed_status = 2 where indexed_status = 0
|
||||||
(st_covers(NEW.geometry, placex.geometry) OR ST_Intersects(NEW.geometry, placex.geometry))
|
AND ST_Intersects(NEW.geometry, placex.geometry)
|
||||||
AND NOT (st_covers(existinggeometry, placex.geometry) OR ST_Intersects(existinggeometry, placex.geometry))
|
AND NOT ST_Intersects(existinggeometry, placex.geometry)
|
||||||
AND rank_search > existingplacex.rank_search AND (rank_search < 28 or name is not null);
|
AND rank_search > existingplacex.rank_search AND (rank_search < 28 or name is not null);
|
||||||
|
|
||||||
update placex set indexed_status = 2 where indexed_status = 0 and
|
update placex set indexed_status = 2 where indexed_status = 0
|
||||||
(st_covers(existinggeometry, placex.geometry) OR ST_Intersects(existinggeometry, placex.geometry))
|
AND ST_Intersects(existinggeometry, placex.geometry)
|
||||||
AND NOT (st_covers(NEW.geometry, placex.geometry) OR ST_Intersects(NEW.geometry, placex.geometry))
|
AND NOT ST_Intersects(NEW.geometry, placex.geometry)
|
||||||
AND rank_search > existingplacex.rank_search AND (rank_search < 28 or name is not null);
|
AND rank_search > existingplacex.rank_search AND (rank_search < 28 or name is not null);
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|||||||
@@ -455,9 +455,9 @@ BEGIN
|
|||||||
-- RAISE WARNING 'placex poly insert: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type;
|
-- RAISE WARNING 'placex poly insert: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type;
|
||||||
|
|
||||||
-- work around bug in postgis, this may have been fixed in 2.0.0 (see http://trac.osgeo.org/postgis/ticket/547)
|
-- work around bug in postgis, this may have been fixed in 2.0.0 (see http://trac.osgeo.org/postgis/ticket/547)
|
||||||
update placex set indexed_status = 2 where (st_covers(NEW.geometry, placex.geometry) OR ST_Intersects(NEW.geometry, placex.geometry))
|
update placex set indexed_status = 2 where ST_Intersects(NEW.geometry, placex.geometry)
|
||||||
AND rank_search > NEW.rank_search and indexed_status = 0 and ST_geometrytype(placex.geometry) = 'ST_Point' and (rank_search < 28 or name is not null or (NEW.rank_search >= 16 and address ? 'place'));
|
AND rank_search > NEW.rank_search and indexed_status = 0 and ST_geometrytype(placex.geometry) = 'ST_Point' and (rank_search < 28 or name is not null or (NEW.rank_search >= 16 and address ? 'place'));
|
||||||
update placex set indexed_status = 2 where (st_covers(NEW.geometry, placex.geometry) OR ST_Intersects(NEW.geometry, placex.geometry))
|
update placex set indexed_status = 2 where ST_Intersects(NEW.geometry, placex.geometry)
|
||||||
AND rank_search > NEW.rank_search and indexed_status = 0 and ST_geometrytype(placex.geometry) != 'ST_Point' and (rank_search < 28 or name is not null or (NEW.rank_search >= 16 and address ? 'place'));
|
AND rank_search > NEW.rank_search and indexed_status = 0 and ST_geometrytype(placex.geometry) != 'ST_Point' and (rank_search < 28 or name is not null or (NEW.rank_search >= 16 and address ? 'place'));
|
||||||
END IF;
|
END IF;
|
||||||
ELSE
|
ELSE
|
||||||
|
|||||||
@@ -476,9 +476,9 @@ BEGIN
|
|||||||
IF placegeom IS NOT NULL AND ST_IsValid(placegeom) THEN
|
IF placegeom IS NOT NULL AND ST_IsValid(placegeom) THEN
|
||||||
IF ST_GeometryType(placegeom) in ('ST_Polygon','ST_MultiPolygon') THEN
|
IF ST_GeometryType(placegeom) in ('ST_Polygon','ST_MultiPolygon') THEN
|
||||||
FOR geom IN select split_geometry(placegeom) FROM placex WHERE place_id = placeid LOOP
|
FOR geom IN select split_geometry(placegeom) FROM placex WHERE place_id = placeid LOOP
|
||||||
update placex set indexed_status = 2 where (st_covers(geom, placex.geometry) OR ST_Intersects(geom, placex.geometry))
|
update placex set indexed_status = 2 where ST_Intersects(geom, placex.geometry)
|
||||||
AND rank_search > rank and indexed_status = 0 and ST_geometrytype(placex.geometry) = 'ST_Point' and (rank_search < 28 or name is not null or (rank >= 16 and address ? 'place'));
|
AND rank_search > rank and indexed_status = 0 and ST_geometrytype(placex.geometry) = 'ST_Point' and (rank_search < 28 or name is not null or (rank >= 16 and address ? 'place'));
|
||||||
update placex set indexed_status = 2 where (st_covers(geom, placex.geometry) OR ST_Intersects(geom, placex.geometry))
|
update placex set indexed_status = 2 where ST_Intersects(geom, placex.geometry)
|
||||||
AND rank_search > rank and indexed_status = 0 and ST_geometrytype(placex.geometry) != 'ST_Point' and (rank_search < 28 or name is not null or (rank >= 16 and address ? 'place'));
|
AND rank_search > rank and indexed_status = 0 and ST_geometrytype(placex.geometry) != 'ST_Point' and (rank_search < 28 or name is not null or (rank >= 16 and address ? 'place'));
|
||||||
END LOOP;
|
END LOOP;
|
||||||
ELSE
|
ELSE
|
||||||
|
|||||||
Reference in New Issue
Block a user