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); }
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); }