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; 开发人员主要实现这个接口,在类中读取完数据之后,就会调用这个接口;

提供先进的推理,复杂的指令,更多的创造力。

01-08 08:35