GDAL裁剪tif图(保留经纬度)

转自:如何使用GDAL进行AOI裁剪

void ImageCut(const char* pszSrcFile, const char* pszDstFile, int iStartX, int iStartY, int iSizeX, int iSizeY,const char* pszFormat)
{

	GDALAllRegister();

	GDALDataset* pSrcDS=(GDALDataset*)GDALOpen(pszSrcFile, GA_ReadOnly);

	GDALDataType eDT = pSrcDS->GetRasterBand(1)->GetRasterDataType();


	int iBandCount = pSrcDS->GetRasterCount();


	// 根据裁切范围确定裁切后的图像宽高

	int iDstWidth  = iSizeX;

	int iDstHeight = iSizeY;


	double adfGeoTransform[6] = {0};

	pSrcDS->GetGeoTransform(adfGeoTransform);


	// 计算裁切后的图像的左上角坐标

	adfGeoTransform[0] = adfGeoTransform[0] + iStartX*adfGeoTransform[1] + iStartY*adfGeoTransform[2];

	adfGeoTransform[3] = adfGeoTransform[3] + iStartX*adfGeoTransform[4] + iStartY*adfGeoTransform[5];


	// 创建输出文件并设置空间参考和坐标信息

	GDALDriver* poDriver = (GDALDriver *)GDALGetDriverByName(pszFormat);

	GDALDataset *pDstDS = poDriver->Create(pszDstFile, iDstWidth, iDstHeight, iBandCount, eDT, NULL);

	pDstDS->SetGeoTransform(adfGeoTransform);

	pDstDS->SetProjection(pSrcDS->GetProjectionRef());


	int *pBandMap = new int[iBandCount];

	for (int i=0; i<iBandCount; i++)

		pBandMap[i] = i+1;


	// 下面这里需要根据数据类型来判断,申请不同类型的缓存来进行处理,这里仅仅以8bit图像进行演示

	if (eDT == GDT_Byte) // 如果是8bit图像

	{

		// 申请所有数据所需要的缓存,如果图像太大应该用分块处理

		char *pDataBuff = new char[iDstWidth*iDstHeight*iBandCount];


		pSrcDS->RasterIO(GF_Read, iStartX, iStartY, iSizeX, iSizeY, pDataBuff, iSizeX, iSizeY, eDT, iBandCount, pBandMap, 0, 0, 0);

		pDstDS->RasterIO(GF_Write, 0, 0, iSizeX, iSizeY, pDataBuff, iSizeX, iSizeY, eDT, iBandCount, pBandMap, 0, 0, 0);


		delete(pDataBuff);

	}

	else

	{


		// 其他类型的图像,与8bit类似,就是申请的缓存类型不同而已
	}


	delete(pBandMap);

	GDALClose((GDALDatasetH)pSrcDS);
	GDALClose((GDALDatasetH)pDstDS);

	return  ;

}

函数调用时参数pszFormat

tif图片:GTiff

GDAL是一个开源的地理信息系统软件库,可用于读取、写入和处理各种栅格和矢量空间数据格式。GDAL可以通过使用命令行工具或编程接口来操作栅格数据,而其中一个常见的操作是裁剪tiff文件。 裁剪tiff文件的过程通常涉及以下步骤: 1. 安装GDAL软件库以及相应的命令行工具; 2. 确定裁剪区域的范围或边界,可以使用地理坐标或像素坐标; 3. 使用gdal_translate命令对原始tiff文件进行裁剪,指定裁剪区域和输出文件参数。例如,以下是一个典型的gdal_translate命令: gdal_translate -projwin xmin ymax xmax ymin input.tif output.tif 其中,-projwin参数表示裁剪窗口的位置,xmin、ymin、xmax和ymax分别表示窗口的左下角和右上角的地理坐标;input.tif是原始tiff文件,output.tif是输出文件。 除了使用gdal_translate命令外,还可以使用GDAL的编程接口(如Python)对tiff文件进行裁剪和处理。例如,可以使用GDAL提供的Dataset类和裁剪函数对tiff文件进行处理。以下是一个简单的Python代码示例: from osgeo import gdal # 打开原始tiff文件 dataset = gdal.Open('input.tif') # 定义裁剪区域 xmin, ymin, xmax, ymax = [0, 0, 500, 500] # 创建输出文件 out_dataset = gdal.Translate('output.tif', dataset, projWin=[xmin, ymin, xmax, ymax]) # 关闭数据集 dataset.Close() out_dataset = None 总之,使用GDAL裁剪tiff文件是一个非常常见和有用的操作,可以通过命令行工具或编程接口来实现。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值