Qt、GDAL遥感影像显示
概要
数据处理管理类,通过单例管理类,实现数据的处理。
整体架构流程
作为数据处理的基类,在此基础上分别派生出来栅格数据处理和矢量数据处理,然后功能开发者,如果处理的是栅格数据,那么只需要从类派生出自己的处理类,然后进行功能开发。同样矢量数据处理只需要从类派生出自己的处理类。
例如:
编写示例:波段运算支持四则运算(加减乘除)。
技术名词解释
- 类
class GISCORE GisProcessManager
: public GisObject
{
OGIS_DECLARE_MEMBERS(GisProcessManager);
OGIS_DECLARE_SINGLETON(GisProcessManager);
public:
~GisProcessManager();
OGis::ErrorStatus startProcess();
OGis::ErrorStatus setParameters(const GisProcess *pProcess);
private:
OGis::ErrorStatus processRaster(GisRasterProcess *pProcess) const;
OGis::ErrorStatus processVector(GisVectorProcess *pProcess) const;
};
- 类
class GISCORE GisProcess
: public GisObject
{
OGIS_DECLARE_MEMBERS(GisProcess);
public:
struct ProcessData
{
uint datasetIndex;
UIntArray itemArray;
bool bDisplay = false;
QString outputFileName = "";
};
virtual ~GisProcess();
virtual QString processName() const = 0;
virtual OGis::ErrorStatus beginProcess();
virtual OGis::ErrorStatus finishProcess();
virtual OGis::DatasetType processType() const = 0;
virtual OGis::ErrorStatus processData(ProcessData *pData) const = 0;
protected:
GisProcess();
};
- 类
class GISCORE GisRasterProcess
: public GisProcess
{
OGIS_DECLARE_MEMBERS(GisRasterProcess);
public:
struct RasterData
: public ProcessData
{
uint exportDataType = 0;
UInt2 blockSize = {0, 0};
double dataIgnoreValue = 0;
UInt3 resultSize = {0, 0, 0};
OGis::OutputFormat oFormat = OGis::kEnvi;
};
virtual ~GisRasterProcess();
virtual OGis::DatasetType processType() const;
virtual OGis::ErrorStatus process(MatArray &desMat, const MatArray &srcMat, const MatArray &maskArray = MatArray()) = 0;
protected:
GisRasterProcess();
};
- 类
class GISCORE GisVectorProcess
: public GisProcess
{
OGIS_DECLARE_MEMBERS(GisVectorProcess);
public:
struct VectorData
: public ProcessData
{
};
GisVectorProcess();
~GisVectorProcess();
virtual OGis::DatasetType processType() const;
};
技术细节
- 基类
- ProcessData结构体中包含需要处理的数据集索引,数据集对应的图层或者波段,输出的文件名称以及结果是否显示。
- virtual QString processName() const = 0; 主要是在进度条中显示处理的名称;
- OGis::DatasetType processType() const = 0; 数据处理对应的是什么类型(栅格还是矢量);
- *virtual OGis::ErrorStatus processData(ProcessData pData) const = 0; 传入处理的参数(开发人员自定义)
- 基类
- RasterData 结构体定义了输出数据的类型、分块处理的大小、无效值的定义、输出结果的大小(影像缩放处理)以及输出的影像格式;
- virtual OGis::ErrorStatus process(MatArray &desMat, const MatArray &srcMat, const MatArray &maskArray = MatArray()) = 0; 开发人员主要实现这个接口,在类中读取完数据之后,就会调用这个接口;
提供先进的推理,复杂的指令,更多的创造力。