[postgis-users] ST_Buffer + grid problem

Pierre Racine Pierre.Racine at sbf.ulaval.ca
Wed Mar 21 12:46:58 PDT 2012


> I am not sure if this is possible, but I have computed (using ST_Buffer) a sort of
> buffer around several LINESTRINGs. Now I would like to lay some sort of grid of
> say 1m^2 cell size on top of this collection of geometries and then compute the
> intersection... so in the end I would like to for example, know that grid cell ID = 1
> intersects with buffers 1 and 10, grid cell 2 intersects with buffers 7, 10 etc..
> 
> Is there a simple way of doing this in postgis? Maybe someone could point me to
> some documentation of how I can generate such a grid in postgis and maybe
> then I can use just ST_Intersect once I have these two geometries?

With the raster type you can now easily create a vector grid like this:

CREATE TABLE vectorgrid AS
SELECT (gvxy).geom, ((gvxy).x - 1) * rwidth + (gvxy).y gridid
FROM (SELECT ST_PixelAsPolygons(rast) gvxy, ST_Width(rast) rwidth
             FROM (SELECT ST_AsRaster(ST_Extent(geom)::geometry, 1.0, 1.0) rast 
                          FROM yourbuffertable
                         ) foo1
            ) foo2;

Make sure a spatial index exist on both tables:

CREATE INDEX yourbuffertable_geom_idx  ON yourbuffertable USING gist  (geom);
CREATE INDEX vectorgrid _geom_idx  ON vectorgrid USING gist  (geom);

You can then perform a normal intersect query:

CREATE TABLE interresult AS
SELECT b.bufferid, g.gridid, ST_Intersection(g.geom, b.geom) geom
FROM vectorgrid g, yourbuffertable b
WHERE ST_Intersects(g.geom, b.geom);

Pierre



More information about the postgis-users mailing list