Postgis Raster:加载Tif-Subdataset

时间:2012-05-22 13:42:28

标签: postgresql postgis gdal

我想将TIF文件中的子数据集加载到PostGIS数据库中。

gdalinfo为我提供了以下有关TIF文件的信息:

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

我想加载第二个子数据集(392x514352)。

现在,使用raster2pgsql和文件名作为输入,只加载第一个子数据集,忽略第二个子数据集。只有一个波段,因此使用-b开关不起作用。有什么建议吗?

非常感谢

托马斯

2 个答案:

答案 0 :(得分:0)

子栅格在栅格中并不常见,我从未在TIFF中看到它们(通常,你会看到乐队,而不是子数据集)。它看起来像a similar bug was fixed for HDF5 files,但这可能对你的GTiff没有帮助。我鼓励你为这个功能创建一个错误票。

与此同时,gdal_translate可以与-sds选项一起使用,将文件的所有子数据集复制到各个输出文件中,然后可以将这些文件与raster2pgsql一起使用。

答案 1 :(得分:0)

对于postgis栅格,子数据集是由postgis系统创建的,因为postgis栅格通常是平铺的,并且每个平铺在表中用不同的线表示,并且通常用不同的rid表示。我不确定这里发生了什么,但是我想您使用了outofdb选项来存储栅格,对吧?

对于那些使用gdal_translate从postgis导出栅格的用户,可以在postgresql连接选项中使用选项“ mode ='2'”:结果是一个简单的文件,它合并了rast列的所有行。

示例:

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