Tuesday, 15 September 2015

postgis - ST_Intersection: Intersection of all geometries in a table


Must be a fairly trivial task, but PostGIS gives me errors..


I have a set of geometries geom in a single table t1, and I would like to find intersection area of all of the rows foo where value is bar.


What I am doing is:


SELECT ST_INTERSECTION(geom) FROM t1 WHERE foo = 'bar' and ST_INTERSECTS(geom)


I understand examples where I have two geometries or two tables, but I can't figure out how to do that in a single table across rows. I have several thousands records to filter, so specifying geometries explicitly is not an option.




And yet I am not getting the results I expect from St_intersection (yeah, I assume not the method's fault):


If I apply the method as described above I will get an intersection between each and every row in the table. It's easier to see what I mean, check the picture below.



Instead of having a single geometry (polygon) which represents the shared area between all geometries I get multiple geometries. I am still wondering how to get the area shared by all geometries, not a set of intersections for all pairs in the table.



Answer



As I understand that you would like to intersect the geometries across rows in one table, so you need to do something like that:


  select (ST_intersection(a.geom, b.geom)) from t1 a, t1 b where ST_Intersects

(a.geom,b.geom) AND a.id

Tested (working)


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...