示例#1
0
        private void FillBitmap <T>(Bitmap bitmap, BitmapData bitmapData, Dataset dataset, int xOff, int yOff, int width, int height,
                                    int imageWidth, int imageHeight, int targetPixelSpace, int lineSpace, string legendFilename)
        {
            T[] values = GdalHelper.GetValuesForBand <T>(dataset, 1, xOff, yOff, width, height, imageWidth, imageHeight);

            var gdalRasterLayer = layer as GdalRasterLayer;

            if (gdalRasterLayer == null)
            {
                throw new Exception("Trying to draw a GdalRasterLayer, while we got another type of layer!");
            }

            FillBitmapPixels <T>(values, bitmapData, targetPixelSpace, imageWidth, imageHeight);
        }
示例#2
0
        private IMultiDimensionalArray <T> GetGdalValues <T>(int componentIndex, params IVariableFilter[] variableFilters) where T : IComparable
        {
            bool scale = false;
            int  startX = 0, startY = 0, widthX = Grid.SizeX, widthY = Grid.SizeY;
            int  rasterBandIndex = componentIndex + 1; //1 based index

            var sizeX = Grid.SizeX;
            var sizeY = Grid.SizeY;

            if (variableFilters.Length > 0)
            {
                foreach (IVariableFilter filter in variableFilters)
                {
                    if (filter is VariableAggregationFilter)
                    {
                        var sampleFilter = filter as VariableAggregationFilter;
                        if (sampleFilter.Variable == Grid.X)
                        {
                            startX = sampleFilter.MinIndex;
                            widthX = sampleFilter.Count;
                            sizeX  = sampleFilter.MaxIndex - sampleFilter.MinIndex + 1;
                        }
                        if (sampleFilter.Variable == Grid.Y)
                        {
                            startY = Grid.SizeY - sampleFilter.MaxIndex - 1;
                            widthY = sampleFilter.Count;
                            sizeY  = sampleFilter.MaxIndex - sampleFilter.MinIndex + 1;
                        }
                        scale = true;
                        continue;
                    }

                    if (filter is IVariableValueFilter)
                    {
                        var variableValueFilter = filter as IVariableValueFilter;
                        if (variableValueFilter.Values.Count > 1)
                        {
                            throw new NotSupportedException(
                                      "Multiple values for VariableValueFilter not supported by GDalFunctionStore");
                        }

                        if (filter.Variable == Grid.X)
                        {
                            startX = Grid.X.Values.IndexOf(variableValueFilter.Values[0]);
                            widthX = 1;
                        }
                        if (filter.Variable == Grid.Y)
                        {
                            //origin of our system is lower left corner, origin of gdal is upper left corner.
                            startY = Grid.SizeY - Grid.Y.Values.IndexOf(variableValueFilter.Values[0]) - 1;
                            widthY = 1;
                        }
                        continue;
                    }

                    if (filter is VariableIndexRangesFilter)
                    {
                        var rangesFilter = ((VariableIndexRangesFilter)filter);
                        if (filter.Variable == Grid.X)
                        {
                            startX = rangesFilter.IndexRanges[0].First;
                            widthX = rangesFilter.IndexRanges[0].Second - startX + 1;
                        }
                        if (filter.Variable == Grid.Y)
                        {
                            // rangesFilter.IndexRanges[0].First;
                            startY = Grid.SizeY - rangesFilter.IndexRanges[0].Second - 1;
                            widthY = Grid.SizeY - startY - rangesFilter.IndexRanges[0].First;
                        }
                    }

                    if (filter is VariableIndexRangeFilter)
                    {
                        var variableIndexRangeFilter = filter as VariableIndexRangeFilter;
                        if (filter.Variable == Grid.X)
                        {
                            startX = variableIndexRangeFilter.MinIndex;
                            widthX = 1 + variableIndexRangeFilter.MaxIndex - variableIndexRangeFilter.MinIndex;
                        }
                        if (filter.Variable == Grid.Y)
                        {
                            startY = Grid.SizeY - variableIndexRangeFilter.MaxIndex - 1;
                            widthY = Grid.SizeY - startY - variableIndexRangeFilter.MinIndex;
                        }
                        continue;
                    }
                }
            }


            //create a generic MDA of [xSize,ySize] with values of dataset.
            T[] values;
            if (scale)
            {
                values = GdalHelper.GetValuesForBand <T>(gdalDataset, rasterBandIndex, startX, startY, sizeX, sizeY, widthX, widthY);
            }
            else
            {
                values = GdalHelper.GetValuesForBand <T>(gdalDataset, rasterBandIndex, startX, startY, widthX, widthY);
            }

            IMultiDimensionalArray <T> array = (MultiDimensionalArray <T>)TypeUtils.CreateGeneric(
                typeof(MultiDimensionalArray <>),
                typeof(T), true, true,
                Grid.Components[componentIndex].
                DefaultValue,
                values, new[] { widthX, widthY }
                );

            ((MultiDimensionalArray <T>)array).Owner = Grid.Components[componentIndex];

            return(array);
        }