我想将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开关不起作用。有什么建议吗?
非常感谢
托马斯
答案 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