Ejemplo n.º 1
0
        private static Dataset GetOutputDataset <T>(Dataset gdalDataset, Driver gdalDriver, Driver targetDatasetDriver, IRegularGridCoverage gridCoverage, int rasterBandIndex, RasterBoundaries rasterBoundaries, T[] values)
        {
            Dataset outputDataset = gdalDataset;

            if (targetDatasetDriver.ShortName == "PCRaster")
            {
                // Convert the in mem dataset to a pc rasterBoundaries compatible one...

                Type valueType = gridCoverage.Components[0].ValueType;

                DataType dataType =
                    GdalHelper.GetGdalDataType(targetDatasetDriver, valueType);

                outputDataset = gdalDriver.Create(gridCoverage.Name, gdalDataset.RasterXSize,
                                                  gdalDataset.RasterYSize,
                                                  gridCoverage.Components.Count, dataType, new string[] { });

                GdalHelper.SetValuesForBand(outputDataset, rasterBandIndex, rasterBoundaries.StartX, rasterBoundaries.StartY, rasterBoundaries.WidthX, rasterBoundaries.WidthY, values);
            }
            return(outputDataset);
        }
Ejemplo n.º 2
0
        private void SetGdalValues <T>(int componentIndex, T[] values, params IVariableFilter[] variableFilters)
        {
            var rasterBoundaries = GetRasterBoundaries(variableFilters);

            var rasterBandIndex = componentIndex + 1; //1 based index

            GdalHelper.SetValuesForBand(gdalDataset, rasterBandIndex, rasterBoundaries.StartX, rasterBoundaries.StartY, rasterBoundaries.WidthX, rasterBoundaries.WidthY, values);
            gdalDataset.FlushCache();

            //update dataset on filesystem by copying in-memory dataset
            var inMemoryDriver = gdalDataset.GetDriver();

            if (!GdalHelper.IsInMemoryDriver(inMemoryDriver))
            {
                return;
            }
            Driver  targetDatasetDriver = GetTargetDatasetDriver(path);
            Dataset outputDataset       = GetOutputDataset(gdalDataset, inMemoryDriver, targetDatasetDriver, Functions.OfType <IRegularGridCoverage>().FirstOrDefault(), rasterBandIndex, rasterBoundaries, values);

            WriteGdalDatasetToFile(path, outputDataset);
        }