Использование GDAL для чтения растра создает массив неверных значений - PullRequest
0 голосов
/ 04 декабря 2018

Я использую привязки c # GDAL в попытках прочитать растровые значения и выполнить довольно простые вычисления.Таким образом, я хотел бы получить среднее значение и затем получить сумму значений ниже среднего и сумму значений выше среднего.Кажется, все работает нормально, за исключением случаев, когда я пытаюсь прочитать растр в буфер.В результате получается массив, в котором каждое значение равно -3.402823E+38

. Данные представляют собой данные с плавающей запятой, и я хочу сохранить этот путь для моих расчетов.Код выглядит следующим образом.

class Program
{
    static void Main(string[] args)
    {
        Gdal.AllRegister();
        Ogr.RegisterAll();

        Dataset dataset = Gdal.Open(@"xxxxxxxxxxx.tif", Access.GA_ReadOnly);
        Band band = dataset.GetRasterBand(1);
        int width = band.XSize;
        int height = band.YSize;
        int size = width * height;
        double min = 0.00;
        double max = 0.00;
        double mean = 0.00;
        double stddev = 0.00;

        var stats = band.GetStatistics(1, 0, out min, out max, out mean, out stddev);

        //Console.WriteLine($"Statistics retrieved and returned a result of {stats}");
        Console.WriteLine($"X : {width} Y : {height} SIZE: {size}");
        Console.WriteLine($"MIN : {min} MAX : {max} MEAN : {mean} STDDEV : {stddev}");
        DataType type = band.DataType;
        Console.WriteLine($"Data Type : {type}");

        float gtMean = 0; //cut
        float ltMean = 0; //fill

        float[] data = new float[size];
        var dataArr = band.ReadRaster(0, 0, width, height, data, width, height, 0, 0);

        int i, j;
        for (i = 0; i < width; i++)
        {
            for (j = 0; j < height; j++)
            {
                float value = data[i + j * width];
                if (value > (float)mean)
                {
                    gtMean += value;
                }

                if (value < (float)mean)
                {
                    ltMean += value;
                }
            }
        }


        Console.WriteLine($"Sum of values above the mean {gtMean}");
        Console.WriteLine($"Sum of values below the mean {ltMean}");

        double pixelArea = 0.10763911106;

        Console.WriteLine("Press Any Key To Exit....");
        Console.ReadLine();
    }
}

enter image description here

...