/* Copyright(c)--Navinfo--Author:fangzurui--date:2023-10-12 */ #ifndef DATAMANAGER_IMAGEFILEMANAGER_H_ #define DATAMANAGER_IMAGEFILEMANAGER_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Algorithm/typedef.h" #include "Algorithm/ImageProjectInterface.hpp" #include "EarthViewer/OSGRender.h" #include "DataManager/RenderTool/ImageLayer.h" #include "DataManager/DataBase/ImageInfoDb.h" #include "ui_AdjustParam.h" #include "ui_ImageFileImport.h" extern Q_CORE_EXPORT int qt_ntfs_permission_lookup; QT_BEGIN_NAMESPACE namespace Ui { class ImageFileImport; class AdjustParam;} QT_END_NAMESPACE class ImportData { public: // 输入参数值 QString originImagePath = ""; // 红外/可见光影像路径 QString type = ""; // 图像类型 QString lon = ""; // 吊舱经度 QString lat = ""; // 吊舱纬度 QString alt = ""; // 吊舱高程 QString craftHeading = ""; // 吊舱航向角 QString craftPitching = ""; // 吊舱俯仰角 QString craftRolling = ""; // 吊舱翻滚角 QString pitching = ""; // 相机俯仰角 QString heading = ""; // 相机航向角 QString cameraFocus = ""; // 相机焦距 QString range = ""; // 相机视角 QString centerLon = ""; // 图像中心点经度 QString centerLat = ""; // 图像中心点纬度 QString centerAlt = ""; // 图像中心点高程 QString distance = ""; // 图像中心点到相机的距离 // 误差值 QString headingError = "0.00"; // 吊舱航向角误差 QString pitchingError = "0.00"; // 吊舱俯仰角误差 QString rollingError = "0.00"; // 吊舱翻滚角误差 QString transparency = "100"; // 图像透明度 }; class Algorithm { public: Algorithm(); ~Algorithm(); public: // 将参数信息转为算法适用的结构体 void loadParameters(ImportData importData, IMAGEPROJECT_PARAMETER &stImageProjParameter); //在tif文件中加入地理坐标 void addGeoInformationToTiff(const QString &tiffFilePath, REGION_INFOR stRegion); // 调用空间变换算法 WF_ERROR_CODE SpatialVariation(ImportData importData); // 调用特征匹配算法 bool FeatureMatching(ImportData importData); // 从DEM数据中获取高程值 static double getElevationFromTiff(double longitude, double latitude); static double getElevationFromTiff(const std::string &tiffPath, double latitude, double longitude); // 获取tif文件中心点坐标 static int calImageCenterCoord(QString strImagePath, MapPoint& mapPoint); }; class AdjustParam : public QDialog { Q_OBJECT public: explicit AdjustParam(QWidget* parent = nullptr); ~AdjustParam(); // 从参数输入窗口传入参数 void setParameter(ImportData importData); // 初始化微调参数窗口 void initAdjustParamWidget(); private: // 检查传入参数是否符合要求 bool isCorrectParam(); public slots: // 调整ui中的值 void changeHeading1Value(int value); void changeHeading2Value(int value); void changePitching1Value(int value); void changePitching2Value(int value); void changeRolling1Value(int value); void changeRolling2Value(int value); void changeRange1Value(int value); void changeRange2Value(int value); // 执行匹配 void startMatch(); // 开始匹配 bool matchingInterface(); private: Ui::AdjustParam* ui; // 微调窗口ui ImportData _importData; // 参数对象 private: int heading1 = 0; // 记录各项参数小数点后两位的临时值 int heading2 = 0; int pitching1 = 0; int pitching2 = 0; int rolling1 = 0; int rolling2 = 0; int range1 = 0; int range2 = 0; }; class ImageFileImport : public QDialog { Q_OBJECT public: explicit ImageFileImport(QWidget* parent = nullptr); ~ImageFileImport(); // 初始化影像导入窗口 void initImportImageFileWidget(); private: // 检查传入参数是否符合要求 int isCorrectParam(); public slots: // 获取样例文件路径 void getOriginImageFilePath(); // 清空输入的参数 void clearParameter(); // 执行算法 void startSmartMode(); void startManualMode(); // 空间变化算法流程 void spatialTranFlow(ImportData importData); // 特征匹配算法参数准备 bool matchingInterface(ImportData importData); // 空间变换算法参数准备 bool spatialTrans(ImportData importData); private: QButtonGroup* type; // 图像类型按钮组 Ui::ImageFileImport* ui; // 图像导入窗口ui AdjustParam* _adjustWidget = nullptr; // 微调窗口对象 QString lastFilePath; // 上一次打开的路径 }; class WaitingWidget : public QDialog { Q_OBJECT public: explicit WaitingWidget(QWidget* parent = nullptr); ~WaitingWidget(); }; #endif // DATAMANAGER_TIFFILEMANAGER_H_