增加了重采样的工具,并入库
parent
87b45a6089
commit
b8cf53cf20
|
@ -187,6 +187,7 @@
|
||||||
<ClInclude Include="BaseTool\LogInfoCls.h" />
|
<ClInclude Include="BaseTool\LogInfoCls.h" />
|
||||||
<QtMoc Include="ToolAbstract\QToolAbstract.h" />
|
<QtMoc Include="ToolAbstract\QToolAbstract.h" />
|
||||||
<QtMoc Include="BaseTool\QToolProcessBarDialog.h" />
|
<QtMoc Include="BaseTool\QToolProcessBarDialog.h" />
|
||||||
|
<ClInclude Include="BaseTool\PrintMsgToQDebug.h" />
|
||||||
<ClInclude Include="BaseTool\RasterToolBase.h" />
|
<ClInclude Include="BaseTool\RasterToolBase.h" />
|
||||||
<ClInclude Include="BaseTool\SARSimulationImageL1.h" />
|
<ClInclude Include="BaseTool\SARSimulationImageL1.h" />
|
||||||
<ClInclude Include="BaseTool\stdafx.h" />
|
<ClInclude Include="BaseTool\stdafx.h" />
|
||||||
|
@ -200,6 +201,7 @@
|
||||||
<ClCompile Include="BaseTool\GeoOperator.cpp" />
|
<ClCompile Include="BaseTool\GeoOperator.cpp" />
|
||||||
<ClCompile Include="BaseTool\ImageOperatorBase.cpp" />
|
<ClCompile Include="BaseTool\ImageOperatorBase.cpp" />
|
||||||
<ClCompile Include="BaseTool\LogInfoCls.cpp" />
|
<ClCompile Include="BaseTool\LogInfoCls.cpp" />
|
||||||
|
<ClCompile Include="BaseTool\PrintMsgToQDebug.cpp" />
|
||||||
<ClCompile Include="BaseTool\QToolProcessBarDialog.cpp" />
|
<ClCompile Include="BaseTool\QToolProcessBarDialog.cpp" />
|
||||||
<ClCompile Include="BaseTool\RasterToolBase.cpp" />
|
<ClCompile Include="BaseTool\RasterToolBase.cpp" />
|
||||||
<ClCompile Include="BaseTool\SARSimulationImageL1.cpp" />
|
<ClCompile Include="BaseTool\SARSimulationImageL1.cpp" />
|
||||||
|
|
|
@ -57,6 +57,9 @@
|
||||||
<ClInclude Include="BaseTool\stdafx.h">
|
<ClInclude Include="BaseTool\stdafx.h">
|
||||||
<Filter>BaseTool</Filter>
|
<Filter>BaseTool</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="BaseTool\PrintMsgToQDebug.h">
|
||||||
|
<Filter>BaseTool</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
|
@ -98,6 +101,9 @@
|
||||||
<ClCompile Include="ToolAbstract\QToolAbstract.cpp">
|
<ClCompile Include="ToolAbstract\QToolAbstract.cpp">
|
||||||
<Filter>ToolAbstract</Filter>
|
<Filter>ToolAbstract</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="BaseTool\PrintMsgToQDebug.cpp">
|
||||||
|
<Filter>BaseTool</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<QtMoc Include="BaseTool\QToolProcessBarDialog.h">
|
<QtMoc Include="BaseTool\QToolProcessBarDialog.h">
|
||||||
|
|
|
@ -35,6 +35,9 @@
|
||||||
#include <gsl/gsl_multifit.h>
|
#include <gsl/gsl_multifit.h>
|
||||||
#include <qcoreapplication.h>
|
#include <qcoreapplication.h>
|
||||||
|
|
||||||
|
#include <xmmintrin.h> // 包含SSE指令集头文件
|
||||||
|
#include <emmintrin.h> // 包含SSE2指令集头文件
|
||||||
|
#include <omp.h> // 包含OpenMP头文件
|
||||||
|
|
||||||
|
|
||||||
QString longDoubleToQStringScientific(long double value) {
|
QString longDoubleToQStringScientific(long double value) {
|
||||||
|
@ -634,4 +637,46 @@ Eigen::VectorXd linspace(double start, double stop, int num) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initializeMatrixWithSSE2(Eigen::MatrixXd& mat, const double* data, long rowcount, long colcount) {
|
||||||
|
__m128d zero = _mm_setzero_pd();
|
||||||
|
|
||||||
|
#pragma omp parallel for
|
||||||
|
for (long i = 0; i < rowcount; ++i) {
|
||||||
|
for (long j = 0; j < colcount; j += 2) { // 每次处理2个double
|
||||||
|
if (j + 2 <= colcount) {
|
||||||
|
__m128d src = _mm_loadu_pd(&data[i * colcount + j]);
|
||||||
|
_mm_storeu_pd(&mat(i, j), src);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 处理剩余部分
|
||||||
|
for (long k = j; k < colcount; ++k) {
|
||||||
|
mat(i, k) = data[i * colcount + k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void initializeMatrixWithSSE2(Eigen::MatrixXf& mat, const float* data, long rowcount, long colcount) {
|
||||||
|
__m128 zero = _mm_setzero_ps();
|
||||||
|
|
||||||
|
#pragma omp parallel for
|
||||||
|
for (long i = 0; i < rowcount; ++i) {
|
||||||
|
for (long j = 0; j < colcount; j += 4) { // 每次处理4个float
|
||||||
|
if (j + 4 <= colcount) {
|
||||||
|
__m128 src = _mm_loadu_ps(&data[i * colcount + j]);
|
||||||
|
_mm_storeu_ps(&mat(i, j), src);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// 处理剩余部分
|
||||||
|
for (long k = j; k < colcount; ++k) {
|
||||||
|
mat(i, k) = data[i * colcount + k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////// 基础数学函数 /////////////////////////////////////////////////////////////
|
///////////////////////////////////// 基础数学函数 /////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
@ -122,4 +123,31 @@ QVector<SatellitePos> BASECONSTVARIABLEAPI SatelliteAntPos2SatellitePos(QVector
|
||||||
QString BASECONSTVARIABLEAPI getDebugDataPath(QString filename);
|
QString BASECONSTVARIABLEAPI getDebugDataPath(QString filename);
|
||||||
std::vector<std::string> BASECONSTVARIABLEAPI split(const std::string& str, char delimiter);
|
std::vector<std::string> BASECONSTVARIABLEAPI split(const std::string& str, char delimiter);
|
||||||
Eigen::VectorXd BASECONSTVARIABLEAPI linspace(double start, double stop, int num);
|
Eigen::VectorXd BASECONSTVARIABLEAPI linspace(double start, double stop, int num);
|
||||||
|
|
||||||
|
|
||||||
|
/** 内存赋值 ***********************************************************************************************************/
|
||||||
|
void initializeMatrixWithSSE2(Eigen::MatrixXd& mat, const double* data, long rowcount, long colcount);
|
||||||
|
void initializeMatrixWithSSE2(Eigen::MatrixXf& mat, const float* data, long rowcount, long colcount);
|
||||||
|
|
||||||
|
|
||||||
|
/** 模板函数类 ***********************************************************************************************************/
|
||||||
|
template<typename T>
|
||||||
|
inline void BASECONSTVARIABLEAPI memsetInitArray(std::shared_ptr<T> ptr, long arrcount,T ti) {
|
||||||
|
for (long i = 0; i < arrcount; i++) {
|
||||||
|
ptr.get()[i] = ti;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline void BASECONSTVARIABLEAPI memcpyArray(std::shared_ptr<T> srct, std::shared_ptr<T> dest, long arrcount) {
|
||||||
|
for (long i = 0; i < arrcount; i++) {
|
||||||
|
dest.get()[i] = srct.get()[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -97,6 +97,13 @@ QString getFileNameWidthoutExtend(QString path)
|
||||||
return fileNameWithoutExtension;
|
return fileNameWithoutExtension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString BASECONSTVARIABLEAPI getFileExtension(QString path)
|
||||||
|
{
|
||||||
|
QFileInfo fileInfo(path);
|
||||||
|
QString fileExtension = fileInfo.suffix(); // 获取无后缀文件名
|
||||||
|
return fileExtension;
|
||||||
|
}
|
||||||
|
|
||||||
bool isDirectory(const QString& path)
|
bool isDirectory(const QString& path)
|
||||||
{
|
{
|
||||||
QFileInfo fileinfo(path);
|
QFileInfo fileinfo(path);
|
||||||
|
|
|
@ -37,6 +37,8 @@ QString BASECONSTVARIABLEAPI getFileNameFromPath(const QString& path);
|
||||||
|
|
||||||
QString BASECONSTVARIABLEAPI getFileNameWidthoutExtend(QString path);
|
QString BASECONSTVARIABLEAPI getFileNameWidthoutExtend(QString path);
|
||||||
|
|
||||||
|
QString BASECONSTVARIABLEAPI getFileExtension(QString path);
|
||||||
|
|
||||||
int BASECONSTVARIABLEAPI write_binfile(char* filepath, char* data, size_t data_len);
|
int BASECONSTVARIABLEAPI write_binfile(char* filepath, char* data, size_t data_len);
|
||||||
|
|
||||||
char* read_textfile(char* text_path, int* length);
|
char* read_textfile(char* text_path, int* length);
|
||||||
|
|
|
@ -629,6 +629,137 @@ Eigen::MatrixXd gdalImage::getData(int start_row, int start_col, int rows_count,
|
||||||
return datamatrix;
|
return datamatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Eigen::MatrixXf gdalImage::getDataf(int start_row, int start_col, int rows_count, int cols_count,
|
||||||
|
int band_ids = 1)
|
||||||
|
{
|
||||||
|
omp_lock_t lock;
|
||||||
|
omp_init_lock(&lock);
|
||||||
|
omp_set_lock(&lock);
|
||||||
|
GDALAllRegister();
|
||||||
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
|
GDALDataset* rasterDataset = (GDALDataset*)(GDALOpen(
|
||||||
|
this->img_path.toUtf8().constData(), GA_ReadOnly)); // 锟斤拷只斤拷式锟斤拷取斤拷影锟斤拷
|
||||||
|
|
||||||
|
GDALDataType gdal_datatype = rasterDataset->GetRasterBand(1)->GetRasterDataType();
|
||||||
|
GDALRasterBand* demBand = rasterDataset->GetRasterBand(band_ids);
|
||||||
|
|
||||||
|
rows_count = start_row + rows_count <= this->height ? rows_count : this->height - start_row;
|
||||||
|
cols_count = start_col + cols_count <= this->width ? cols_count : this->width - start_col;
|
||||||
|
|
||||||
|
Eigen::MatrixXf datamatrix(rows_count, cols_count);
|
||||||
|
|
||||||
|
if (gdal_datatype == GDT_Byte) {
|
||||||
|
char* temp = new char[rows_count * cols_count];
|
||||||
|
demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
rows_count, gdal_datatype, 0, 0);
|
||||||
|
for (int i = 0; i < rows_count; i++) {
|
||||||
|
for (int j = 0; j < cols_count; j++) {
|
||||||
|
datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
else if (gdal_datatype == GDT_UInt16) {
|
||||||
|
unsigned short* temp = new unsigned short[rows_count * cols_count];
|
||||||
|
demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
rows_count, gdal_datatype, 0, 0);
|
||||||
|
for (int i = 0; i < rows_count; i++) {
|
||||||
|
for (int j = 0; j < cols_count; j++) {
|
||||||
|
datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
else if (gdal_datatype == GDT_Int16) {
|
||||||
|
short* temp = new short[rows_count * cols_count];
|
||||||
|
demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
rows_count, gdal_datatype, 0, 0);
|
||||||
|
for (int i = 0; i < rows_count; i++) {
|
||||||
|
for (int j = 0; j < cols_count; j++) {
|
||||||
|
datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
else if (gdal_datatype == GDT_UInt32) {
|
||||||
|
unsigned int* temp = new unsigned int[rows_count * cols_count];
|
||||||
|
demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
rows_count, gdal_datatype, 0, 0);
|
||||||
|
for (int i = 0; i < rows_count; i++) {
|
||||||
|
for (int j = 0; j < cols_count; j++) {
|
||||||
|
datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
else if (gdal_datatype == GDT_Int32) {
|
||||||
|
int* temp = new int[rows_count * cols_count];
|
||||||
|
demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
rows_count, gdal_datatype, 0, 0);
|
||||||
|
for (int i = 0; i < rows_count; i++) {
|
||||||
|
for (int j = 0; j < cols_count; j++) {
|
||||||
|
datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
//else if (gdal_datatype == GDT_UInt64) {
|
||||||
|
// unsigned long* temp = new unsigned long[rows_count * cols_count];
|
||||||
|
// demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
// rows_count, gdal_datatype, 0, 0); for (int i = 0; i < rows_count; i++) {
|
||||||
|
// for (int j = 0; j <
|
||||||
|
// cols_count; j++) {
|
||||||
|
// datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// delete[] temp;
|
||||||
|
//}
|
||||||
|
//else if (gdal_datatype == GDT_Int64) {
|
||||||
|
// long* temp = new long[rows_count * cols_count];
|
||||||
|
// demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
// rows_count, gdal_datatype, 0, 0); for (int i = 0; i < rows_count; i++) {
|
||||||
|
// for (int j = 0; j <
|
||||||
|
// cols_count; j++) {
|
||||||
|
// datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// delete[] temp;
|
||||||
|
//}
|
||||||
|
else if (gdal_datatype == GDT_Float32) {
|
||||||
|
float* temp = new float[rows_count * cols_count];
|
||||||
|
demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
rows_count, gdal_datatype, 0, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < rows_count; i++) {
|
||||||
|
for (int j = 0; j < cols_count; j++) {
|
||||||
|
datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
else if (gdal_datatype == GDT_Float64) {
|
||||||
|
double* temp = new double[rows_count * cols_count];
|
||||||
|
demBand->RasterIO(GF_Read, start_col, start_row, cols_count, rows_count, temp, cols_count,
|
||||||
|
rows_count, gdal_datatype, 0, 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < rows_count; i++) {
|
||||||
|
for (int j = 0; j < cols_count; j++) {
|
||||||
|
datamatrix(i, j) = temp[i * cols_count + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
GDALClose((GDALDatasetH)rasterDataset);
|
||||||
|
omp_unset_lock(&lock); // 锟酵放伙拷斤拷
|
||||||
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
|
// GDALDestroy(); // or, DllMain at DLL_PROCESS_DETACH
|
||||||
|
return datamatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Eigen::MatrixXi gdalImage::getDatai(int start_row, int start_col, int rows_count, int cols_count, int band_ids)
|
Eigen::MatrixXi gdalImage::getDatai(int start_row, int start_col, int rows_count, int cols_count, int band_ids)
|
||||||
{
|
{
|
||||||
omp_lock_t lock;
|
omp_lock_t lock;
|
||||||
|
@ -848,7 +979,10 @@ void gdalImage::saveImage(Eigen::MatrixXd data, int start_row = 0, int start_col
|
||||||
}
|
}
|
||||||
GDALAllRegister();
|
GDALAllRegister();
|
||||||
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
|
|
||||||
|
QString filesuffer = getFileExtension(this->img_path).toLower();
|
||||||
|
bool isTiff = filesuffer.contains("tif");
|
||||||
|
GDALDriver* poDriver = isTiff? GetGDALDriverManager()->GetDriverByName("GTiff"): GetGDALDriverManager()->GetDriverByName("ENVI");
|
||||||
GDALDataset* poDstDS = nullptr;
|
GDALDataset* poDstDS = nullptr;
|
||||||
if(exists_test(this->img_path)) {
|
if(exists_test(this->img_path)) {
|
||||||
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
||||||
|
@ -912,9 +1046,90 @@ void gdalImage::saveImage(Eigen::MatrixXd data, int start_row = 0, int start_col
|
||||||
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gdalImage::saveImage(Eigen::MatrixXf data, int start_row = 0, int start_col = 0,
|
||||||
|
int band_ids = 1)
|
||||||
|
{
|
||||||
|
GDALDataType datetype = this->getDataType();
|
||||||
|
omp_lock_t lock;
|
||||||
|
omp_init_lock(&lock);
|
||||||
|
omp_set_lock(&lock);
|
||||||
|
if (start_row + data.rows() > this->height || start_col + data.cols() > this->width) {
|
||||||
|
QString tip = u8"file path: " + this->img_path + " image size :( " + QString::number(this->height) + " , " + QString::number(this->width) + " ) " + " input size (" + QString::number(start_row + data.rows()) + ", " + QString::number(start_col + data.cols()) + ") ";
|
||||||
|
qDebug() << tip;
|
||||||
|
throw std::exception(tip.toUtf8().constData());
|
||||||
|
}
|
||||||
|
GDALAllRegister();
|
||||||
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
|
QString filesuffer = getFileExtension(this->img_path).toLower();
|
||||||
|
bool isTiff = filesuffer.contains("tif");
|
||||||
|
GDALDriver* poDriver = isTiff ? GetGDALDriverManager()->GetDriverByName("GTiff") : GetGDALDriverManager()->GetDriverByName("ENVI");
|
||||||
|
GDALDataset* poDstDS = nullptr;
|
||||||
|
if (exists_test(this->img_path)) {
|
||||||
|
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
poDstDS = poDriver->Create(this->img_path.toUtf8().constData(), this->width, this->height,
|
||||||
|
this->band_num, datetype, NULL); // 斤拷锟斤拷
|
||||||
|
|
||||||
|
if (nullptr == poDstDS) {
|
||||||
|
QString tip = u8"file path: " + this->img_path + " image size :( " + QString::number(this->height) + " , " + QString::number(this->width) + " ) " + " input size (" + QString::number(start_row + data.rows()) + ", " + QString::number(start_col + data.cols()) + ") ";
|
||||||
|
qDebug() << tip;
|
||||||
|
throw std::exception(tip.toUtf8().constData());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
poDstDS->SetProjection(this->projection.toUtf8().constData());
|
||||||
|
|
||||||
|
double gt_ptr[6];
|
||||||
|
for (int i = 0; i < this->gt.rows(); i++) {
|
||||||
|
for (int j = 0; j < this->gt.cols(); j++) {
|
||||||
|
gt_ptr[i * 3 + j] = this->gt(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
poDstDS->SetGeoTransform(gt_ptr);
|
||||||
|
//delete gt_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int datarows = data.rows();
|
||||||
|
int datacols = data.cols();
|
||||||
|
void* databuffer = nullptr;
|
||||||
|
if (datetype == GDT_Float32) {
|
||||||
|
databuffer = new float[datarows * datacols];
|
||||||
|
for (int i = 0; i < datarows; i++) {
|
||||||
|
for (int j = 0; j < datacols; j++) {
|
||||||
|
((float*)databuffer)[i * datacols + j] = float(data(i, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
poDstDS->GetRasterBand(band_ids)->RasterIO(GF_Write, start_col, start_row, datacols, datarows,
|
||||||
|
databuffer, datacols, datarows, datetype, 0, 0);
|
||||||
|
}
|
||||||
|
else if (datetype == GDT_Float64) {
|
||||||
|
databuffer = new double[datarows * datacols];
|
||||||
|
for (int i = 0; i < datarows; i++) {
|
||||||
|
for (int j = 0; j < datacols; j++) {
|
||||||
|
((double*)databuffer)[i * datacols + j] = double(data(i, j));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
poDstDS->GetRasterBand(band_ids)->RasterIO(GF_Write, start_col, start_row, datacols, datarows,
|
||||||
|
databuffer, datacols, datarows, datetype, 0, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
GDALFlushCache(poDstDS);
|
||||||
|
GDALClose((GDALDatasetH)poDstDS);
|
||||||
|
// GDALDestroy(); // or, DllMain at DLL_PROCESS_DETACH
|
||||||
|
delete[] databuffer;
|
||||||
|
omp_unset_lock(&lock); // 锟酵放伙拷斤拷
|
||||||
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void gdalImage::saveImage(Eigen::MatrixXi data, int start_row, int start_col, int band_ids)
|
void gdalImage::saveImage(Eigen::MatrixXi data, int start_row, int start_col, int band_ids)
|
||||||
{
|
{
|
||||||
|
|
||||||
GDALDataType datetype=this->getDataType();
|
GDALDataType datetype=this->getDataType();
|
||||||
omp_lock_t lock;
|
omp_lock_t lock;
|
||||||
omp_init_lock(&lock);
|
omp_init_lock(&lock);
|
||||||
|
@ -926,7 +1141,9 @@ void gdalImage::saveImage(Eigen::MatrixXi data, int start_row, int start_col, in
|
||||||
}
|
}
|
||||||
GDALAllRegister();
|
GDALAllRegister();
|
||||||
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName("GTiff");
|
QString filesuffer = getFileExtension(this->img_path).toLower();
|
||||||
|
bool isTiff = filesuffer.contains("tif");
|
||||||
|
GDALDriver* poDriver = isTiff ? GetGDALDriverManager()->GetDriverByName("GTiff") : GetGDALDriverManager()->GetDriverByName("ENVI");
|
||||||
GDALDataset* poDstDS = nullptr;
|
GDALDataset* poDstDS = nullptr;
|
||||||
if (exists_test(this->img_path)) {
|
if (exists_test(this->img_path)) {
|
||||||
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
||||||
|
@ -969,6 +1186,191 @@ void gdalImage::saveImage(Eigen::MatrixXi data, int start_row, int start_col, in
|
||||||
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void gdalImage::saveImage(std::shared_ptr<double> data, int start_row, int start_col, int rowcount, int colcount, int band_ids)
|
||||||
|
{
|
||||||
|
GDALDataType datetype = this->getDataType();
|
||||||
|
omp_lock_t lock;
|
||||||
|
omp_init_lock(&lock);
|
||||||
|
omp_set_lock(&lock);
|
||||||
|
if (start_row + rowcount > this->height || start_col + colcount > this->width) {
|
||||||
|
QString tip = u8"file path: " + this->img_path + " image size :( " + QString::number(this->height) + " , " + QString::number(this->width) + " ) " + " input size (" + QString::number(start_row + rowcount) + ", " + QString::number(start_col + colcount) + ") ";
|
||||||
|
qDebug() << tip;
|
||||||
|
throw std::exception(tip.toUtf8().constData());
|
||||||
|
}
|
||||||
|
GDALAllRegister();
|
||||||
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
|
QString filesuffer = getFileExtension(this->img_path).toLower();
|
||||||
|
bool isTiff = filesuffer.contains("tif");
|
||||||
|
GDALDriver* poDriver = isTiff ? GetGDALDriverManager()->GetDriverByName("GTiff") : GetGDALDriverManager()->GetDriverByName("ENVI");
|
||||||
|
GDALDataset* poDstDS = nullptr;
|
||||||
|
if (exists_test(this->img_path)) {
|
||||||
|
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
poDstDS = poDriver->Create(this->img_path.toUtf8().constData(), this->width, this->height,
|
||||||
|
this->band_num, GDT_Float32, NULL); // 斤拷锟斤拷
|
||||||
|
poDstDS->SetProjection(this->projection.toUtf8().constData());
|
||||||
|
|
||||||
|
double gt_ptr[6];
|
||||||
|
for (int i = 0; i < this->gt.rows(); i++) {
|
||||||
|
for (int j = 0; j < this->gt.cols(); j++) {
|
||||||
|
gt_ptr[i * 3 + j] = this->gt(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
poDstDS->SetGeoTransform(gt_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
long datarows = rowcount;
|
||||||
|
long datacols = colcount;
|
||||||
|
double* databuffer = new double[datarows * datacols];
|
||||||
|
if (datetype == GDT_Float64) {
|
||||||
|
memcpy(databuffer, data.get(), sizeof(double) * datarows * datacols);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (long i = 0; i < datarows; i++) {
|
||||||
|
for (long j = 0; j < datacols; j++) {
|
||||||
|
databuffer[i * datacols + j] = data.get()[i * datacols + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// poDstDS->RasterIO(GF_Write,start_col, start_row, datacols, datarows, databuffer, datacols,
|
||||||
|
// datarows, GDT_Float32,band_ids, num,0,0,0);
|
||||||
|
poDstDS->GetRasterBand(band_ids)->RasterIO(GF_Write, start_col, start_row, datacols, datarows,
|
||||||
|
databuffer, datacols, datarows, datetype, 0, 0);
|
||||||
|
|
||||||
|
GDALFlushCache(poDstDS);
|
||||||
|
GDALClose((GDALDatasetH)poDstDS);
|
||||||
|
// GDALDestroy(); // or, DllMain at DLL_PROCESS_DETACH
|
||||||
|
delete[] databuffer;
|
||||||
|
omp_unset_lock(&lock); // 锟酵放伙拷斤拷
|
||||||
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
|
}
|
||||||
|
|
||||||
|
void gdalImage::saveImage(std::shared_ptr<float> data, int start_row, int start_col, int rowcount, int colcount, int band_ids)
|
||||||
|
{
|
||||||
|
GDALDataType datetype = this->getDataType();
|
||||||
|
omp_lock_t lock;
|
||||||
|
omp_init_lock(&lock);
|
||||||
|
omp_set_lock(&lock);
|
||||||
|
if (start_row + rowcount > this->height || start_col + colcount > this->width) {
|
||||||
|
QString tip = u8"file path: " + this->img_path + " image size :( " + QString::number(this->height) + " , " + QString::number(this->width) + " ) " + " input size (" + QString::number(start_row + rowcount) + ", " + QString::number(start_col + colcount) + ") ";
|
||||||
|
qDebug() << tip;
|
||||||
|
throw std::exception(tip.toUtf8().constData());
|
||||||
|
}
|
||||||
|
GDALAllRegister();
|
||||||
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
|
QString filesuffer = getFileExtension(this->img_path).toLower();
|
||||||
|
bool isTiff = filesuffer.contains("tif");
|
||||||
|
GDALDriver* poDriver = isTiff ? GetGDALDriverManager()->GetDriverByName("GTiff") : GetGDALDriverManager()->GetDriverByName("ENVI");
|
||||||
|
GDALDataset* poDstDS = nullptr;
|
||||||
|
if (exists_test(this->img_path)) {
|
||||||
|
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
poDstDS = poDriver->Create(this->img_path.toUtf8().constData(), this->width, this->height,
|
||||||
|
this->band_num, GDT_Float32, NULL); // 斤拷锟斤拷
|
||||||
|
poDstDS->SetProjection(this->projection.toUtf8().constData());
|
||||||
|
|
||||||
|
double gt_ptr[6];
|
||||||
|
for (int i = 0; i < this->gt.rows(); i++) {
|
||||||
|
for (int j = 0; j < this->gt.cols(); j++) {
|
||||||
|
gt_ptr[i * 3 + j] = this->gt(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
poDstDS->SetGeoTransform(gt_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
long datarows = rowcount;
|
||||||
|
long datacols = colcount;
|
||||||
|
float* databuffer = new float[datarows * datacols];
|
||||||
|
if (datetype == GDT_Float32) {
|
||||||
|
memcpy(databuffer, data.get(), sizeof(float) * datarows * datacols);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (long i = 0; i < datarows; i++) {
|
||||||
|
for (long j = 0; j < datacols; j++) {
|
||||||
|
databuffer[i * datacols + j] = data.get()[i * datacols + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// poDstDS->RasterIO(GF_Write,start_col, start_row, datacols, datarows, databuffer, datacols,
|
||||||
|
// datarows, GDT_Float32,band_ids, num,0,0,0);
|
||||||
|
poDstDS->GetRasterBand(band_ids)->RasterIO(GF_Write, start_col, start_row, datacols, datarows,
|
||||||
|
databuffer, datacols, datarows, datetype, 0, 0);
|
||||||
|
|
||||||
|
GDALFlushCache(poDstDS);
|
||||||
|
GDALClose((GDALDatasetH)poDstDS);
|
||||||
|
// GDALDestroy(); // or, DllMain at DLL_PROCESS_DETACH
|
||||||
|
delete[] databuffer;
|
||||||
|
omp_unset_lock(&lock); // 锟酵放伙拷斤拷
|
||||||
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void gdalImage::saveImage(std::shared_ptr<int> data, int start_row, int start_col, int rowcount, int colcount, int band_ids)
|
||||||
|
{
|
||||||
|
GDALDataType datetype = this->getDataType();
|
||||||
|
omp_lock_t lock;
|
||||||
|
omp_init_lock(&lock);
|
||||||
|
omp_set_lock(&lock);
|
||||||
|
if (start_row + rowcount > this->height || start_col + colcount > this->width) {
|
||||||
|
QString tip = u8"file path: " + this->img_path + " image size :( " + QString::number(this->height) + " , " + QString::number(this->width) + " ) " + " input size (" + QString::number(start_row + rowcount) + ", " + QString::number(start_col + colcount) + ") ";
|
||||||
|
qDebug() << tip;
|
||||||
|
throw std::exception(tip.toUtf8().constData());
|
||||||
|
}
|
||||||
|
GDALAllRegister();
|
||||||
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
|
QString filesuffer = getFileExtension(this->img_path).toLower();
|
||||||
|
bool isTiff = filesuffer.contains("tif");
|
||||||
|
GDALDriver* poDriver = isTiff ? GetGDALDriverManager()->GetDriverByName("GTiff") : GetGDALDriverManager()->GetDriverByName("ENVI");
|
||||||
|
GDALDataset* poDstDS = nullptr;
|
||||||
|
if (exists_test(this->img_path)) {
|
||||||
|
poDstDS = (GDALDataset*)(GDALOpen(this->img_path.toUtf8().constData(), GA_Update));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
poDstDS = poDriver->Create(this->img_path.toUtf8().constData(), this->width, this->height,
|
||||||
|
this->band_num, GDT_Float32, NULL); // 斤拷锟斤拷
|
||||||
|
poDstDS->SetProjection(this->projection.toUtf8().constData());
|
||||||
|
|
||||||
|
double gt_ptr[6];
|
||||||
|
for (int i = 0; i < this->gt.rows(); i++) {
|
||||||
|
for (int j = 0; j < this->gt.cols(); j++) {
|
||||||
|
gt_ptr[i * 3 + j] = this->gt(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
poDstDS->SetGeoTransform(gt_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
long datarows = rowcount;
|
||||||
|
long datacols = colcount;
|
||||||
|
int* databuffer = new int[datarows * datacols];
|
||||||
|
if (datetype == GDT_Int32) {
|
||||||
|
memcpy(databuffer, data.get(), sizeof(int) * datarows * datacols);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (long i = 0; i < datarows; i++) {
|
||||||
|
for (long j = 0; j < datacols; j++) {
|
||||||
|
databuffer[i * datacols + j] = data.get()[i * datacols + j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// poDstDS->RasterIO(GF_Write,start_col, start_row, datacols, datarows, databuffer, datacols,
|
||||||
|
// datarows, GDT_Float32,band_ids, num,0,0,0);
|
||||||
|
poDstDS->GetRasterBand(band_ids)->RasterIO(GF_Write, start_col, start_row, datacols, datarows,
|
||||||
|
databuffer, datacols, datarows, datetype, 0, 0);
|
||||||
|
|
||||||
|
GDALFlushCache(poDstDS);
|
||||||
|
GDALClose((GDALDatasetH)poDstDS);
|
||||||
|
// GDALDestroy(); // or, DllMain at DLL_PROCESS_DETACH
|
||||||
|
delete[] databuffer;
|
||||||
|
omp_unset_lock(&lock); // 锟酵放伙拷斤拷
|
||||||
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void gdalImage::saveImage()
|
void gdalImage::saveImage()
|
||||||
{
|
{
|
||||||
this->saveImage(this->data, this->start_row, this->start_col, this->data_band_ids);
|
this->saveImage(this->data, this->start_row, this->start_col, this->data_band_ids);
|
||||||
|
@ -1500,7 +1902,8 @@ int ResampleGDAL(const char* pszSrcFile, const char* pszOutFile, double* gt, int
|
||||||
pDDst->SetGeoTransform(gt);
|
pDDst->SetGeoTransform(gt);
|
||||||
|
|
||||||
GDALWarpOptions* psWo = GDALCreateWarpOptions();
|
GDALWarpOptions* psWo = GDALCreateWarpOptions();
|
||||||
|
CPLSetConfigOption("GDAL_NUM_THREADS", "ALL_CPUS"); // 使用所有可用的CPU核心
|
||||||
|
CPLSetConfigOption("GDAL_CACHEMAX", "16000"); // 设置缓存大小为500MB
|
||||||
// psWo->papszWarpOptions = CSLDuplicate(NULL);
|
// psWo->papszWarpOptions = CSLDuplicate(NULL);
|
||||||
psWo->eWorkingDataType = dataType;
|
psWo->eWorkingDataType = dataType;
|
||||||
psWo->eResampleAlg = eResample;
|
psWo->eResampleAlg = eResample;
|
||||||
|
|
|
@ -71,14 +71,14 @@ enum GDALREADARRCOPYMETHOD {
|
||||||
VARIABLEMETHOD // 变量赋值
|
VARIABLEMETHOD // 变量赋值
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BASECONSTVARIABLEAPI ShowProessAbstract{
|
|
||||||
|
class BASECONSTVARIABLEAPI ShowProessAbstract {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void showProcess(double precent,QString tip);
|
virtual void showProcess(double precent, QString tip);
|
||||||
virtual void showToolInfo( QString tip) ;
|
virtual void showToolInfo(QString tip);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ public:
|
||||||
/// \param long 经度
|
/// \param long 经度
|
||||||
/// \param lat 纬度
|
/// \param lat 纬度
|
||||||
/// \return 对应投影坐标系统的 EPSG编码,-1 表示计算错误
|
/// \return 对应投影坐标系统的 EPSG编码,-1 表示计算错误
|
||||||
long BASECONSTVARIABLEAPI getProjectEPSGCodeByLon_Lat(double long, double lat,ProjectStripDelta stripState );
|
long BASECONSTVARIABLEAPI getProjectEPSGCodeByLon_Lat(double long, double lat, ProjectStripDelta stripState);
|
||||||
|
|
||||||
long BASECONSTVARIABLEAPI getProjectEPSGCodeByLon_Lat_inStrip3(double lon, double lat);
|
long BASECONSTVARIABLEAPI getProjectEPSGCodeByLon_Lat_inStrip3(double lon, double lat);
|
||||||
|
|
||||||
|
@ -106,15 +106,15 @@ long BASECONSTVARIABLEAPI GetEPSGFromRasterFile(QString filepath);
|
||||||
std::shared_ptr<PointRaster> BASECONSTVARIABLEAPI GetCenterPointInRaster(QString filepath);
|
std::shared_ptr<PointRaster> BASECONSTVARIABLEAPI GetCenterPointInRaster(QString filepath);
|
||||||
|
|
||||||
CoordinateSystemType BASECONSTVARIABLEAPI getCoordinateSystemTypeByEPSGCode(long EPSGCODE);
|
CoordinateSystemType BASECONSTVARIABLEAPI getCoordinateSystemTypeByEPSGCode(long EPSGCODE);
|
||||||
|
|
||||||
|
|
||||||
// 文件打开 // 当指令销毁时,调用GDALClose 销毁类型
|
// 文件打开 // 当指令销毁时,调用GDALClose 销毁类型
|
||||||
std::shared_ptr<GDALDataset> BASECONSTVARIABLEAPI OpenDataset(const QString& in_path, GDALAccess rwmode= GA_ReadOnly);
|
std::shared_ptr<GDALDataset> BASECONSTVARIABLEAPI OpenDataset(const QString& in_path, GDALAccess rwmode = GA_ReadOnly);
|
||||||
void BASECONSTVARIABLEAPI CloseDataset(GDALDataset* ptr);
|
void BASECONSTVARIABLEAPI CloseDataset(GDALDataset* ptr);
|
||||||
|
|
||||||
// 数据格式转换
|
// 数据格式转换
|
||||||
int BASECONSTVARIABLEAPI TIFF2ENVI(QString in_tiff_path,QString out_envi_path);
|
int BASECONSTVARIABLEAPI TIFF2ENVI(QString in_tiff_path, QString out_envi_path);
|
||||||
int BASECONSTVARIABLEAPI ENVI2TIFF(QString in_envi_path,QString out_tiff_path);
|
int BASECONSTVARIABLEAPI ENVI2TIFF(QString in_envi_path, QString out_tiff_path);
|
||||||
|
|
||||||
// 保存影像数据 --直接保存 ENVI 文件
|
// 保存影像数据 --直接保存 ENVI 文件
|
||||||
|
|
||||||
|
@ -123,12 +123,12 @@ int BASECONSTVARIABLEAPI CreateDataset(QString new_file_path, int height, in
|
||||||
int BASECONSTVARIABLEAPI saveDataset(QString new_file_path, int start_line, int start_cols, int band_ids, int datacols, int datarows, void* databuffer);
|
int BASECONSTVARIABLEAPI saveDataset(QString new_file_path, int start_line, int start_cols, int band_ids, int datacols, int datarows, void* databuffer);
|
||||||
|
|
||||||
// 根据限制条件估算分块大小
|
// 根据限制条件估算分块大小
|
||||||
int BASECONSTVARIABLEAPI block_num_pre_memory(int width, int height, GDALDataType gdal_dtype,double memey_size);
|
int BASECONSTVARIABLEAPI block_num_pre_memory(int width, int height, GDALDataType gdal_dtype, double memey_size);
|
||||||
|
|
||||||
// 将结果转换为复数 或者 实数
|
// 将结果转换为复数 或者 实数
|
||||||
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> BASECONSTVARIABLEAPI ReadComplexMatrixData(int start_line,int width, int line_num, std::shared_ptr<GDALDataset> rasterDataset, GDALDataType gdal_datatype);
|
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> BASECONSTVARIABLEAPI ReadComplexMatrixData(int start_line, int width, int line_num, std::shared_ptr<GDALDataset> rasterDataset, GDALDataType gdal_datatype);
|
||||||
|
|
||||||
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> BASECONSTVARIABLEAPI ReadMatrixDoubleData(int start_line, int width, int line_num, std::shared_ptr<GDALDataset> rasterDataset, GDALDataType gdal_datatype,int band_idx);
|
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> BASECONSTVARIABLEAPI ReadMatrixDoubleData(int start_line, int width, int line_num, std::shared_ptr<GDALDataset> rasterDataset, GDALDataType gdal_datatype, int band_idx);
|
||||||
|
|
||||||
Eigen::MatrixXd BASECONSTVARIABLEAPI getGeoTranslationArray(QString in_path);
|
Eigen::MatrixXd BASECONSTVARIABLEAPI getGeoTranslationArray(QString in_path);
|
||||||
ImageGEOINFO BASECONSTVARIABLEAPI getImageINFO(QString in_path);
|
ImageGEOINFO BASECONSTVARIABLEAPI getImageINFO(QString in_path);
|
||||||
|
@ -143,7 +143,7 @@ struct RasterExtend {
|
||||||
double max_y;//经度
|
double max_y;//经度
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,15 +161,23 @@ public: // 方法
|
||||||
virtual void setHeight(int);
|
virtual void setHeight(int);
|
||||||
virtual void setWidth(int);
|
virtual void setWidth(int);
|
||||||
virtual void setTranslationMatrix(Eigen::MatrixXd gt);
|
virtual void setTranslationMatrix(Eigen::MatrixXd gt);
|
||||||
virtual void setData(Eigen::MatrixXd,int data_band_ids=1);
|
virtual void setData(Eigen::MatrixXd, int data_band_ids = 1);
|
||||||
virtual Eigen::MatrixXd getData(int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
virtual Eigen::MatrixXd getData(int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
||||||
|
virtual Eigen::MatrixXf getDataf(int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
||||||
virtual Eigen::MatrixXi getDatai(int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
virtual Eigen::MatrixXi getDatai(int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
||||||
virtual ErrorCode getData(double* data, int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
virtual ErrorCode getData(double* data, int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
||||||
virtual ErrorCode getData(long* data, int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
virtual ErrorCode getData(long* data, int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
||||||
virtual Eigen::MatrixXd getGeoTranslation();
|
virtual Eigen::MatrixXd getGeoTranslation();
|
||||||
virtual GDALDataType getDataType();
|
virtual GDALDataType getDataType();
|
||||||
virtual void saveImage(Eigen::MatrixXd, int start_row, int start_col, int band_ids);
|
virtual void saveImage(Eigen::MatrixXd, int start_row, int start_col, int band_ids);
|
||||||
|
virtual void saveImage(Eigen::MatrixXf, int start_row, int start_col, int band_ids);
|
||||||
virtual void saveImage(Eigen::MatrixXi, int start_row, int start_col, int band_ids);
|
virtual void saveImage(Eigen::MatrixXi, int start_row, int start_col, int band_ids);
|
||||||
|
virtual void saveImage(std::shared_ptr<double>, int start_row, int start_col,int rowcount,int colcount, int band_ids);
|
||||||
|
virtual void saveImage(std::shared_ptr<float>, int start_row, int start_col, int rowcount, int colcount, int band_ids);
|
||||||
|
virtual void saveImage(std::shared_ptr<int>, int start_row, int start_col, int rowcount, int colcount, int band_ids);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
virtual void saveImage();
|
virtual void saveImage();
|
||||||
virtual void setNoDataValue(double nodatavalue, int band_ids);
|
virtual void setNoDataValue(double nodatavalue, int band_ids);
|
||||||
virtual void setNoDataValuei(int nodatavalue, int band_ids);
|
virtual void setNoDataValuei(int nodatavalue, int band_ids);
|
||||||
|
@ -186,7 +194,7 @@ public: // 方法
|
||||||
double BandminValue(int bandids = 1);
|
double BandminValue(int bandids = 1);
|
||||||
virtual GDALRPCInfo getRPC();
|
virtual GDALRPCInfo getRPC();
|
||||||
virtual Eigen::MatrixXd getLandPoint(Eigen::MatrixXd points);
|
virtual Eigen::MatrixXd getLandPoint(Eigen::MatrixXd points);
|
||||||
|
|
||||||
virtual Eigen::MatrixXd getHist(int bandids);
|
virtual Eigen::MatrixXd getHist(int bandids);
|
||||||
|
|
||||||
virtual RasterExtend getExtend();
|
virtual RasterExtend getExtend();
|
||||||
|
@ -210,7 +218,7 @@ public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// gdalImage图像操作类
|
/// gdalImage图像操作类
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class BASECONSTVARIABLEAPI gdalImageComplex:public gdalImage
|
class BASECONSTVARIABLEAPI gdalImageComplex :public gdalImage
|
||||||
{
|
{
|
||||||
|
|
||||||
public: // 方法
|
public: // 方法
|
||||||
|
@ -219,7 +227,7 @@ public: // 方法
|
||||||
void setData(Eigen::MatrixXcd);
|
void setData(Eigen::MatrixXcd);
|
||||||
void saveImage(Eigen::MatrixXcd data, int start_row, int start_col, int band_ids);
|
void saveImage(Eigen::MatrixXcd data, int start_row, int start_col, int band_ids);
|
||||||
Eigen::MatrixXcd getDataComplex(int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
Eigen::MatrixXcd getDataComplex(int start_row, int start_col, int rows_count, int cols_count, int band_ids);
|
||||||
|
|
||||||
void saveImage() override;
|
void saveImage() override;
|
||||||
void savePreViewImage();
|
void savePreViewImage();
|
||||||
public:
|
public:
|
||||||
|
@ -230,7 +238,7 @@ public:
|
||||||
gdalImage BASECONSTVARIABLEAPI CreategdalImageDouble(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, QString projection, bool need_gt = true, bool overwrite = false, bool isEnvi = false);
|
gdalImage BASECONSTVARIABLEAPI CreategdalImageDouble(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, QString projection, bool need_gt = true, bool overwrite = false, bool isEnvi = false);
|
||||||
gdalImage BASECONSTVARIABLEAPI CreategdalImage(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, QString projection, bool need_gt = true, bool overwrite = false, bool isEnvi = false);
|
gdalImage BASECONSTVARIABLEAPI CreategdalImage(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, QString projection, bool need_gt = true, bool overwrite = false, bool isEnvi = false);
|
||||||
|
|
||||||
gdalImage BASECONSTVARIABLEAPI CreategdalImage(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, long espgcode, GDALDataType eType=GDT_Float32, bool need_gt = true, bool overwrite = false,bool isENVI=false);
|
gdalImage BASECONSTVARIABLEAPI CreategdalImage(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, long espgcode, GDALDataType eType = GDT_Float32, bool need_gt = true, bool overwrite = false, bool isENVI = false);
|
||||||
|
|
||||||
gdalImageComplex BASECONSTVARIABLEAPI CreategdalImageComplex(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, QString projection, bool need_gt = true, bool overwrite = false);
|
gdalImageComplex BASECONSTVARIABLEAPI CreategdalImageComplex(const QString& img_path, int height, int width, int band_num, Eigen::MatrixXd gt, QString projection, bool need_gt = true, bool overwrite = false);
|
||||||
|
|
||||||
|
@ -255,7 +263,7 @@ int BASECONSTVARIABLEAPI alignRaster(QString inputPath, QString referencePath
|
||||||
//--------------------- 保存文博 -------------------------------
|
//--------------------- 保存文博 -------------------------------
|
||||||
|
|
||||||
int BASECONSTVARIABLEAPI saveMatrixXcd2TiFF(Eigen::MatrixXcd data, QString out_tiff_path);
|
int BASECONSTVARIABLEAPI saveMatrixXcd2TiFF(Eigen::MatrixXcd data, QString out_tiff_path);
|
||||||
|
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
|
|
||||||
void BASECONSTVARIABLEAPI clipRaster(QString inRasterPath, QString outRasterPath, long minRow, long maxRow, long minCol, long maxCol);
|
void BASECONSTVARIABLEAPI clipRaster(QString inRasterPath, QString outRasterPath, long minRow, long maxRow, long minCol, long maxCol);
|
||||||
|
@ -270,11 +278,11 @@ enum MERGEMODE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
ErrorCode BASECONSTVARIABLEAPI MergeRasterProcess(QVector<QString> filepath, QString outfileptah, QString mainString, MERGEMODE mergecode = MERGEMODE::MERGE_GEOCODING, bool isENVI = false, ShowProessAbstract* dia=nullptr);
|
ErrorCode BASECONSTVARIABLEAPI MergeRasterProcess(QVector<QString> filepath, QString outfileptah, QString mainString, MERGEMODE mergecode = MERGEMODE::MERGE_GEOCODING, bool isENVI = false, ShowProessAbstract* dia = nullptr);
|
||||||
|
|
||||||
|
|
||||||
ErrorCode BASECONSTVARIABLEAPI MergeRasterInGeoCoding(QVector<gdalImage> inimgs, gdalImage resultimg,gdalImage maskimg, ShowProessAbstract* dia = nullptr);
|
ErrorCode BASECONSTVARIABLEAPI MergeRasterInGeoCoding(QVector<gdalImage> inimgs, gdalImage resultimg, gdalImage maskimg, ShowProessAbstract* dia = nullptr);
|
||||||
|
|
||||||
|
|
||||||
// 保存矩阵转换为envi文件,默认数据格式为double
|
// 保存矩阵转换为envi文件,默认数据格式为double
|
||||||
bool BASECONSTVARIABLEAPI saveEigenMatrixXd2Bin(Eigen::MatrixXd data, QString dataStrPath);
|
bool BASECONSTVARIABLEAPI saveEigenMatrixXd2Bin(Eigen::MatrixXd data, QString dataStrPath);
|
||||||
|
@ -293,7 +301,7 @@ void BASECONSTVARIABLEAPI testOutClsArr(QString filename, long* amp, long rowc
|
||||||
|
|
||||||
//--------------------- 图像文件读写 ------------------------------
|
//--------------------- 图像文件读写 ------------------------------
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline std::shared_ptr<T> readDataArr(gdalImage& imgds, int start_row, int start_col, int rows_count, int cols_count, int band_ids, GDALREADARRCOPYMETHOD method)
|
inline std::shared_ptr<T> readDataArr(gdalImage& imgds, int start_row, int start_col, int& rows_count, int& cols_count, int band_ids, GDALREADARRCOPYMETHOD method)
|
||||||
{
|
{
|
||||||
std::shared_ptr<T> result = nullptr;
|
std::shared_ptr<T> result = nullptr;
|
||||||
|
|
||||||
|
@ -492,7 +500,7 @@ inline std::shared_ptr<T> readDataArr(gdalImage& imgds, int start_row, int start
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline std::shared_ptr<T> readDataArrComplex(gdalImageComplex& imgds, int start_row, int start_col, int rows_count, int cols_count, int band_ids, GDALREADARRCOPYMETHOD method)
|
inline std::shared_ptr<T> readDataArrComplex(gdalImageComplex& imgds, int start_row, int start_col, int& rows_count, int& cols_count, int band_ids, GDALREADARRCOPYMETHOD method)
|
||||||
{
|
{
|
||||||
std::shared_ptr<T> result = nullptr;
|
std::shared_ptr<T> result = nullptr;
|
||||||
|
|
||||||
|
@ -565,6 +573,8 @@ inline std::shared_ptr<T> readDataArrComplex(gdalImageComplex& imgds, int start_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------- 图像分块 ------------------------------
|
//--------------------- 图像分块 ------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include "PrintMsgToQDebug.h"
|
||||||
|
#include <QDebug>
|
||||||
|
BASECONSTVARIABLEAPI void PrintMsgToQDebug(char* msg)
|
||||||
|
{
|
||||||
|
qDebug() << QString(msg);
|
||||||
|
return ;
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
#pragma once
|
||||||
|
#ifndef PRINTMSGTOQDEBUG_H_
|
||||||
|
#define PRINTMSGTOQDEBUG_H_
|
||||||
|
#include "BaseConstVariable.h"
|
||||||
|
|
||||||
|
extern "C" BASECONSTVARIABLEAPI void PrintMsgToQDebug(char* msg);
|
||||||
|
#endif // !PRINTMSGTOQDEBUG_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -148,6 +148,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="RasterProcessToolWidgetAPI.h" />
|
<ClInclude Include="RasterProcessToolWidgetAPI.h" />
|
||||||
|
<ClInclude Include="RasterProcessToolWidgetCFunAPI.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
||||||
|
|
|
@ -64,5 +64,8 @@
|
||||||
<ClInclude Include="RasterProcessToolWidgetAPI.h">
|
<ClInclude Include="RasterProcessToolWidgetAPI.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="RasterProcessToolWidgetCFunAPI.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -0,0 +1,12 @@
|
||||||
|
#pragma once
|
||||||
|
#ifndef RASTERPROCESSTOOLWIDGETCFUNAPI_H_
|
||||||
|
#define RASTERPROCESSTOOLWIDGETCFUNAPI_H_
|
||||||
|
|
||||||
|
#ifdef RASTERPROCESSTOOLWIDGET_LIB
|
||||||
|
#define RASTERPROCESSTOOLWIDGETCFUNAPI_EXPORT __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define RASTERPROCESSTOOLWIDGETCFUNAPI_EXPORT __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,10 @@
|
||||||
|
#include "PrintMessage_C.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RASTERMAINWIDGETGUICFUNAPI_EXPORT void PrintMessageWindowsShow_C_Fun(char* msg)
|
||||||
|
{
|
||||||
|
qDebug() << QString(msg);
|
||||||
|
return ;
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef PRINTMESSAGE_C_H_
|
||||||
|
#define PRINTMESSAGE_C_H_
|
||||||
|
|
||||||
|
#include "RasterMainWidgetGUICFunAPI.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" RASTERMAINWIDGETGUICFUNAPI_EXPORT void PrintMessageWindowsShow_C_Fun(char* msg);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -99,6 +99,7 @@
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClCompile Include="PrintMessage_C.cpp" />
|
||||||
<ClCompile Include="RasterMainWidget\crs.cpp" />
|
<ClCompile Include="RasterMainWidget\crs.cpp" />
|
||||||
<ClCompile Include="RasterMainWidget\gaodenormalprovider.cpp" />
|
<ClCompile Include="RasterMainWidget\gaodenormalprovider.cpp" />
|
||||||
<ClCompile Include="RasterMainWidget\imgwriter.cpp" />
|
<ClCompile Include="RasterMainWidget\imgwriter.cpp" />
|
||||||
|
@ -135,7 +136,9 @@
|
||||||
<QtUic Include="RasterMainWidget\taskwindow.ui" />
|
<QtUic Include="RasterMainWidget\taskwindow.ui" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ClInclude Include="PrintMessage_C.h" />
|
||||||
<ClInclude Include="RasterMainWidgetGUIAPI.h" />
|
<ClInclude Include="RasterMainWidgetGUIAPI.h" />
|
||||||
|
<ClInclude Include="RasterMainWidgetGUICFunAPI.h" />
|
||||||
<ClInclude Include="RasterMainWidget\crs.h" />
|
<ClInclude Include="RasterMainWidget\crs.h" />
|
||||||
<ClInclude Include="RasterMainWidget\gaodesatelliteprovider.h" />
|
<ClInclude Include="RasterMainWidget\gaodesatelliteprovider.h" />
|
||||||
<ClInclude Include="RasterMainWidget\googlechinanormalprovider.h" />
|
<ClInclude Include="RasterMainWidget\googlechinanormalprovider.h" />
|
||||||
|
|
|
@ -118,6 +118,9 @@
|
||||||
<ClCompile Include="RasterWidgetMessageShow.cpp">
|
<ClCompile Include="RasterWidgetMessageShow.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="PrintMessage_C.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="RasterMainWidget\crs.h">
|
<ClInclude Include="RasterMainWidget\crs.h">
|
||||||
|
@ -201,6 +204,12 @@
|
||||||
<ClInclude Include="RasterMainWidgetGUIAPI.h">
|
<ClInclude Include="RasterMainWidgetGUIAPI.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="PrintMessage_C.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="RasterMainWidgetGUICFunAPI.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<QtMoc Include="RasterMainWidget\gaodenormalprovider.h">
|
<QtMoc Include="RasterMainWidget\gaodenormalprovider.h">
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#pragma once
|
||||||
|
#ifndef RASTERMAINWIDGETGUICFUNAPI_H_
|
||||||
|
#define RASTERMAINWIDGETGUICFUNAPI_H_
|
||||||
|
|
||||||
|
#ifdef RASTERMAINWIDGETGUI_LIB
|
||||||
|
#define RASTERMAINWIDGETGUICFUNAPI_EXPORT __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define RASTERMAINWIDGETGUICFUNAPI_EXPORT __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,17 +1,44 @@
|
||||||
#include "LookTableComputerClass.h"
|
#include "LookTableComputerClass.h"
|
||||||
#include "SatelliteOribtModel.h"
|
#include "SatelliteOribtModel.h"
|
||||||
#include "SARSimulationTaskSetting.h"
|
#include "SARSimulationTaskSetting.h"
|
||||||
|
#include "ImageOperatorBase.h"
|
||||||
|
#include "FileOperator.h"
|
||||||
|
#include "BaseConstVariable.h"
|
||||||
|
#include "GPUTool.cuh"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// dingy
|
// dingy
|
||||||
|
|
||||||
|
|
||||||
namespace LookTableSimualtionMainProcessSpace {
|
namespace LookTableSimualtionMainProcessSpace {
|
||||||
void LookTableSimualtionMainProcess(QString orbitpath, QString SatePath, QString DEMPath, QString outDirPath,
|
void LookTableSimualtionMainProcess(
|
||||||
double gridX, double gridY, bool gpuflag, bool looktableflag, bool checkBoxIncAngle, bool BoxDopplerFlag)
|
QString sateName,
|
||||||
|
QString orbitpath, QString SatePath, QString DEMPath, QString outDirPath,
|
||||||
|
bool gpuflag,
|
||||||
|
bool looktableflag,
|
||||||
|
bool checkBoxIncAngle,
|
||||||
|
bool DopplerFlag)
|
||||||
{
|
{
|
||||||
|
if (!isExists(orbitpath)) {
|
||||||
|
qDebug() << "Orbit model file is not exist !!!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!isExists(SatePath)) {
|
||||||
|
qDebug() << "Satellite Model file is not exist !!!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!isExists(DEMPath)) {
|
||||||
|
qDebug() << "DEM file is not exist !!!";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 读取轨道模型
|
// 读取轨道模型
|
||||||
qDebug() << "load orbit model params from xml :" << orbitpath;
|
qDebug() << "load orbit model params from xml :" << orbitpath;
|
||||||
PolyfitSatelliteOribtModel orbitmodel;
|
PolyfitSatelliteOribtModel orbitmodel;
|
||||||
|
@ -19,12 +46,12 @@ namespace LookTableSimualtionMainProcessSpace {
|
||||||
|
|
||||||
// 轨道参数
|
// 轨道参数
|
||||||
long double OribtStartTime = orbitmodel.getOribtStartTime();
|
long double OribtStartTime = orbitmodel.getOribtStartTime();
|
||||||
std::vector<double> PolyfitPx = orbitmodel.getPolyfitPx();
|
std::vector<double> PolyfitPx = orbitmodel.getPolyfitPx();
|
||||||
std::vector<double> PolyfitPy = orbitmodel.getPolyfitPy();
|
std::vector<double> PolyfitPy = orbitmodel.getPolyfitPy();
|
||||||
std::vector<double> PolyfitPz = orbitmodel.getPolyfitPz();
|
std::vector<double> PolyfitPz = orbitmodel.getPolyfitPz();
|
||||||
std::vector<double> PolyfitVx = orbitmodel.getPolyfitVx();
|
std::vector<double> PolyfitVx = orbitmodel.getPolyfitVx();
|
||||||
std::vector<double> PolyfitVy = orbitmodel.getPolyfitVy();
|
std::vector<double> PolyfitVy = orbitmodel.getPolyfitVy();
|
||||||
std::vector<double> PolyfitVz = orbitmodel.getPolyfitVz();
|
std::vector<double> PolyfitVz = orbitmodel.getPolyfitVz();
|
||||||
|
|
||||||
|
|
||||||
// 参数模型
|
// 参数模型
|
||||||
|
@ -36,11 +63,248 @@ namespace LookTableSimualtionMainProcessSpace {
|
||||||
std::vector<double> DopplerCentroidCoefficients = SARSetting->getDopplerCentroidCoefficients();
|
std::vector<double> DopplerCentroidCoefficients = SARSetting->getDopplerCentroidCoefficients();
|
||||||
std::vector<double> DopplerRateValuesCoefficient = SARSetting->getDopplerRateValuesCoefficients();
|
std::vector<double> DopplerRateValuesCoefficient = SARSetting->getDopplerRateValuesCoefficients();
|
||||||
|
|
||||||
// ĘýžÝ´ŚŔí
|
// 仿真成像参数计算
|
||||||
|
double startTime = SARSetting->getSARImageStartTime();
|
||||||
|
double endTime = SARSetting->getSARImageStartTime();
|
||||||
|
|
||||||
|
double PRF = SARSetting->getPRF();
|
||||||
|
double Fs = SARSetting->getFs();
|
||||||
|
double nearRange = SARSetting->getNearRange();
|
||||||
|
double farRange = SARSetting->getFarRange();
|
||||||
|
double lamda = SARSetting->getCenterLamda();
|
||||||
|
// 输出结果处理
|
||||||
|
QString outLookTablePath = "";
|
||||||
|
QString outIncPath = "";
|
||||||
|
gdalImage demimg(DEMPath);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (looktableflag|| checkBoxIncAngle) {
|
||||||
|
outLookTablePath = JoinPath(outDirPath, sateName+"__looktable.bin");
|
||||||
|
|
||||||
|
|
||||||
|
LookTableSimulationDopplerProcess(
|
||||||
|
DEMPath, outLookTablePath,
|
||||||
|
OribtStartTime,
|
||||||
|
PolyfitPx, PolyfitPy, PolyfitPz,
|
||||||
|
PolyfitVx, PolyfitVy, PolyfitVz,
|
||||||
|
dopplerRefrenceTime,
|
||||||
|
DopplerCentroidCoefficients,
|
||||||
|
startTime,
|
||||||
|
endTime,
|
||||||
|
nearRange,
|
||||||
|
farRange,
|
||||||
|
PRF,
|
||||||
|
Fs,
|
||||||
|
lamda,
|
||||||
|
gpuflag,
|
||||||
|
looktableflag,
|
||||||
|
checkBoxIncAngle
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (checkBoxIncAngle) {
|
||||||
|
outIncPath = JoinPath(outDirPath, sateName + "__incAngle.bin");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LookTableSimulationDopplerProcess(
|
||||||
|
QString DEMPath,
|
||||||
|
QString outLookTablePath,
|
||||||
|
|
||||||
|
long double OribtStartTime,
|
||||||
|
std::vector<double> PolyfitPx,
|
||||||
|
std::vector<double> PolyfitPy,
|
||||||
|
std::vector<double> PolyfitPz,
|
||||||
|
std::vector<double> PolyfitVx,
|
||||||
|
std::vector<double> PolyfitVy,
|
||||||
|
std::vector<double> PolyfitVz,
|
||||||
|
double dopplerRefrenceTime,
|
||||||
|
std::vector<double>
|
||||||
|
DopplerCentroidCoefficients,
|
||||||
|
double starttime,
|
||||||
|
double endtime,
|
||||||
|
double nearRange,
|
||||||
|
double farRange,
|
||||||
|
double PRF,
|
||||||
|
double Fs,
|
||||||
|
double lamda,
|
||||||
|
bool gpuflag,
|
||||||
|
bool looktableflag,
|
||||||
|
bool incflag
|
||||||
|
)
|
||||||
|
{
|
||||||
|
qDebug() << "generate look table ";
|
||||||
|
qDebug() << "DEMPath\t" << DEMPath;
|
||||||
|
qDebug() << "outLookTablePath\t" << outLookTablePath;
|
||||||
|
|
||||||
|
|
||||||
|
gdalImage demimg(DEMPath);
|
||||||
|
gdalImage outLookTable = CreategdalImage( // 创建查找表
|
||||||
|
outLookTablePath,
|
||||||
|
demimg.height, demimg.width, 2,
|
||||||
|
demimg.gt,
|
||||||
|
demimg.projection,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
starttime = starttime - OribtStartTime; // 处理坐标时间
|
||||||
|
endtime = endtime - OribtStartTime;
|
||||||
|
|
||||||
|
// 轨道模型
|
||||||
|
double Xp0=0,Yp0=0,Zp0=0,Xv0=0,Yv0=0,Zv0=0;
|
||||||
|
double Xp1=0,Yp1=0,Zp1=0,Xv1=0,Yv1=0,Zv1=0;
|
||||||
|
double Xp2=0,Yp2=0,Zp2=0,Xv2=0,Yv2=0,Zv2=0;
|
||||||
|
double Xp3=0,Yp3=0,Zp3=0,Xv3=0,Yv3=0,Zv3=0;
|
||||||
|
double Xp4=0,Yp4=0,Zp4=0,Xv4=0,Yv4=0,Zv4=0;
|
||||||
|
double Xp5=0,Yp5=0,Zp5=0,Xv5=0,Yv5=0,Zv5=0;
|
||||||
|
int degree = PolyfitPx.size();
|
||||||
|
switch (degree){
|
||||||
|
case(6):
|
||||||
|
Xp5 = PolyfitPx[5];
|
||||||
|
Yp5 = PolyfitPy[5];
|
||||||
|
Zp5 = PolyfitPz[5];
|
||||||
|
Xv5 = PolyfitVx[5];
|
||||||
|
Yv5 = PolyfitVy[5];
|
||||||
|
Zv5 = PolyfitVz[5];
|
||||||
|
case(5):
|
||||||
|
Xp4 = PolyfitPx[4];
|
||||||
|
Yp4 = PolyfitPy[4];
|
||||||
|
Zp4 = PolyfitPz[4];
|
||||||
|
Xv4 = PolyfitVx[4];
|
||||||
|
Yv4 = PolyfitVy[4];
|
||||||
|
Zv4 = PolyfitVz[4];
|
||||||
|
case(4):
|
||||||
|
Xp3 = PolyfitPx[3];
|
||||||
|
Yp3 = PolyfitPy[3];
|
||||||
|
Zp3 = PolyfitPz[3];
|
||||||
|
Xv3 = PolyfitVx[3];
|
||||||
|
Yv3 = PolyfitVy[3];
|
||||||
|
Zv3 = PolyfitVz[3];
|
||||||
|
case(3):
|
||||||
|
Xp2 = PolyfitPx[2];
|
||||||
|
Yp2 = PolyfitPy[2];
|
||||||
|
Zp2 = PolyfitPz[2];
|
||||||
|
Xv2 = PolyfitVx[2];
|
||||||
|
Yv2 = PolyfitVy[2];
|
||||||
|
Zv2 = PolyfitVz[2];
|
||||||
|
case(2):
|
||||||
|
Xp1 = PolyfitPx[1];
|
||||||
|
Yp1 = PolyfitPy[1];
|
||||||
|
Zp1 = PolyfitPz[1];
|
||||||
|
Xv1 = PolyfitVx[1];
|
||||||
|
Yv1 = PolyfitVy[1];
|
||||||
|
Zv1 = PolyfitVz[1];
|
||||||
|
case(1):
|
||||||
|
Xp0 = PolyfitPx[0];
|
||||||
|
Yp0 = PolyfitPy[0];
|
||||||
|
Zp0 = PolyfitPz[0];
|
||||||
|
Xv0 = PolyfitVx[0];
|
||||||
|
Yv0 = PolyfitVy[0];
|
||||||
|
Zv0 = PolyfitVz[0];
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 多普勒参数
|
||||||
|
double r0 = 0, r1 = 0, r2 = 0, r3 = 0, r4 = 0;
|
||||||
|
degree = DopplerCentroidCoefficients.size();
|
||||||
|
switch (degree)
|
||||||
|
{
|
||||||
|
case(5):
|
||||||
|
r4 = DopplerCentroidCoefficients[4];
|
||||||
|
case(4):
|
||||||
|
r3 = DopplerCentroidCoefficients[3];
|
||||||
|
case(3):
|
||||||
|
r2 = DopplerCentroidCoefficients[2];
|
||||||
|
case(2):
|
||||||
|
r1 = DopplerCentroidCoefficients[1];
|
||||||
|
case(1):
|
||||||
|
r0 = DopplerCentroidCoefficients[0];
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理分块
|
||||||
|
long GPUMemoryline = floor((Memory1MB * 2.0 / 8.0/3.0 / demimg.width*1000));//2GB
|
||||||
|
GPUMemoryline = GPUMemoryline < 1 ? 1 : GPUMemoryline;
|
||||||
|
|
||||||
|
// 内存预分配
|
||||||
|
|
||||||
|
//
|
||||||
|
std::shared_ptr<float> host_Rid((float*)mallocCUDAHost(sizeof(float) * GPUMemoryline * demimg.width), FreeCUDAHost);
|
||||||
|
std::shared_ptr<float> host_Cid((float*)mallocCUDAHost(sizeof(float) * GPUMemoryline * demimg.width), FreeCUDAHost);
|
||||||
|
|
||||||
|
std::shared_ptr<float> device_Rid((float*)mallocCUDADevice(sizeof(float) * GPUMemoryline * demimg.width), FreeCUDADevice);
|
||||||
|
std::shared_ptr<float> device_Cid((float*)mallocCUDADevice(sizeof(float) * GPUMemoryline * demimg.width), FreeCUDADevice);
|
||||||
|
|
||||||
|
//
|
||||||
|
std::shared_ptr<double> host_demX((double*)mallocCUDAHost(sizeof(double) * GPUMemoryline * demimg.width), FreeCUDAHost);
|
||||||
|
std::shared_ptr<double> host_demY((double*)mallocCUDAHost(sizeof(double) * GPUMemoryline * demimg.width), FreeCUDAHost);
|
||||||
|
std::shared_ptr<double> host_demZ((double*)mallocCUDAHost(sizeof(double) * GPUMemoryline * demimg.width), FreeCUDAHost);
|
||||||
|
|
||||||
|
std::shared_ptr<double> device_demX((double*)mallocCUDADevice(sizeof(double) * GPUMemoryline * demimg.width), FreeCUDADevice);
|
||||||
|
std::shared_ptr<double> device_demY((double*)mallocCUDADevice(sizeof(double) * GPUMemoryline * demimg.width), FreeCUDADevice);
|
||||||
|
std::shared_ptr<double> device_demZ((double*)mallocCUDADevice(sizeof(double) * GPUMemoryline * demimg.width), FreeCUDADevice);
|
||||||
|
|
||||||
|
|
||||||
|
// 处理复制结果
|
||||||
|
|
||||||
|
int rowcount = 0;
|
||||||
|
int colcount = 0;
|
||||||
|
for (long rid = 0; rid < demimg.height; rid = rid + GPUMemoryline) {
|
||||||
|
rowcount = GPUMemoryline;
|
||||||
|
colcount = demimg.width;
|
||||||
|
std::shared_ptr<double> demX = readDataArr<double>(demimg, rid, 0, rowcount, colcount, 1,GDALREADARRCOPYMETHOD::MEMCPYMETHOD);// 行列数修改
|
||||||
|
std::shared_ptr<double> demY = readDataArr<double>(demimg, rid, 0, rowcount, colcount, 2,GDALREADARRCOPYMETHOD::MEMCPYMETHOD);
|
||||||
|
std::shared_ptr<double> demZ = readDataArr<double>(demimg, rid, 0, rowcount, colcount, 3,GDALREADARRCOPYMETHOD::MEMCPYMETHOD);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 数据复制
|
||||||
|
memcpy(host_demX.get(), demX.get(), sizeof(double)* rowcount* colcount);
|
||||||
|
memcpy(host_demY.get(), demY.get(), sizeof(double)* rowcount* colcount);
|
||||||
|
memcpy(host_demZ.get(), demZ.get(), sizeof(double)* rowcount* colcount);
|
||||||
|
|
||||||
|
//内存->GPU
|
||||||
|
HostToDevice(host_demX.get(), device_demX.get(), sizeof(double)* GPUMemoryline* demimg.width);
|
||||||
|
HostToDevice(host_demY.get(), device_demY.get(), sizeof(double)* GPUMemoryline* demimg.width);
|
||||||
|
HostToDevice(host_demZ.get(), device_demZ.get(), sizeof(double)* GPUMemoryline* demimg.width);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// GPU -> 内存
|
||||||
|
DeviceToHost(host_Rid.get(), device_Rid.get(), sizeof(float)* GPUMemoryline* demimg.width);
|
||||||
|
DeviceToHost(host_Cid.get(), device_Cid.get(), sizeof(float)* GPUMemoryline* demimg.width);
|
||||||
|
|
||||||
|
// 数据存储
|
||||||
|
outLookTable.saveImage(host_Rid, rid, 0, rowcount, colcount,1);
|
||||||
|
outLookTable.saveImage(host_Cid, rid, 0, rowcount, colcount,2);
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "look table computed finished!!!";
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalIncidenceAngleSimulationCompter(QString DEMPath, QString LookTablePath, QString outIncPath, long double OribtStartTime, std::vector<double> PolyfitPx, std::vector<double> PolyfitPy, std::vector<double> PolyfitPz, std::vector<double> PolyfitVx, std::vector<double> PolyfitVy, std::vector<double> PolyfitVz, double starttime, double endtime, double nearRange, double farRange, double PRF, double Fs)
|
||||||
|
{
|
||||||
|
//gdalImage outInc = CreategdalImageDouble(
|
||||||
|
// outIncPath,
|
||||||
|
// demimg.height, demimg.width, 1,
|
||||||
|
// demimg.gt,
|
||||||
|
// demimg.projection,
|
||||||
|
// true,
|
||||||
|
// true,
|
||||||
|
// true
|
||||||
|
//);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,9 +21,66 @@
|
||||||
|
|
||||||
|
|
||||||
namespace LookTableSimualtionMainProcessSpace {
|
namespace LookTableSimualtionMainProcessSpace {
|
||||||
void LookTableSimualtionMainProcess(QString orbitpath, QString SatePath, QString DEMPath, QString outDirPath
|
void LookTableSimualtionMainProcess(
|
||||||
, double gridX, double gridY, bool gpuflag, bool looktableflag, bool checkBoxIncAngle, bool BoxDopplerFlag
|
QString sateName,
|
||||||
|
QString orbitpath, QString SatePath, QString DEMPath, QString outDirPath
|
||||||
|
, bool gpuflag, bool looktableflag, bool checkBoxIncAngle, bool DopplerFlag
|
||||||
|
);
|
||||||
|
|
||||||
|
void LookTableSimulationDopplerProcess(
|
||||||
|
QString DEMPath,
|
||||||
|
QString outLookTablePath,
|
||||||
|
|
||||||
|
// 多项式轨道参数
|
||||||
|
long double OribtStartTime, // 轨道模型参考时间
|
||||||
|
std::vector<double> PolyfitPx , // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitPy , // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitPz , // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitVx , // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitVy , // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitVz , // 5次项,空余填0
|
||||||
|
|
||||||
|
|
||||||
|
// 多普勒参数
|
||||||
|
double dopplerRefrenceTime,
|
||||||
|
std::vector<double> DopplerCentroidCoefficients,// d0 ~ d5, 空余填零
|
||||||
|
|
||||||
|
// 其他成像参数
|
||||||
|
double starttime, // 成像开始时间
|
||||||
|
double endtime, // 成像结束时间
|
||||||
|
double nearRange, // 近斜距
|
||||||
|
double farRange, // 远斜距
|
||||||
|
double PRF, // 脉冲重复采样频率
|
||||||
|
double Fs, // 距离采样频率
|
||||||
|
double lamda,
|
||||||
|
bool gpuflag,
|
||||||
|
bool looktableflag,
|
||||||
|
bool incflag
|
||||||
|
);
|
||||||
|
|
||||||
|
void LocalIncidenceAngleSimulationCompter(
|
||||||
|
QString DEMPath,
|
||||||
|
QString LookTablePath,
|
||||||
|
QString outIncPath,
|
||||||
|
long double OribtStartTime, // 轨道模型参考时间
|
||||||
|
std::vector<double> PolyfitPx, // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitPy, // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitPz, // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitVx, // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitVy, // 5次项,空余填0
|
||||||
|
std::vector<double> PolyfitVz, // 5次项,空余填0
|
||||||
|
|
||||||
|
|
||||||
|
double starttime, // 成像开始时间
|
||||||
|
double endtime, // 成像结束时间
|
||||||
|
double nearRange, // 近斜距
|
||||||
|
double farRange, // 远斜距
|
||||||
|
double PRF, // 脉冲重复采样频率
|
||||||
|
double Fs // 距离采样频率
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include <time.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
#include <cmath>
|
||||||
|
#include <complex>
|
||||||
|
#include <device_launch_parameters.h>
|
||||||
|
#include <cuda_runtime.h>
|
||||||
|
#include <cublas_v2.h>
|
||||||
|
#include <cuComplex.h>
|
||||||
|
|
||||||
|
#include "BaseConstVariable.h"
|
||||||
|
|
||||||
|
#include "LookTableSimulationComputer.cuh"
|
||||||
|
|
||||||
|
|
||||||
|
extern __device__ __host__ double getNumberDopplerCenterRate(double R, double r0, double r1, double r2, double r3, double r4, double reftime)
|
||||||
|
{
|
||||||
|
double t=R / LIGHTSPEED - reftime;
|
||||||
|
double dopplerCenterRate = r0 + r1*t + r2*t*t + r3*t*t*t + r4*t*t*t*t;
|
||||||
|
return dopplerCenterRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
__device__ __host__ double getDopplerCenterRate(double Rx, double Ry, double Rz, double Vx, double Vy, double Vz, double lamda)
|
||||||
|
{
|
||||||
|
return __device__ __host__ double();
|
||||||
|
}
|
||||||
|
|
||||||
|
__device__ __host__ double getPolyfitNumber(double x, double a0, double a1, double a2, double a3, double a4, double a5)
|
||||||
|
{
|
||||||
|
return a0 + a1 * x + a2 * x * x + a3 * x * x * x + a4 * x * x * x * x + a5 * x * x * x * x * x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include "GPUTool.cuh"
|
||||||
|
#include <cuda_runtime.h>
|
||||||
|
#include <device_launch_parameters.h>
|
||||||
|
#include <cublas_v2.h>
|
||||||
|
#include "BaseConstVariable.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern __device__ __host__ double getNumberDopplerCenterRate(double R, double r0, double r1, double r2, double r3, double r4,double reftime);
|
||||||
|
|
||||||
|
extern __device__ __host__ double getDopplerCenterRate(double Rx,double Ry,double Rz,double Vx,double Vy,double Vz,double lamda);
|
||||||
|
|
||||||
|
extern __device__ __host__ double getPolyfitNumber(double x, double a0, double a1, double a2, double a3, double a4,double a5);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
extern "C" void RDProcess_doppler(
|
||||||
|
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -90,17 +90,18 @@ void QSimulationLookTableDialog::onaccepted()
|
||||||
QString DEMPath = this->ui->DEMLineEdit->text();
|
QString DEMPath = this->ui->DEMLineEdit->text();
|
||||||
QString outDirPath = this->ui->outDirLineEdit->text();
|
QString outDirPath = this->ui->outDirLineEdit->text();
|
||||||
|
|
||||||
double gridX = this->ui->doubleSpinBoxGridX->value();
|
//double gridX = this->ui->doubleSpinBoxGridX->value();
|
||||||
double gridY = this->ui->doubleSpinBoxGridY->value();
|
//double gridY = this->ui->doubleSpinBoxGridY->value();
|
||||||
|
|
||||||
bool gpuflag = this->ui->radioButtonGPU->isChecked();
|
bool gpuflag = this->ui->radioButtonGPU->isChecked();
|
||||||
bool looktableflag = this->ui->LookTableCheck->isChecked();
|
bool looktableflag = this->ui->LookTableCheck->isChecked();
|
||||||
bool checkBoxIncAngle = this->ui->checkBoxIncAngle->isChecked();
|
bool checkBoxIncAngle = this->ui->checkBoxIncAngle->isChecked();
|
||||||
bool BoxDopplerFlag = this->ui->checkBoxDoppler->isChecked();
|
bool BoxDopplerFlag = this->ui->checkBoxDoppler->isChecked();
|
||||||
|
QString simulationName = this->ui->lineEditLookName->text();
|
||||||
LookTableSimualtionMainProcessSpace::LookTableSimualtionMainProcess(
|
LookTableSimualtionMainProcessSpace::LookTableSimualtionMainProcess(
|
||||||
orbitpath, SatePath, DEMPath, outDirPath
|
simulationName,
|
||||||
, gridX, gridY, gpuflag, looktableflag, checkBoxIncAngle, BoxDopplerFlag
|
orbitpath, SatePath, DEMPath, outDirPath,
|
||||||
|
gpuflag, looktableflag, checkBoxIncAngle, BoxDopplerFlag
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>DEM文件</string>
|
<string>DEM文件(XYZ)</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="5" column="1">
|
||||||
<widget class="QLineEdit" name="outDirLineEdit">
|
<widget class="QLineEdit" name="outDirLineEdit">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="1">
|
<item row="8" column="1">
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
|
@ -102,6 +102,16 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QCheckBox" name="checkBoxDoppler">
|
||||||
|
<property name="text">
|
||||||
|
<string>采用多普勒参数</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QLineEdit" name="SateSettingLineEdit">
|
<widget class="QLineEdit" name="SateSettingLineEdit">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
|
@ -141,7 +151,7 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="2">
|
<item row="5" column="2">
|
||||||
<widget class="QPushButton" name="pushButtonOutDir">
|
<widget class="QPushButton" name="pushButtonOutDir">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -154,7 +164,7 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0" rowspan="2">
|
<item row="6" column="0" rowspan="2">
|
||||||
<widget class="QGroupBox" name="groupBox_3">
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>计算资源</string>
|
<string>计算资源</string>
|
||||||
|
@ -171,6 +181,9 @@
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>GPU</string>
|
<string>GPU</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -189,7 +202,7 @@
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0">
|
<item row="8" column="0">
|
||||||
<spacer name="verticalSpacer_2">
|
<spacer name="verticalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
|
@ -215,7 +228,7 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="1">
|
<item row="7" column="1">
|
||||||
<widget class="QGroupBox" name="groupBox_2">
|
<widget class="QGroupBox" name="groupBox_2">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>产品输出类型</string>
|
<string>产品输出类型</string>
|
||||||
|
@ -232,6 +245,9 @@
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>查找表</string>
|
<string>查找表</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -245,19 +261,22 @@
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>局地入射角</string>
|
<string>局地入射角</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0" colspan="3">
|
<item row="9" column="0" colspan="3">
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
<property name="standardButtons">
|
<property name="standardButtons">
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="label_9">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -270,13 +289,29 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="4" column="0">
|
||||||
<widget class="QCheckBox" name="checkBoxDoppler">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="minimumSize">
|
||||||
<string>采用多普勒参数</string>
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="checked">
|
<property name="text">
|
||||||
<bool>true</bool>
|
<string>查找表名</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLineEdit" name="lineEditLookName">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -127,6 +127,7 @@
|
||||||
<ClCompile Include="SimulationSAR\TBPImageAlgCls.cpp" />
|
<ClCompile Include="SimulationSAR\TBPImageAlgCls.cpp" />
|
||||||
<QtMoc Include="PowerSimulationIncoherent\QSimulationSARPolynomialOrbitModel.h" />
|
<QtMoc Include="PowerSimulationIncoherent\QSimulationSARPolynomialOrbitModel.h" />
|
||||||
<ClInclude Include="PowerSimulationIncoherent\LookTableComputerClass.h" />
|
<ClInclude Include="PowerSimulationIncoherent\LookTableComputerClass.h" />
|
||||||
|
<CudaCompile Include="PowerSimulationIncoherent\LookTableSimulationComputer.cuh" />
|
||||||
<ClInclude Include="PowerSimulationIncoherent\OribtModelOperator.h" />
|
<ClInclude Include="PowerSimulationIncoherent\OribtModelOperator.h" />
|
||||||
<QtMoc Include="PowerSimulationIncoherent\QSimulationLookTableDialog.h" />
|
<QtMoc Include="PowerSimulationIncoherent\QSimulationLookTableDialog.h" />
|
||||||
<ClInclude Include="SimulationSARToolAPI.h" />
|
<ClInclude Include="SimulationSARToolAPI.h" />
|
||||||
|
@ -145,6 +146,7 @@
|
||||||
<ClCompile Include="SimulationSARTool.cpp" />
|
<ClCompile Include="SimulationSARTool.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<CudaCompile Include="PowerSimulationIncoherent\LookTableSimulationComputer.cu" />
|
||||||
<CudaCompile Include="SimulationSAR\GPURFPC.cu">
|
<CudaCompile Include="SimulationSAR\GPURFPC.cu">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
</CudaCompile>
|
</CudaCompile>
|
||||||
|
|
|
@ -163,5 +163,11 @@
|
||||||
<CudaCompile Include="SimulationSAR\GPUTBPImage.cuh">
|
<CudaCompile Include="SimulationSAR\GPUTBPImage.cuh">
|
||||||
<Filter>SimulationSAR</Filter>
|
<Filter>SimulationSAR</Filter>
|
||||||
</CudaCompile>
|
</CudaCompile>
|
||||||
|
<CudaCompile Include="PowerSimulationIncoherent\LookTableSimulationComputer.cu">
|
||||||
|
<Filter>PowerSimulationIncoherent</Filter>
|
||||||
|
</CudaCompile>
|
||||||
|
<CudaCompile Include="PowerSimulationIncoherent\LookTableSimulationComputer.cuh">
|
||||||
|
<Filter>PowerSimulationIncoherent</Filter>
|
||||||
|
</CudaCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in New Issue