From 8d80a9ff6ef68533491a7a1707a3524fb98c5a3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=A2=9E=E8=BE=89?= <3045316072@qq.com> Date: Thu, 22 May 2025 11:01:52 +0800 Subject: [PATCH] =?UTF-8?q?GF3=E6=89=B9=E9=87=8F=E5=8C=96=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=B5=81=E7=A8=8B=E8=BD=AF=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseTool/BaseConstVariable.h | 28 ++++ BaseCommonLibrary/BaseTool/FileOperator.cpp | 61 ++++++++ BaseCommonLibrary/BaseTool/FileOperator.h | 6 + BaseCommonLibrary/BaseTool/LogInfoCls.h | 1 + BaseCommonLibrary/BaseTool/PrintMsgToQDebug.h | 3 + .../BaseTool/SARSimulationImageL1.cpp | 2 +- .../GF3CalibrationAndGeocodingClass.cpp | 144 +++++++++++++++++- .../GF3CalibrationAndGeocodingClass.h | 6 + .../GF3CalibrationAndOrthLib.cpp | 8 +- .../GF3CalibrationAndOrthLib.h | 7 +- .../GF3CalibrationGeoCodingFunCUDA.cu | 12 +- GF3CalibrationAndOrthLib/GF3Util.cpp | 83 ++++++++++ GF3CalibrationAndOrthLib/GF3Util.h | 36 ++++- .../GF3StripPatchProcess.vcxproj | 15 ++ .../QGF3StripBatchProcessDialog.cpp | 30 ++++ .../QGF3StripBatchProcessDialog.ui | 24 ++- GF3StripPatchProcess/main.cpp | 80 ++++++++++ 17 files changed, 526 insertions(+), 20 deletions(-) diff --git a/BaseCommonLibrary/BaseTool/BaseConstVariable.h b/BaseCommonLibrary/BaseTool/BaseConstVariable.h index a9d8a44..a67b9d5 100644 --- a/BaseCommonLibrary/BaseTool/BaseConstVariable.h +++ b/BaseCommonLibrary/BaseTool/BaseConstVariable.h @@ -112,6 +112,14 @@ enum POLARTYPEENUM { // 极化类型 }; +enum SIGMATYPE { + DBVALUE, + AMPVALUE, + INTENSITYVALUE, + LINEARVALUE +}; + + /*********************************************** 基础结构体区域 ********************************************************************/ /// @@ -357,4 +365,24 @@ inline void releaseVoidArray(void* a) }; + +inline double converSigma2amp(double inSig, SIGMATYPE sigtype) { + switch (sigtype) + { + case DBVALUE: + return pow(10, inSig / 20); + break; + case AMPVALUE: + return inSig; + break; + case INTENSITYVALUE: + return pow(10, inSig / 10); + break; + default: + return inSig; + break; + } +} + + #endif \ No newline at end of file diff --git a/BaseCommonLibrary/BaseTool/FileOperator.cpp b/BaseCommonLibrary/BaseTool/FileOperator.cpp index 6d6ba6c..c075ce3 100644 --- a/BaseCommonLibrary/BaseTool/FileOperator.cpp +++ b/BaseCommonLibrary/BaseTool/FileOperator.cpp @@ -12,6 +12,9 @@ #include #include #include +#include +#include +#include @@ -259,3 +262,61 @@ bool copyAndReplaceFile(const QString& sourceFilePath, const QString& destina qDebug() << "File copied successfully from" << sourceFilePath << "to" << destinationFilePath; return true; } + + +bool BASECONSTVARIABLEAPI unTarfile(QString inTargzPath, QString outGzFolderPath) +{ + // tar -zxvf 压缩包路径 文件或目录路径 + QProcess process; + // 同步执行(阻塞当前线程) + QString cmdstr = QString("tar -zxvf %1 %2").arg(inTargzPath).arg(outGzFolderPath); + process.start("cmd.exe", QStringList() << "/c" << cmdstr); // "/c" 表示执行后关闭 CMD + process.waitForFinished(); // 等待执行完成 + // 获取输出 + QString output = QString::fromLocal8Bit(process.readAllStandardOutput()); + QString error = QString::fromLocal8Bit(process.readAllStandardError()); + qDebug() << "Output:" << output; + qDebug() << "Error:" << error; + return true; +} + +bool BASECONSTVARIABLEAPI createNewFolerPath(QString inpath, bool isremoveExist) +{ + QDir outDir(inpath); + if (outDir.exists()) { + if (isremoveExist) { + outDir.removeRecursively(); + } + else { + return true; + } + } + QDir().mkpath(inpath); + return true; +} + +QFileInfoList findFilePath(const QString& strFilePath, const QString& strNameFilters) +{ + QFileInfoList fileList; + if (strFilePath.isEmpty() || strNameFilters.isEmpty()) + { + return fileList; + } + + QDir dir; + QStringList filters; + filters << strNameFilters; + dir.setPath(strFilePath); + dir.setNameFilters(filters); + QDirIterator iter(dir, QDirIterator::Subdirectories); + while (iter.hasNext()) + { + iter.next(); + QFileInfo info = iter.fileInfo(); + if (info.isFile()) + { + fileList.append(info); + } + } + return fileList; +}//blog.csdn.net/sinat_33419023/article/details/106105037 \ No newline at end of file diff --git a/BaseCommonLibrary/BaseTool/FileOperator.h b/BaseCommonLibrary/BaseTool/FileOperator.h index b016ede..8d197b6 100644 --- a/BaseCommonLibrary/BaseTool/FileOperator.h +++ b/BaseCommonLibrary/BaseTool/FileOperator.h @@ -16,6 +16,7 @@ #include #include #include +#include bool BASECONSTVARIABLEAPI isDirectory(const QString& path); @@ -54,5 +55,10 @@ QString BASECONSTVARIABLEAPI addMaskToFileName(const QString& filePath, QStrin bool BASECONSTVARIABLEAPI copyAndReplaceFile(const QString& sourceFilePath, const QString& destinationFilePath); +// 压缩包文件解压 +bool BASECONSTVARIABLEAPI unTarfile(QString inTargzPath,QString outGzFolderPath); +bool BASECONSTVARIABLEAPI createNewFolerPath(QString inpath, bool isremoveExist = false); + +QFileInfoList BASECONSTVARIABLEAPI findFilePath(const QString& dirPath, const QString& pattern); #endif \ No newline at end of file diff --git a/BaseCommonLibrary/BaseTool/LogInfoCls.h b/BaseCommonLibrary/BaseTool/LogInfoCls.h index 80f074d..a906cfb 100644 --- a/BaseCommonLibrary/BaseTool/LogInfoCls.h +++ b/BaseCommonLibrary/BaseTool/LogInfoCls.h @@ -89,6 +89,7 @@ enum ErrorCode { IMAGE_L1DATA_XMLNAMEOPENERROR = 402, IMAGE_L1DATA_XMLNAMEPARASEERROR = 403, + METAXMLFOUNDERROR }; diff --git a/BaseCommonLibrary/BaseTool/PrintMsgToQDebug.h b/BaseCommonLibrary/BaseTool/PrintMsgToQDebug.h index 00b5610..3a4fd9b 100644 --- a/BaseCommonLibrary/BaseTool/PrintMsgToQDebug.h +++ b/BaseCommonLibrary/BaseTool/PrintMsgToQDebug.h @@ -7,6 +7,9 @@ extern "C" BASECONSTVARIABLEAPI void PrintMsgToQDebug(char* msg); extern "C" BASECONSTVARIABLEAPI void PrintfToQDebug(const char* msg); extern "C" BASECONSTVARIABLEAPI void PrintTipMsgToQDebug(const char* tip, const char* msg); extern "C" BASECONSTVARIABLEAPI void printfinfo(const char* format, ...); + + + #endif // !PRINTMSGTOQDEBUG_H_ diff --git a/BaseCommonLibrary/BaseTool/SARSimulationImageL1.cpp b/BaseCommonLibrary/BaseTool/SARSimulationImageL1.cpp index 2fbfbb8..d14f97f 100644 --- a/BaseCommonLibrary/BaseTool/SARSimulationImageL1.cpp +++ b/BaseCommonLibrary/BaseTool/SARSimulationImageL1.cpp @@ -631,7 +631,6 @@ ErrorCode SARSimulationImageL1Dataset::saveImageRaster(std::shared_ptr rasterDataset = OpenDataset(this->ImageRasterPath, GDALAccess::GA_Update); - GDALDataType gdal_datatype = rasterDataset->GetRasterBand(1)->GetRasterDataType(); GDALRasterBand* poBand = rasterDataset->GetRasterBand(1); if (NULL == poBand || nullptr == poBand) { @@ -642,6 +641,7 @@ ErrorCode SARSimulationImageL1Dataset::saveImageRaster(std::shared_ptrGetRasterXSize(); long height = rasterDataset->GetRasterYSize(); long band_num = rasterDataset->GetRasterCount(); diff --git a/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.cpp b/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.cpp index ff95b19..bdbf7ea 100644 --- a/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.cpp +++ b/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.cpp @@ -7,6 +7,12 @@ #include #include #include +#include "BaseTool.h" +#include "GeoOperator.h" +#include "ImageOperatorBase.h" +#include "FileOperator.h" +#include "GF3Util.h" +#include "GF3CalibrationAndOrthLib.h" ErrorCode GF3CalibrationRaster(QString inRasterPath, QString outRasterPath, double Qualifyvalue, double calibrationConst) { @@ -398,7 +404,7 @@ ErrorCode GF3RDCreateLookTable(QString inxmlPath, QString indemPath, QString out } } } - + // omp_set_lock(&lock); rasterRC.saveImage(sar_r, startRId, 0, 1); @@ -406,7 +412,6 @@ ErrorCode GF3RDCreateLookTable(QString inxmlPath, QString indemPath, QString out omp_unset_lock(&lock); - Eigen::MatrixXd Angle_Arr = Eigen::MatrixXd::Zero(dem_x.rows(),dem_x.cols()).array()+181; if (localincAngleFlag) { Eigen::MatrixXd demslope_x = demslope.getData(startRId, 0, blockline, colcount, 1); @@ -445,7 +450,7 @@ ErrorCode GF3RDCreateLookTable(QString inxmlPath, QString indemPath, QString out R = std::sqrt(Rst_x*Rst_x+Rst_y*Rst_y+Rst_z*Rst_z); slopeR = std::sqrt(slopex*slopex + slopey * slopey + slopez * slopez); localangle = ((slopex * Rst_x) + (slopey * Rst_y) + (slopez * Rst_z)); - localangle = std::acos(localangle / R/slopeR)*r2d; + localangle = std::acos(localangle / R/slopeR)*r2d; // Ƕ Angle_Arr(i, j) = localangle; } } @@ -457,9 +462,7 @@ ErrorCode GF3RDCreateLookTable(QString inxmlPath, QString indemPath, QString out localincangleRaster.saveImage(Angle_Arr, startRId, 0, 1); } else {} - omp_unset_lock(&lock); - } @@ -610,3 +613,134 @@ ErrorCode GF3RDProcess(QString inxmlPath, QString indemPath, QString outworkdir, } return ErrorCode::SUCCESS; } + +ErrorCode GF3MainOrthProcess(QString inDEMPath, QString inTarFilepath, QString outworkspacefolderpath, double pixelresultionDegreee, bool excutehh2vv) +{ + qDebug() << u8"ʼУ"; + // ȡ + QString tarfilename = getFileNameWidthoutExtend(inTarFilepath); + + + + // step 1. ռ + + GF3TargzFilenameClass tarnameclss=getFilename(tarfilename); + QString productionname = tarnameclss.getProductName(); + QString workfolderpath = JoinPath(outworkspacefolderpath, productionname); // ռ + createNewFolerPath(workfolderpath, true); + qDebug() << u8"step 1. ռ ok"; + // step 2.ѹļ + QString unarchiverFolderPath = JoinPath(workfolderpath, u8"unarchiver"); + createNewFolerPath(unarchiverFolderPath, true); + unTarfile(inTarFilepath, unarchiverFolderPath); + qDebug() << u8"step 2.ѹļ ok"; + // ڽѹļԼļвmeta.xmlļ + QFileInfoList metalist = findFilePath(unarchiverFolderPath, u8"*.meta.xml"); + if (metalist.count() !=1) { + qWarning() << u8"Ŀļз˶meta.xml,Ϲ"; + QMessageBox::warning(nullptr, u8"", QString(u8"%1:%2").arg(tarfilename).arg(u8"Ŀļз˶meta.xml,Ϲ")); + return ErrorCode::METAXMLFOUNDERROR; + } + else {} + QString metaxmlpath = metalist[0].canonicalFilePath(); + + // step 3.ļתΪͨL1Aļ + QString L1AFolder = JoinPath(workfolderpath, u8"L1AFolder"); + createNewFolerPath(L1AFolder); + ImportGF3L1AProcess(metaxmlpath, L1AFolder); + qDebug() << u8"step 3.ļתΪͨL1Aļ ok"; + + // step 4. תamp + QFileInfoList xmlfilelist = findFilePath(L1AFolder, u8"*.xml"); + if (xmlfilelist.count() == 0) { + qWarning() << u8"ĿļûзL1A xml,Ϲ"; + QMessageBox::warning(nullptr, u8"", QString(u8"%1:%2").arg(tarfilename).arg(u8"ĿļûзL1A xml,Ϲ")); + return ErrorCode::METAXMLFOUNDERROR; + } + + QString outampfolder = JoinPath(workfolderpath, u8"ampRaster"); + createNewFolerPath(outampfolder); + for (long i = 0; i < xmlfilelist.count(); i++) { + + QString filename = getFileNameWidthoutExtend(xmlfilelist[i].canonicalFilePath()); + QString l2bfilename = filename + "_amp"; + QString folderpath = getParantFromPath(xmlfilelist[i].canonicalFilePath()); + SARSimulationImageL1Dataset slcl1(RasterLevel::RasterSLC); + slcl1.Open(folderpath, filename); + + + SARSimulationImageL1Dataset l1B(RasterLevel::RasterL1B); + l1B.OpenOrNew(workfolderpath, l2bfilename, slcl1.getrowCount(), slcl1.getcolCount()); + QString srcxmlpath = slcl1.getxmlFilePath(); + QString tarxmlpath = l1B.getxmlFilePath(); + copyAndReplaceFile(srcxmlpath, tarxmlpath); + l1B.loadFromXml(); + QString imgfilepath = slcl1.getImageRasterPath(); + Complex2AmpRaster(imgfilepath, l1B.getImageRasterPath()); // ת + } + + // step 5. ұ + QString L1AXmlPath = xmlfilelist[0].canonicalFilePath(); + QString looktablefolderpath = JoinPath(workfolderpath, u8"looktableRaster"); + if (GF3RDProcess(L1AXmlPath, inDEMPath, looktablefolderpath, pixelresultionDegreee, pixelresultionDegreee) == SUCCESS) { + qDebug()<<(u8"ɳɹ"); + } + else { + qDebug() << (u8"ʧ"); + } + + qDebug() << u8"step 4. ұ ok"; + // step 6. Ӱ + QFileInfoList looktableRasterPathList = findFilePath(looktablefolderpath, u8"_looktable.tif"); + if (looktableRasterPathList.count() != 1) { + qWarning() << u8"Ŀļз˶ұ,Ϲ"; + QMessageBox::warning(nullptr, u8"", QString(u8"%1:%2").arg(tarfilename).arg(u8"Ŀļз˶ұ,Ϲ")); + return ErrorCode::METAXMLFOUNDERROR; + } + + // step 6.1 Ӱ + QFileInfoList looktableAngleRasterPathList = findFilePath(looktablefolderpath, u8"_localAngle.tif"); + if (looktableAngleRasterPathList.count() != 1) { + qWarning() << u8"ĿļӦֻ1,Ϲ"; + QMessageBox::warning(nullptr, u8"", QString(u8"%1:%2").arg(tarfilename).arg(u8"Ŀļз1,Ϲ")); + return ErrorCode::METAXMLFOUNDERROR; + } + QString lookincidenceAnglePath = looktableAngleRasterPathList[0].canonicalFilePath(); + + + + QString looktableRasterPath = looktableRasterPathList[0].canonicalFilePath(); + QString outworkpath = JoinPath(workfolderpath, u8"orth"); + + QFileInfoList l2filelist = findFilePath(outampfolder,u8"*.xml"); + for (long i = 0; i < l2filelist.count(); i++) { + QString inl2filepath = l2filelist[i].canonicalFilePath(); + SARSimulationImageL1Dataset l1B(RasterLevel::RasterL1B); + l1B.Open(inl2filepath); + QString inRaster = l1B.getImageRasterPath(); + QString inRasterfolderpath = l1B.getoutFolderPath(); + QString inRastername = l1B.getImageRasterName(); + POLARTYPEENUM poltype = getDatasetGF3FilePolsarType(inRastername); + QString intempHH2VV = inRaster; + + + if (poltype == POLARHH && excutehh2vv) { + intempHH2VV = JoinPath(inRasterfolderpath, getFileNameWidthoutExtend(inRaster) + "_HH2VV.tif"); + GF3_Sigma0_HH2VV(inRaster, looktableRasterPath,intempHH2VV); + } + + + QString outname = getFileNameWidthoutExtend(intempHH2VV) + "_orth.tif"; + QString outstringpath = JoinPath(outworkpath, outname); + if (GF3OrthSLC(intempHH2VV, looktableRasterPath, outstringpath) == SUCCESS) { + qDebug() << (u8"ɳɹ"); + } + else { + qDebug() << (u8"ʧ"); + } + + } + + + return ErrorCode::SUCCESS; +} diff --git a/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.h b/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.h index 4bdc907..ea495b5 100644 --- a/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.h +++ b/GF3CalibrationAndOrthLib/GF3CalibrationAndGeocodingClass.h @@ -31,4 +31,10 @@ ErrorCode GF3CALIBRATIONANDORTHLIB_EXPORT GF3OrthSLC( QString inRasterPath, QSt // 䴦 ErrorCode GF3CALIBRATIONANDORTHLIB_EXPORT GF3RDProcess(QString inxmlPath, QString indemPath, QString outworkdir, double gridx, double gridy); + +// +У +ErrorCode GF3CALIBRATIONANDORTHLIB_EXPORT GF3MainOrthProcess(QString inDEMPath, QString inTarFilepath, QString outworkspacefolderpath, double pixelresultionDegreee, bool excutehh2vv = false); + + + #endif \ No newline at end of file diff --git a/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.cpp b/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.cpp index fb9d2d8..5bab439 100644 --- a/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.cpp +++ b/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.cpp @@ -19,7 +19,7 @@ /// /// /// -int GF3_Sigma0_HH2VV(QString in_SigmaHHRasterPath, QString in_IncidencAngleRasterPath, QString out_SigmaVVRasterPath) +int GF3_Sigma0_HH2VV(QString in_SigmaHHRasterPath, QString in_IncidencAngleRasterPath, QString out_SigmaVVRasterPath, SIGMATYPE sigmatype) { // step 1 Ϸ { @@ -77,8 +77,10 @@ int GF3_Sigma0_HH2VV(QString in_SigmaHHRasterPath, QString in_IncidencAngleRast for (int64_t i = 0; i < pixel_count64; i++) { double sigmaHH = sigmaHHRasterData.get()[i]; - double incidenceAngle = incidenceAngleData.get()[i]; - double sigmaVV = sigmaHH * polartionConver_d(sigmaHH, incidenceAngle, 1.0, false); + sigmaHH = converSigma2amp(sigmaHH,sigmatype); + double incidenceAngle = incidenceAngleData.get()[i];// Ƕ + sigmaHH = 20 * log10(sigmaHH); + double sigmaVV = polartionConver_d(sigmaHH, incidenceAngle, 1.0, false); // dBֵ outSigmaVVRasterData.get()[i] = sigmaVV; } diff --git a/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.h b/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.h index cf3e4be..6743b90 100644 --- a/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.h +++ b/GF3CalibrationAndOrthLib/GF3CalibrationAndOrthLib.h @@ -12,7 +12,7 @@ #define __GF3CALIBRATIONANDORTHLIB__H__ #include "gf3calibrationandorthlib_global.h" #include - +#include "BaseConstVariable.h" /// @@ -23,10 +23,7 @@ /// /// /// -int GF3CALIBRATIONANDORTHLIB_EXPORT GF3_Sigma0_HH2VV(QString in_SigmaHHRasterPath,QString in_IncidencAngleRasterPath,QString out_SigmaVVRasterPath); - - - +int GF3CALIBRATIONANDORTHLIB_EXPORT GF3_Sigma0_HH2VV(QString in_SigmaHHRasterPath, QString in_IncidencAngleRasterPath, QString out_SigmaVVRasterPath, SIGMATYPE sigmatype= SIGMATYPE::AMPVALUE); diff --git a/GF3CalibrationAndOrthLib/GF3CalibrationGeoCodingFunCUDA.cu b/GF3CalibrationAndOrthLib/GF3CalibrationGeoCodingFunCUDA.cu index 62578b9..a40f82d 100644 --- a/GF3CalibrationAndOrthLib/GF3CalibrationGeoCodingFunCUDA.cu +++ b/GF3CalibrationAndOrthLib/GF3CalibrationGeoCodingFunCUDA.cu @@ -68,6 +68,14 @@ __host__ __device__ float polartionConver_f(float insig, float inangle, float al } } +void GPUComputePolarizationConver_f(float* insig, float* inangle, float* alpha, bool isvv, int count, float* outsig) +{ +} + +void GPUComputePolarizationConver_d(double* insig, double* inangle, double* alpha, bool isvv, int count, double* outsig) +{ +} + __host__ __device__ double polartionConver_d(double insig, double inangle, double alpha , bool isvv ) { @@ -78,8 +86,8 @@ __host__ __device__ double polartionConver_d(double insig, double inangle, doubl double osig = 0.0; if (isvv) { // C: VV->HH osig = insig_linear * rpol; - // ֵ - return osig; + // dBֵ + return 10.0 * log10(osig); } else { // L: HH->VV osig = insig_linear / rpol; // dBֵ diff --git a/GF3CalibrationAndOrthLib/GF3Util.cpp b/GF3CalibrationAndOrthLib/GF3Util.cpp index 2ef785f..e95d30d 100644 --- a/GF3CalibrationAndOrthLib/GF3Util.cpp +++ b/GF3CalibrationAndOrthLib/GF3Util.cpp @@ -1 +1,84 @@ #include "GF3Util.h" +#include +#include + +GF3TargzFilenameClass getFilename(QString filename) +{ + return GF3TargzFilenameClass(filename); + +} + +GF3TargzFilenameClass::GF3TargzFilenameClass(QString filename) +{ + // GF3_KAS_FSI_020253_E110.8_N25.5_20200614_L1A_HHHV_L10004871459.tar.gz + QStringList filelist = filename.split("_"); + + this->sateName = filelist[0]; + this->RevStateName = filelist[1]; + this->ImageMode = filelist[2]; + this->OribtName = filelist[3]; + this->CenterLon = filelist[4].left(1).toDouble(); + this->CenterLat = filelist[5].left(1).toDouble(); + this->DateName = filelist[6]; + this->levelName = filelist[7]; + this->PolarName = filelist[8]; + this->ProductName = filelist[9]; + if (this->ProductName.contains(".")) { + this->ProductName = this->ProductName.split(".")[0]; + }else{} +} + +GF3TargzFilenameClass::~GF3TargzFilenameClass() +{ + +} + +QString GF3TargzFilenameClass::getSateName() const +{ + return sateName; +} + +QString GF3TargzFilenameClass::getRevStateName() const +{ + return RevStateName; +} + +QString GF3TargzFilenameClass::getImageMode() const +{ + return ImageMode; +} + +QString GF3TargzFilenameClass::getOribtName() const +{ + return OribtName; +} + +double GF3TargzFilenameClass::getCenterLon() const +{ + return CenterLon; +} + +double GF3TargzFilenameClass::getCenterLat() const +{ + return CenterLat; +} + +QString GF3TargzFilenameClass::getDateName() const +{ + return DateName; +} + +QString GF3TargzFilenameClass::getLevelName() const +{ + return levelName; +} + +QString GF3TargzFilenameClass::getPolarName() const +{ + return PolarName; +} + +QString GF3TargzFilenameClass::getProductName() const +{ + return ProductName; +} diff --git a/GF3CalibrationAndOrthLib/GF3Util.h b/GF3CalibrationAndOrthLib/GF3Util.h index dbe3ae3..5d0aef1 100644 --- a/GF3CalibrationAndOrthLib/GF3Util.h +++ b/GF3CalibrationAndOrthLib/GF3Util.h @@ -2,10 +2,44 @@ #ifndef __GF3UTIL_H__ #define __GF3UTIL_H__ #include "gf3calibrationandorthlib_global.h" +#include + +class GF3CALIBRATIONANDORTHLIB_EXPORT GF3TargzFilenameClass { + // GF3_KAS_FSI_020253_E110.8_N25.5_20200614_L1A_HHHV_L10004871459.tar.gz + +public: + GF3TargzFilenameClass(QString filename); + ~GF3TargzFilenameClass(); + +private: + QString sateName; + QString RevStateName; + QString ImageMode; + QString OribtName; + double CenterLon; + double CenterLat; + QString DateName; + QString levelName; + QString PolarName; + QString ProductName; + +public: + QString getSateName() const; //{ return sateName; } + QString getRevStateName() const;// { return RevStateName; } + QString getImageMode() const; //{ return ImageMode; } + QString getOribtName() const; //{ return OribtName; } + double getCenterLon() const; //{ return CenterLon; } + double getCenterLat() const; //{ return CenterLat; } + QString getDateName() const; //{ return DateName; } + QString getLevelName() const; //{ return levelName; } + QString getPolarName() const;// { return PolarName; } + QString getProductName() const; //{ return ProductName; } + +}; - +GF3TargzFilenameClass GF3CALIBRATIONANDORTHLIB_EXPORT getFilename(QString filename); diff --git a/GF3StripPatchProcess/GF3StripPatchProcess.vcxproj b/GF3StripPatchProcess/GF3StripPatchProcess.vcxproj index 32b3550..298380e 100644 --- a/GF3StripPatchProcess/GF3StripPatchProcess.vcxproj +++ b/GF3StripPatchProcess/GF3StripPatchProcess.vcxproj @@ -66,11 +66,15 @@ true true true + ..\GF3CalibrationAndOrthLib;..\GPUBaseLib;..\BaseCommonLibrary\ToolAbstract;..\BaseCommonLibrary\BaseTool;..\BaseCommonLibrary;.;$(IncludePath) %(AdditionalDependencies) + + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + @@ -110,6 +114,17 @@ + + + {872ecd6f-30e3-4a1b-b17c-15e87d373ff6} + + + {886f7829-af74-4f23-b3be-29b7b3c9843c} + + + {b8b40c54-f7fe-4809-b6fb-8bc014570d7b} + + diff --git a/GF3StripPatchProcess/QGF3StripBatchProcessDialog.cpp b/GF3StripPatchProcess/QGF3StripBatchProcessDialog.cpp index 8ab374b..085f58d 100644 --- a/GF3StripPatchProcess/QGF3StripBatchProcessDialog.cpp +++ b/GF3StripPatchProcess/QGF3StripBatchProcessDialog.cpp @@ -1,7 +1,12 @@ #include "QGF3StripBatchProcessDialog.h" #include "ui_QGF3StripBatchProcessDialog.h" #include +#include #include +#include "FileOperator.h" +#include "GeoOperator.h" +#include "BaseTool.h" +#include "GF3CalibrationAndGeocodingClass.h" QGF3StripBatchProcessDialog::QGF3StripBatchProcessDialog(QWidget *parent) : QDialog(parent), ui(new Ui::QGF3StripBatchProcessDialogClass) @@ -24,7 +29,32 @@ QGF3StripBatchProcessDialog::~QGF3StripBatchProcessDialog() void QGF3StripBatchProcessDialog::onaccept() { + QString demPath = ""; + // ȡĬDEM + if (ui->checkBoxDEM->isChecked()) { + QString demdirPath = QApplication::applicationDirPath();// DEMļ + demPath = JoinPath(demdirPath,"SRTM_90m_DEM_V4.tif"); + } + else { + demPath = ui->lineEdit_DEM->text(); + } + // ȡֱ + double resolutionMeter = ui->doubleSpinBox->value();// ֱת + double resoiutionDegree = getPixelSpacingInDegree(resolutionMeter);// -> + QString workspacedirpath = ui->lineEditWorkDir->text(); + this->ui->progressBar->setValue(0); + this->ui->progressBar->setMaximum(ui->listWidgetMetaxml->count()); + for (long i = 0; i < ui->listWidgetMetaxml->count(); i++) { + QString inTargzFilePath = ui->listWidgetMetaxml->item(i)->text(); + + GF3MainOrthProcess(demPath, + inTargzFilePath, + workspacedirpath, + resoiutionDegree, + true); + this->ui->progressBar->setValue(i); + } } void QGF3StripBatchProcessDialog::onreject() diff --git a/GF3StripPatchProcess/QGF3StripBatchProcessDialog.ui b/GF3StripPatchProcess/QGF3StripBatchProcessDialog.ui index 229548d..4553611 100644 --- a/GF3StripPatchProcess/QGF3StripBatchProcessDialog.ui +++ b/GF3StripPatchProcess/QGF3StripBatchProcessDialog.ui @@ -224,12 +224,30 @@ - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + TextLabel + + + + + + 24 + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + diff --git a/GF3StripPatchProcess/main.cpp b/GF3StripPatchProcess/main.cpp index dbc1845..229703d 100644 --- a/GF3StripPatchProcess/main.cpp +++ b/GF3StripPatchProcess/main.cpp @@ -9,11 +9,91 @@ #include #include "QGF3StripBatchProcessDialog.h" #include +#include +#include +#include +#pragma execution_character_set("utf-8") + +// ԶϢ +void customMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) +{ + QByteArray localMsg = msg.toLocal8Bit(); + const char* file = context.file ? context.file : ""; + const char* function = context.function ? context.function : ""; + QString dateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz"); + + QFile outFile("application.log"); + outFile.open(QIODevice::WriteOnly | QIODevice::Append); + QTextStream ts(&outFile); + + + switch (type) { + case QtDebugMsg: + { + QString logMessage = QString("%1 Debug: %2 (%3:%4, %5)") + .arg(dateTime) // Assuming dateTime is a QDateTime object and needs to be converted to string + .arg(QString::fromLocal8Bit(localMsg.constData())) + .arg(file) + .arg(context.line) + .arg(function); + ts << logMessage << "\n"; + break; + } + case QtInfoMsg: + { + QString logMessage = QString("%1 Info: %2 (%3:%4, %5)") + .arg(dateTime) + .arg(QString::fromLocal8Bit(localMsg.constData())) + .arg(file) + .arg(context.line) + .arg(function); + ts << logMessage << "\n"; + break; + } + case QtWarningMsg: + { + QString logMessage = QString("%1 Warning: %2 (%3:%4, %5)") + .arg(dateTime) + .arg(QString::fromLocal8Bit(localMsg.constData())) + .arg(file) + .arg(context.line) + .arg(function); + ts << logMessage << "\n"; + break; + } + case QtCriticalMsg: + { + QString logMessage = QString("%1 Critical: %2 (%3:%4, %5)") + .arg(dateTime) + .arg(QString::fromLocal8Bit(localMsg.constData())) + .arg(file) + .arg(context.line) + .arg(function); + ts << logMessage << "\n"; + break; + } + case QtFatalMsg: + { + QString logMessage = QString("%1 Fatal: %2 (%3:%4, %5)") + .arg(dateTime) + .arg(QString::fromLocal8Bit(localMsg.constData())) + .arg(file) + .arg(context.line) + .arg(function); + ts << logMessage << "\n"; + abort(); + } + + } + +} int main(int argc, char *argv[]) { + qInstallMessageHandler(customMessageHandler); + QApplication a(argc, argv); showQGF3StripBatchProcessDialog(nullptr); return a.exec();