private RasterBoundaries GetRasterBoundaries(IEnumerable <IVariableFilter> variableFilters) { RasterBoundaries rasterBoundaries = new RasterBoundaries { WidthX = Grid.SizeX, WidthY = Grid.SizeY }; foreach (var filter in variableFilters) { var variableValueFilter = filter as IVariableValueFilter; if (variableValueFilter != null) { if (filter.Variable == Grid.X) { rasterBoundaries.StartX = Grid.X.Values.IndexOf(variableValueFilter.Values[0]); rasterBoundaries.WidthX = 1; } if (filter.Variable == Grid.Y) { rasterBoundaries.StartY = Grid.Y.Values.IndexOf(variableValueFilter.Values[0]); rasterBoundaries.WidthY = 1; } } var variableIndexRangeFilter = filter as VariableIndexRangeFilter; if (variableIndexRangeFilter != null) { if (filter.Variable == Grid.X) { rasterBoundaries.StartX = variableIndexRangeFilter.MinIndex; rasterBoundaries.WidthX = 1 + variableIndexRangeFilter.MaxIndex - variableIndexRangeFilter.MinIndex; } if (filter.Variable == Grid.Y) { rasterBoundaries.StartY = variableIndexRangeFilter.MinIndex; rasterBoundaries.WidthY = 1 + variableIndexRangeFilter.MaxIndex - variableIndexRangeFilter.MinIndex; } } } return(rasterBoundaries); }
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); }