<div dir="ltr">Hi,<div><br></div><div>I have two polygonal layers to intersect and need to measure area of intersections.</div><div><br></div><div>ST_Area(ST_Intersection(a.geom, b.geom)) works fine, but is rather slow. Typical polygon on first side has <10 edges, on second 200..1000 edges.</div><div><br></div><div>What are my options to make it faster? Any ideas, links, experiences to share are welcome.</div><div><br></div><div>For starters, this seems to work faster than vanilla ST_Intersection in my case:</div><div><pre style="font-family:"Courier New""><span style="color:rgb(0,0,128);font-weight:bold">create or replace function </span><span style="font-style:italic">clipped_st_intersection</span>(geom1 <span style="color:rgb(0,0,128);font-weight:bold">geometry</span>, geom2 <span style="color:rgb(0,0,128);font-weight:bold">geometry</span>)<br>  <span style="color:rgb(0,0,128);font-weight:bold">returns geometry<br></span><span style="color:rgb(0,0,128);font-weight:bold">as </span><span style="color:rgb(0,128,0);font-weight:bold">$$</span><span style="color:rgb(0,0,128);font-weight:bold">select </span><span style="font-style:italic">ST_Intersection</span>(<br>              <span style="color:rgb(0,0,128);font-weight:bold">case<br></span><span style="color:rgb(0,0,128);font-weight:bold">                when </span><span style="font-style:italic">ST_MemSize</span>(geom1) > <span style="color:rgb(0,0,255)">160 </span><span style="color:rgb(0,0,128);font-weight:bold">then </span><span style="font-style:italic">ST_ClipByBox2D</span>(geom1, geom2)<br>                <span style="color:rgb(0,0,128);font-weight:bold">else </span>geom1 <span style="color:rgb(0,0,128);font-weight:bold">end</span>, <span style="color:rgb(0,0,128);font-weight:bold">case<br></span><span style="color:rgb(0,0,128);font-weight:bold">                when </span><span style="font-style:italic">ST_MemSize</span>(geom2) > <span style="color:rgb(0,0,255)">160 </span><span style="color:rgb(0,0,128);font-weight:bold">then </span><span style="font-style:italic">ST_ClipByBox2D</span>(geom2, geom1)<br>                <span style="color:rgb(0,0,128);font-weight:bold">else </span>geom2 <span style="color:rgb(0,0,128);font-weight:bold">end</span>)<span style="color:rgb(0,128,0);font-weight:bold">$$<br></span><span style="color:rgb(0,0,128);font-weight:bold">language sql<br></span><span style="color:rgb(0,0,128);font-weight:bold">immutable<br></span><span style="color:rgb(0,0,128);font-weight:bold">strict<br></span><span style="color:rgb(0,0,128);font-weight:bold">parallel safe</span>;</pre></div></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Darafei Praliaskouski<br>Support me: <a href="http://patreon.com/komzpa">http://patreon.com/komzpa</a></div></div>