1
votes

I'd like to load a subdataset from a TIF file into my PostGIS Database.

gdalinfo gives me the following infos about the TIF-file:

Driver: GTiff/GeoTIFF
Files: pathto/imagename.tif
Size is 611, 1
Coordinate System is `'
Metadata:
  TIFFTAG_IMAGEDESCRIPTION=CXmlTiff type 
  TIFFTAG_RESOLUSTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=100
  TIFFTAG_YRESOLUTION=100
ImageStructure Metadata:
  INTERLEAVE=BAND
Subdatasets:
  SUBDATASET_1_NAME=GTIFF_DIR:1:pathto/imagename.tif
  SUBDATASET_1_DESC=Page 1 (611P x 1L x 1B)
  SUBDATASET_2_NAME=GTIFF_DIR:2:pathto/imagename.tif
  SUBDATASET_2_DESC=Page 1 (392P x 514352L x 1B)
Corner Coordinates:
Upper Left  (   0.0, 0.0)
Lower Left  (   0.0, 1.0)
Upper Right ( 611.0, 0.0)
Lower Right ( 611.0, 1.0)
Center      ( 305.5, 0.5)
Band 1 Block=611x1 Type=Byte, ColorInterp=Gray

I'd like to load the second subdataset (392x514352).

Right now, using raster2pgsql and the filename as input, only the first subdataset is loaded, the second one is ignored. There is only one band, so using the -b switch does not work. Any advice?

Thanks a lot

Thomas

2

2 Answers

0
votes

Subdatasets are not common in rasters, and I've never seen them in TIFFs (normally, you see bands, not subdatasets). It looks like a similar bug was fixed for HDF5 files, but this probably won't help your GTiff. I'd encourage you to create a bug ticket for this feature.

In the meantime, gdal_translate could be used with the -sds option to copy all subdatasets of your file to individual output files, which you could then use with raster2pgsql.

0
votes

In the case of postgis rasters, subdatasets are created by the postgis system because postgis rasters are usually tiled and each tile is represented in the table by a different line, and usually a different rid. I am not sure what happened here, but I imagine you used the outofdb option to store your raster, right?

For those using gdal_translate for exporting rasters from postgis, you may use the option "mode='2'" in your postgresql connection options: the result is a simple file that merge all the lines of your rast column.

example:

gdal_translate PG:"host='localhost' port='5432' dbname='mydb' user='me' schema='public' password='secret' table='rastertable' where='rid BETWEEN 1 and 10' mode='2'" /path/filename.tif