Try something like: WITH foo AS ( SELECT ST_AsRaster( ST_GeomFromText('POLYGON ((-52.54178994517749 46.99199259385565, -52.54178994517749 46.996897959881, -52.53436080387823 46.996897959881, -52.53436080387823 46.99199259385565, -52.54178994517749 46.99199259385565))', 4269), rast, '8BUI', touched := True ) AS rast FROM elev LIMIT 1 ) SELECT ST_Intersection( elev.rast, foo.rast ) AS rast FROM elev JOIN foo ON ST_Intersects(elev.rast, foo.rast)
The idea is to explicitly convert the geometry into a raster using one of the elev rasters as a reference. The "touched := True" slightly changes the behavior of the rasterization. >From the docs: The optional touched parameter defaults to false and maps to the GDAL ALL_TOUCHED rasterization option, which determines if pixels touched by lines or polygons will be burned. On Thu, Feb 5, 2015 at 2:45 PM, Jean Marchal <jean.d.marc...@gmail.com> wrote: > Bborie, > > I am running PostGIS 2.1.5. Here is the output of the > postgis_full_version(): > > "POSTGIS="2.1.5 r13152" GEOS="3.3.3-CAPI-1.7.4" PROJ="Rel. 4.7.1, 23 > September 2009" GDAL="GDAL 1.9.0, released 2011/12/29" LIBXML="2.8.0" > LIBJSON="UNKNOWN" RASTER" > > My query looks like this: > > SELECT ST_Intersection(ST_GeomFromText('POLYGON ((-52.54178994517749 > 46.99199259385565, -52.54178994517749 46.996897959881, -52.53436080387823 > 46.996897959881, -52.53436080387823 46.99199259385565, -52.54178994517749 > 46.99199259385565))', 4269), rast) as rast > FROM elev > > David, > > This query does not returns all the polygons that intersect my polygon. I > think it returns only those where the centroid is inside the polygon or is > it covered based? (like 50% of the pixel intersect with the polygon). > > Thanks for your rapid answers! > > Jean > > 2015-02-05 14:31 GMT-08:00 David Haynes <hayne...@gmail.com>: > > select ST_Clip(r.rast,p.geom) as rast >> from polygon p inner join raster r on ST_intersects(r.rast, p.geom) >> >> This returns a raster which has all pixels inside the polygon >> >> On Thu, Feb 5, 2015 at 4:05 PM, Jean Marchal <jean.d.marc...@gmail.com> >> wrote: >> >>> Hi list, >>> >>> I am trying to return all the pixels in a raster that intersect (not >>> just touch) an extent (say a rectangle). I tried ST_Clip and >>> ST_Intersection(raster, geom) but they don't return all the pixels that >>> intersect my extent polygon. Do I have to vectorize the raster first using >>> ST_PixelAsPolygons or there is a better / more efficient way to proceed? >>> >>> Ultimately the goal is to fetch the resulting raster in R. >>> >>> Thanks, >>> >>> Jean >>> >>> _______________________________________________ >>> postgis-users mailing list >>> postgis-users@lists.osgeo.org >>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users >>> >> >> >> _______________________________________________ >> postgis-users mailing list >> postgis-users@lists.osgeo.org >> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users >> > > > _______________________________________________ > postgis-users mailing list > postgis-users@lists.osgeo.org > http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users >
_______________________________________________ postgis-users mailing list postgis-users@lists.osgeo.org http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users