API GDAL C ++ не может прочитать набор растровых данных больше 2G - PullRequest
0 голосов
/ 11 января 2020

Я следую учебному пособию на официальных сайтах GDAL, чтобы прочитать растр в память, но у меня появилась такая ошибка:

ERROR 6: Unhandled type for StripOffset/StripByteCount
ERROR 1: /*.tif, band 1: IReadBlock failed at X offset 0, Y offset 0: Unhandled type for StripOffset/StripByteCount

Вот пример, который я использую:

#include <iostream>  
#include <gdal_priv.h>
#include <cpl_conv.h>

using namespace std;

int main()
{
    const char* pszFile;
    GDALAllRegister();
    pszFile = "/*.tif";
    GDALDataset* poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);
    GDALRasterBand* poBand = poDataset->GetRasterBand(1);
    float* pafScanline;
    int nXSize = poBand->GetXSize();
    pafScanline = (float*)CPLMalloc(sizeof(float) * nXSize);
    poBand->RasterIO(GF_Read, 0, 0, nXSize, 1,
        pafScanline, nXSize, 1, GDT_Float32,
        0, 0);
    system("pause");
    return 0;
}

Я заменяю tif-файл на samllaer JPG-файл, все работает нормально, затем я использую Python API для чтения того же tif-файла, все тоже отлично работает, включая чтение этого большого растра, я ищу по inte rnet Выясните, что у некоторых людей есть такая же проблема, он рассказал, что не может прочитать растр больше 2G, но ему удается это обработать, преобразовав файл tif в файл img, и все работает прямо сейчас. Я хочу знать глубинную причину, по которой это происходит. Используемый мной Python API - это GDAL 2.4.1, а C ++ API - это GDAL 3.0.2. Это из-за версии gdal, которая вызывает эту проблему?

...