[postgis-users] Improvement suggestion

Paul van der Linden paul.doskabouter at gmail.com
Sun Dec 2 10:44:30 PST 2018


As I am working with large polygons, I'm always struggling with
performance, and trying to find ways to improve them.
F.e. I have lots of queries like:
SELECT ST_Intersection(table1.geom,table2.geom)
FROM table1
JOIN table2 on ST_Intersects(table1.geom,table2.geom)

In case of large polygons this is sometimes a bottleneck, and I have the
following suggestion:
Create a function which returns the relation between 2 polygons (within,
intersects or disjunct) so that I can do the following:

SELECT
  CASE
     WHEN ST_Relate(table1.geom,table2.geom)=intersects THEN
ST_Intersection(table1.geom,table2.geom)
     ELSE table1.geom
  END
FROM table1
JOIN table2 on ST_Relate(table1.geom,table2.geom) IN (intersects,within)

or (because ST_Relate is calculated twice in previous query):

SELECT
  CASE
     WHEN relate=intersects THEN ST_Intersection(t1geom,t2geom)
     ELSE t1geom
  END
FROM (
  SELECT ST_Relate(table1.geom,table2.geom) as relate,table1.geom AS
t1geom,table2.geom AS t2geom FROM table1
  JOIN table2 on table1.geom && table2.geom
) AS allpolies
WHERE relate IN (intersects,within)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20181202/e25a92f4/attachment.html>


More information about the postgis-users mailing list