Exemplo n.º 1
0
        private void Functions_CollectionChanging(object sender, NotifyCollectionChangingEventArgs e)
        {
            if (!AutoOpen())
            {
                return;
            }

            if ((e.Action == NotifyCollectionChangeAction.Add || e.Action == NotifyCollectionChangeAction.Replace) &&
                e.Item is IRegularGridCoverage)
            {
                var grid = (IRegularGridCoverage)e.Item;

                var driverName = GdalHelper.GetDriverName(path);

                RegisterGdal();

                using (var gdalDriver = Gdal.GetDriverByName(driverName))
                {
                    var gdalType          = GdalHelper.GetGdalDataType(gdalDriver, grid.Components[0].ValueType);
                    var gdalvariableValue = GdalHelper.GetVariableForDataType(gdalType);// TODO: strange logic, use supported GDAL types here (as .NET types) instead
                    var type = gdalvariableValue.ValueType;

                    if (type != grid.Components[0].ValueType)
                    {
                        throw new InvalidOperationException(string.Format("Value type {0} is not supported by GDAL driver", grid.Components[0].ValueType));
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void SubstituteDriverByInMemIfReadonly(IRegularGridCoverage addedCoverage, Driver gdalDriver)
        {
            var canCreate = gdalDriver.GetMetadataItem("DCAP_CREATE", null) == "YES";

            //cannot create use mem driver.
            if (!canCreate)
            {
                using (var inMemoryDriver = Gdal.GetDriverByName("MEM"))
                {
                    DataType dataType =
                        GdalHelper.GetGdalDataType(inMemoryDriver, addedCoverage.Components[0].ValueType);

                    if (dataType.Equals(DataType.GDT_Unknown))
                    {
                        throw new NotSupportedException(
                                  String.Format("The datatype {0} cannot be saved to this kind of file: {1}",
                                                addedCoverage.Components[0].ValueType, System.IO.Path.GetExtension(path)));
                    }

                    gdalDataset = inMemoryDriver.Create(path, addedCoverage.SizeX, addedCoverage.SizeY,
                                                        addedCoverage.Components.Count, dataType,
                                                        new string[] { });
                }
            }
            else
            {
                DataType dataType =
                    GdalHelper.GetGdalDataType(gdalDriver, addedCoverage.Components[0].ValueType);

                if (dataType.Equals(DataType.GDT_Unknown))
                {
                    throw new NotSupportedException(
                              String.Format("The datatype {0} cannot be saved to this kind of file: {1}",
                                            addedCoverage.Components[0].ValueType, System.IO.Path.GetExtension(path)));
                }

                gdalDataset = gdalDriver.Create(path, addedCoverage.SizeX, addedCoverage.SizeY,
                                                addedCoverage.Components.Count, dataType,
                                                new string[] { });
            }
        }
Exemplo n.º 3
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);
        }