[postgis-users] ST_AsRaster and gdal_translate
Pierre Racine
Pierre.Racine at sbf.ulaval.ca
Wed Jul 25 13:40:26 PDT 2012
If he does that he will not get the right value from his polygon layer...
The right way to create an exportable raster from a polygon table it to:
1) Rasterize and align properly your geometries (adding the gridx and gridy parameters to ST_AsRaster and the pixeltype and value to burn the right value):
CREATE TABLE rasters.bdtq_20k_hydro_so_gfsm_aea_subset_1000m AS
SELECT ST_AsRaster(hyd.geom, 1000.0, 1000.0, 0.0, 0.0, '32BUI'::text, nameOfTheColumnContainingTheValueToBurn ) AS rast
FROM hydrology.bdtq_20k_hydro_so_gfsm_aea_subset AS hyd;
2) Union the table.
If your raster is very small you can do:
CREATE TABLE rast2export AS
SELECT ST_Union(rast) rast
FROM rasters.bdtq_20k_hydro_so_gfsm_aea_subset
If your raster is big, ST_Union is too slow. You have to use the method I describe in my blog
http://geospatialelucubrations.blogspot.ca/2012/07/a-slow-yet-1000x-faster-alternative-to.html
3) Then you can GDAL_translate using mode=1
Sorry it is so complicated...
In the future there should just be a ST_UnionToRaster() function, planned in the specifications, that rasterize all the geometries to a common raster and then export. So just two minimal steps.
Pierre
> -----Original Message-----
> From: postgis-users-bounces at postgis.refractions.net [mailto:postgis-users-
> bounces at postgis.refractions.net] On Behalf Of Bborie Park
> Sent: Wednesday, July 25, 2012 4:23 PM
> To: postgis-users at postgis.refractions.net
> Subject: Re: [postgis-users] ST_AsRaster and gdal_translate
>
> For exporting, instead of using the rasters in
> "bdtq_20k_hydro_so_gfsm_aea_subset_1000m", you may want to try
> something
> like...
>
> CREATE TABLE foo AS
> SELECT 1 AS rid, ST_AsRaster((
> SELECT
> ST_Collect(geom)
> FROM hydrology.bdtq_20k_hydro_so_gfsm_aea_subset
> ), 1000.0, 1000.0
> ) AS rast
>
> The above creates one raster using the collection of geometries, which
> can then be exported with gdal_translate.
>
> -bborie
>
> On 07/25/2012 12:57 PM, Guillaume Drolet DRF wrote:
> > Hi,
> >
> > I have been struggling with this since yesterday and now I think it is
> > time for me to request some help from the community :
> >
> > I am trying to convert a geometry table (polygons) to a raster that will
> > have 1000 m-pixels, and then export that raster to a TIF file using
> > gdal_translate.
> > I've tried loads of different queries but nothing seems to work... Here
> > are examples of some the queries I tried:
> >
> > CREATE TABLE rasters.bdtq_20k_hydro_so_gfsm_aea_subset_1000m AS
> > SELECT ST_AsRaster(hyd.geom, 1000.0, 1000.0) AS rast
> > FROM hydrology.bdtq_20k_hydro_so_gfsm_aea_subset AS hyd;
> >
> > ALTER TABLE rasters.bdtq_20k_hydro_so_gfsm_aea_subset_1000m ADD
> COLUMN
> > rid serial PRIMARY KEY;
> >
> > CREATE INDEX
> > ON rasters.bdtq_20k_hydro_so_gfsm_aea_subset_1000m
> > USING gist(st_convexhull(rast));
> >
> > SELECT AddRasterConstraints('rasters'::name,
> > 'bdtq_20k_hydro_so_gfsm_aea_subset_1000m'::name,
> > 'rast'::name);
> >
> > Then at the command line:
> >
> >>gdal_translate "PG:host=localhost port=5432 dbname=testspdb
> > user=postgres password=*** schema=rasters
> > table=bdtq_20k_hydro_so_gfsm_aea_subset_1000m mode=2"
> > E:\temp\hydro1000m.tif
> >
> > I get this error:
> >
> > ERROR 1: Error, the table
> > rasters.bdtq_20k_hydro_so_gfsm_aea_subset_1000m contains tiles with
> > different size, and irregular blocking is not supported yet
> > GDALOpen failed - 1
> > Error, the table rasters.bdtq_20k_hydro_so_gfsm_aea_subset_1000m
> > contains tiles
> > with different size, and irregular blocking is not supported yet
> >
> > My problem seems to be related to the irregular blocking of my raster. I
> > though I could create a raster with regular block and pixel size but I
> > didn't figure how to do this yet. I tried to achieve this by creating an
> > empty raster:
> >
> > CREATE TABLE rasters.test_rasterize (
> > rid serial PRIMARY KEY,
> > rast raster
> > );
> >
> > INSERT INTO rasters.test_rasterize VALUES (
> > 1,
> > ST_MakeEmptyRaster(45, 62, 1828552.00, 1422569.00, 1000.0, 1000.0,
> > 0.0, 0.0, 3175)
> > );
> > -- 45 and 62 are the approximate numbers of 1000 m pixels in x and y
> > that fit inside the extent of my geometry layer
> > UPDATE rasters.test_rasterize
> > SET rast = ST_AsRaster(geom, 1000.0, 1000.0)
> > FROM hydrology.bdtq_20k_hydro_so_gfsm_aea_subset;
> >
> >
> > When I call gdal_translate with rasters.test_rasterize, I get this:
> >
> > Input file size is 2, 4
> > 0...10...20...30...40...50...60...70...80...90...100 - done.
> >
> > I'm getting desperate and will greatly appreciate any hints!
> >
> > If that can help, I'm using PostGIS 2.0.0 r9605 and GDAL 1.9.0
> >
> > Many thanks,
> >
> > Guillaume
> >
> > _______________________________________________
> > postgis-users mailing list
> > postgis-users at postgis.refractions.net
> > http://postgis.refractions.net/mailman/listinfo/postgis-users
> >
>
> --
> Bborie Park
> Programmer
> Center for Vectorborne Diseases
> UC Davis
> 530-752-8380
> bkpark at ucdavis.edu
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list