增加正射相关的代码,补充了批量读取代码
parent
490433aea7
commit
19d16be069
|
@ -259,7 +259,162 @@ ErrorCode MergeRasterProcess(QVector<QString> filepath, QString outfileptah, QSt
|
||||||
ErrorCode MergeRasterInGeoCoding(QVector<gdalImage> inimgs, gdalImage resultimg,gdalImage maskimg, ShowProessAbstract* dia = nullptr);
|
ErrorCode MergeRasterInGeoCoding(QVector<gdalImage> inimgs, gdalImage resultimg,gdalImage maskimg, ShowProessAbstract* dia = nullptr);
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
std::shared_ptr<T> readDataArr(gdalImage &img,int start_row, int start_col, int rows_count, int cols_count, int band_ids, GDALREADARRCOPYMETHOD method);
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
omp_lock_t lock;
|
||||||
|
omp_init_lock(&lock);
|
||||||
|
omp_set_lock(&lock);
|
||||||
|
GDALAllRegister();
|
||||||
|
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
|
||||||
|
GDALDataset* rasterDataset = (GDALDataset*)(GDALOpen(imgds.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 <= imgds.height ? rows_count : imgds.height - start_row;
|
||||||
|
cols_count = start_col + cols_count <= imgds.width ? cols_count : imgds.width - start_col;
|
||||||
|
|
||||||
|
Eigen::MatrixXd 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);
|
||||||
|
result = std::shared_ptr<T>(new T[rows_count * cols_count], delArrPtr);
|
||||||
|
if (method == GDALREADARRCOPYMETHOD::MEMCPYMETHOD) {
|
||||||
|
std::memcpy(result.get(), temp, rows_count * cols_count);
|
||||||
|
}
|
||||||
|
else if (method == GDALREADARRCOPYMETHOD::VARIABLEMETHOD) {
|
||||||
|
long count = rows_count * cols_count;
|
||||||
|
for (long i = 0; i < count; i++) {
|
||||||
|
result.get()[i] = T(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
result = std::shared_ptr<T>(new T[rows_count * cols_count], delArrPtr);
|
||||||
|
if (method == GDALREADARRCOPYMETHOD::MEMCPYMETHOD) {
|
||||||
|
std::memcpy(result.get(), temp, rows_count * cols_count);
|
||||||
|
}
|
||||||
|
else if (method == GDALREADARRCOPYMETHOD::VARIABLEMETHOD) {
|
||||||
|
long count = rows_count * cols_count;
|
||||||
|
for (long i = 0; i < count; i++) {
|
||||||
|
result.get()[i] = T(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
result = std::shared_ptr<T>(new T[rows_count * cols_count], delArrPtr);
|
||||||
|
if (method == GDALREADARRCOPYMETHOD::MEMCPYMETHOD) {
|
||||||
|
std::memcpy(result.get(), temp, rows_count * cols_count);
|
||||||
|
}
|
||||||
|
else if (method == GDALREADARRCOPYMETHOD::VARIABLEMETHOD) {
|
||||||
|
long count = rows_count * cols_count;
|
||||||
|
for (long i = 0; i < count; i++) {
|
||||||
|
result.get()[i] = T(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
result = std::shared_ptr<T>(new T[rows_count * cols_count], delArrPtr);
|
||||||
|
if (method == GDALREADARRCOPYMETHOD::MEMCPYMETHOD) {
|
||||||
|
std::memcpy(result.get(), temp, rows_count * cols_count);
|
||||||
|
}
|
||||||
|
else if (method == GDALREADARRCOPYMETHOD::VARIABLEMETHOD) {
|
||||||
|
long count = rows_count * cols_count;
|
||||||
|
for (long i = 0; i < count; i++) {
|
||||||
|
result.get()[i] = T(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
result = std::shared_ptr<T>(new T[rows_count * cols_count], delArrPtr);
|
||||||
|
if (method == GDALREADARRCOPYMETHOD::MEMCPYMETHOD) {
|
||||||
|
std::memcpy(result.get(), temp, rows_count * cols_count);
|
||||||
|
}
|
||||||
|
else if (method == GDALREADARRCOPYMETHOD::VARIABLEMETHOD) {
|
||||||
|
long count = rows_count * cols_count;
|
||||||
|
for (long i = 0; i < count; i++) {
|
||||||
|
result.get()[i] = T(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
|
||||||
|
result = std::shared_ptr<T>(new T[rows_count * cols_count], delArrPtr);
|
||||||
|
if (method == GDALREADARRCOPYMETHOD::MEMCPYMETHOD) {
|
||||||
|
std::memcpy(result.get(), temp, rows_count * cols_count);
|
||||||
|
}
|
||||||
|
else if (method == GDALREADARRCOPYMETHOD::VARIABLEMETHOD) {
|
||||||
|
long count = rows_count * cols_count;
|
||||||
|
for (long i = 0; i < count; i++) {
|
||||||
|
result.get()[i] = T(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
|
||||||
|
result = std::shared_ptr<T>(new T[rows_count * cols_count], delArrPtr);
|
||||||
|
if (method == GDALREADARRCOPYMETHOD::MEMCPYMETHOD) {
|
||||||
|
std::memcpy(result.get(), temp, rows_count * cols_count);
|
||||||
|
}
|
||||||
|
else if (method == GDALREADARRCOPYMETHOD::VARIABLEMETHOD) {
|
||||||
|
long count = rows_count * cols_count;
|
||||||
|
for (long i = 0; i < count; i++) {
|
||||||
|
result.get()[i] = T(temp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] temp;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
GDALClose((GDALDatasetH)rasterDataset);
|
||||||
|
omp_unset_lock(&lock); // 锟酵放伙拷斤拷
|
||||||
|
omp_destroy_lock(&lock); // 劫伙拷斤拷
|
||||||
|
// GDALDestroy(); // or, DllMain at DLL_PROCESS_DETACH
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue