开发环境:win7,GDAL,VS2010,QT4.7
遥感图像的数据类型多种,如何使用模板函数进行方便处理呢?我的处理方式如下:
class c
{
public:
void computeScatter(int nBandx,int nBandy,int xScale,int yScale,
QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY);
private:
template <class T>
void computeScatterPriv(int nBandx,int nBandy,int xScale,int yScale,
QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY);
}
C::computeScatter(int nBandx,int nBandy,int xScale,int yScale,
QVector<QVector<int>> &vecScatter,double *pMinMaxX,double *pMinMaxY)
{
int nBandCount=getBandCount();
if(nBandCount<=0)
return ;
int dataType=getDataType(nBandx);
switch(dataType)
{
case GDT_Byte:
computeScatterPriv<unsigned char>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);
break;
case GDT_UInt16:
computeScatterPriv<unsigned short int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);
break;
case GDT_Int16:
computeScatterPriv<short int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);
break;
case GDT_UInt32:
computeScatterPriv<unsigned int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);
break;
case GDT_Int32:
computeScatterPriv<int>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);
break;
case GDT_Float32:
computeScatterPriv<float>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);
break;
case GDT_Float64:
computeScatterPriv<double>(nBandx,nBandy,xScale,yScale,vecScatter,pMinMaxX,pMinMaxY);
break;
}
}
template <class T>
void C::computeScatterPriv(int nBandx,int nBandy,int xScale,
int yScale, QVector<QVector<int>> &vecScatter,double *pMinMaxOutX,double *pMinMaxOutY)
{
T*=new T[20];
//......
//自己的处理
//....
}
在使用时使用调用computeScatter函数即可,可以对不同数据类型的遥感数据进行处理。
原文:http://blog.csdn.net/kupepoem/article/details/20155855