在使用GDAL创建TIFF文件时,可以为选项参数papszOptions提供以下选项:
-
COMPRESS=<compression_type>
:设置压缩类型,可选值包括NONE
(不压缩,默认值)、JPEG
、LZW
、PACKBITS
、DEFLATE
、CCITTRLE
、CCITTFAX3
、CCITTFAX4
、CCITTRLEW
、PACKBITSW
、DEFLATEW
、LZMA
、ZSTD
。 -
PHOTOMETRIC=<photometric>
:设置像素格式,可选值包括MINISBLACK
(默认值,灰度图像)、MINISWHITE
、RGB
、PALETTE
(调色板索引图像)。 -
TILED=YES/NO
:指定是否以瓦片方式存储数据,默认值为NO。 -
BLOCKXSIZE=<pixels>
:指定每个瓦片的宽度(像素数),仅当TILED=YES时有效。 -
BLOCKYSIZE=<pixels>
:指定每个瓦片的高度(像素数),仅当TILED=YES时有效。 -
BIGTIFF=YES/NO
:指定是否使用BigTIFF格式,默认值为NO。BigTIFF支持超过4GB的文件大小限制。 -
INTERLEAVE=<interleave>
:设置波段存储的交错方式,可选值包括BAND
(波段交错,默认值)、PIXEL
(像素交错)、LINE
(行交错)。 -
COPY_SRC_OVERVIEWS=YES/NO
:指定是否复制源数据集的概览到新创建的数据集,默认为NO。 -
COPY_SRC_DOMAINS=YES/NO
:指定是否复制源数据集的元数据域到新创建的数据集,默认为YES。 -
其他格式特定选项:不同的GDAL驱动程序支持不同的选项,可以查阅驱动程序的文档以获取更多特定于格式的选项。
这些选项可以作为papszOptions参数的键值对传递给GDAL的Create()方法或CreateCopy()方法,用于设置创建TIFF文件时的相关参数。
是否压缩
“COMPRESS”,“JPEG”or“LZW”
ps:tdom可以使用JPEG、LZW压缩,dsm仅能使用LZW压缩
压缩质量
“QUALITY”, “75”
是否是大tiff
“BIGTIFF”, “IF_NEEDED”
是否写出tfw
“TFW”, “YES”
char** pszOptions = NULL;
pszOptions = CSLSetNameValue(pszOptions, "BIGTIFF", "IF_NEEDED");
if (m_SetDsm.bTfw)
pszOptions = CSLSetNameValue(pszOptions, "TFW", "YES");
std::string sCompress = m_SetDsm.sCompress.toLocal8Bit().toStdString();
if (sCompress == "JPEG")
{
pszOptions = CSLSetNameValue(pszOptions, "COMPRESS", sCompress.c_str());
pszOptions = CSLSetNameValue(pszOptions, "QUALITY", std::to_string(75).c_str());
pszOptions = CSLSetNameValue(pszOptions, "TILED", "YES");
}
else if (sCompress == "LZW")
{
pszOptions = CSLSetNameValue(pszOptions, "COMPRESS", sCompress.c_str());
pszOptions = CSLSetNameValue(pszOptions, "TILED", "YES");
}
GLenum pixelFmt = GL_RGB;
int nRasterCount = pixelFmt == GL_RGB ? 3 : 4;
GDALDriverH hDriver = GDALGetDriverByName("GTiff");
GDALDataset* pDstDataset = (GDALDataset*)GDALCreate(hDriver, sOutputFilePath.toLocal8Bit().toStdString().c_str()\
, nImgWidth, nImgHeight, nRasterCount, GDT_Byte, pszOptions);
设置最大波段数
const char* pszMaxBandCount = CPLGetConfigOption("GDAL_MAX_BAND_COUNT", "65536");
避免中文乱码
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
CPLSetConfigOption("SHAPE_ENCODING", "");
CPLSetConfigOption("FILEGDB_ENCODING", "CP936");
设置prj4库全路径
std::string strPrjLibFullPath = (_T("C:\\projd.dll"));
CPLSetConfigOption("PROJSO",strPrjLibFullPath.c_str());