利用gdal实现重采样与裁剪

最近来到新的环境里,分配的第一个任务是学习gdal,对不同地区、不同影响分辨率的tif图像重采样再剪切生成相同大小、分辨率的tif影像。我用的编译器是VS2010,环境配置请自行参考网上的教程,这里就不在讨论。

对于相同分辨率的遥感影像,很容易对相同像元进行处理,难得是对不同分辨率的影像处理。

强大的gdal当然封装了可用的方法来实现,聪明的你肯定想到了,RasterIO函数可以实现啊,RasterIO函数怎样使用,请转到李明录老师的博客,老师写的很详细。

下面贴上我自己写的函数,完全是源码,写的足够详细,也配有注释,不足是没有考虑效率问题,大家耐住性子看一看吧大笑

// GDAl_ResampleAndCut.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "gdal_priv.h"
#include "ogrsf_frmts.h"
#include "gdalwarper.h"
#include <iostream>
using namespace std;

int gdalResample(vector <char*> pszSrcFile,vector<char*> pszOutFile)
{
	GDALAllRegister();
	CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO"); 

	int iCount = pszSrcFile.size();

	pszSrcFile.resize(iCount);

	int i=0;
	int j=0;

	vector<GDALDataset* > pDSrc;
	pDSrc.resize(iCount);

	for (i=0;i<iCount;i++)
	{
		pDSrc[i] = (GDALDataset*)GDALOpen(pszSrcFile[i],GA_ReadOnly);
	}

	pszOutFile.resize(iCount);

	GDALDriver *poDriver=GetGDALDriverManager()->GetDriverByName("GTiff");

	if (poDriver==NULL)
	{
		for ( j =0;j< iCount ; j++ )
		{
			GDALClose((GDALDatasetH)pDSrc[j]);
		}
		return -2;
	}

	int *width=new int[iCount];
	int *heigh=new int[iCount];
	int *nBandCount = new int[iCount];
	GDALDataType *dataType = new GDALDataType[iCount];
	double (*dGeoTrans)[6]=new double[iCount][6]; 
	vector<char *> pszWKT;
	pszWKT.resize(iCount);


	for ( j = 0 ; j < iCount ; j++ )
	{
		dataType[j]=pDSrc[j]->GetRasterBand(1)->GetRasterDataType();

		width[j]=pDSrc[j]->GetRasterXSize();
		heigh[j]=pDSrc[j]->GetRasterYSize();
		nBandCount[j]=pDSrc[j]->GetRasterCount();

		pDSrc[j]->GetGeoTransform(dGeoTrans[j]);//获取放射变换系数

		pszWKT[j] = const_cast<char*>(pDSrc[j]->GetProjectionRef());

	}

	//重采样到栅格单元的最大分辨率
	//横向分辨率。。。
	double maxX = dGeoTrans[0][1];
	for (i = 0;i<iCount;i++)
	{
		if (maxX
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值