コード例 #1
0
ファイル: Program.cs プロジェクト: batuZ/outlines
        /// <summary>
        /// 创建slopeMap,设置无效值
        /// </summary>
        /// <param name="DemPath"></param>
        /// <param name="OutSlpPath"></param>
        static void CreateSlopeMap()
        {
            double dsm_NoDataValue; int dsm_HasNoDataValue;

            OSGeo.GDAL.Band dsmBand = dsmDataset.GetRasterBand(1);
            dsmBand.GetNoDataValue(out dsm_NoDataValue, out dsm_HasNoDataValue);

            //调用GDal创建slope影像
            if (File.Exists(slopePath))
            {
                gdalDriver.Delete(slopePath);
            }
            slopeDataSet = gdalDriver.Create(slopePath, dsm_Xsize, dsm_Ysize, 1, OSGeo.GDAL.DataType.GDT_Float32, null);
            slopeDataSet.SetProjection(dsmDataset.GetProjection());
            slopeDataSet.SetGeoTransform(dsm_Transform);
            OSGeo.GDAL.Band slopeBand = slopeDataSet.GetRasterBand(1);

            //设置无效值
            if (dsm_HasNoDataValue == 0)            //dsm没有无效值
            {
                //把DSM和SLOPE全设置成用户指定的值
                dsmBand.SetNoDataValue(imgNodata);
                slopeBand.SetNoDataValue(imgNodata);
            }
            else                        //DSM有无效值时
            {
                //把SLOPE和全局变量设置成DSM的无效值
                imgNodata = dsm_NoDataValue;
                slopeBand.SetNoDataValue(dsm_NoDataValue);
            }
            // BufferOnePixel(slopeBand);
        }
コード例 #2
0
        /// <summary>
        /// 模拟结束事件监听辅助函数
        /// </summary>
        protected void SimulateEndHelper(BaseCa ca)
        {
            // 将模拟结果添加到系统中
            double[] buffer = ca.BeginBuffer;

            int width  = ca.Width;
            int height = ca.Height;
            //var map = GIS.FrameWork.Application.App.Map;

             
            // 保存输出结果
            var path = Application.StartupPath + @"\log";

            if (!Directory.Exists(path))         //如果不存在就创建file文件夹                 
            {
                Directory.CreateDirectory(path); //创建该文件夹 
            }
            var outputPath = path + @"\" + (dateNow.ToString("MMddyyhhmmss")) + (this.uuid++) + ".tif";

            OSGeo.GDAL.Driver  driverSave  = OSGeo.GDAL.Gdal.GetDriverByName("GTiff");
            OSGeo.GDAL.Dataset datasetSave = driverSave.Create(outputPath, width, height, 1, OSGeo.GDAL.DataType.GDT_Byte, null);
            datasetSave.WriteRaster(0, 0, width, height, buffer, width, height, 1, new int[1] {
                1
            }, 0, 0, 0);
            datasetSave.SetProjection(ca.projStr);
            datasetSave.SetGeoTransform(ca.geoTransform);
            datasetSave.GetRasterBand(1).SetNoDataValue(ca.noDataVal);
            datasetSave.FlushCache();
            datasetSave.Dispose();
            driverSave.Dispose();

            //// 翻转图像 ?
            //buffer = InvertImage(buffer, width, height);

            MessageBox.Show("模拟结束, 输出文件:" + outputPath);


            //// 新建 GDAL dataset
            //OSGeo.GDAL.Driver driver = OSGeo.GDAL.Gdal.GetDriverByName("MEM");
            //OSGeo.GDAL.Dataset dataset = driver.Create("", width, height, 1, OSGeo.GDAL.DataType.GDT_Float64, null);
            //dataset.WriteRaster(0, 0, width, height, buffer, width, height, 1, new int[1] { 1 }, 0, 0, 0);


            //// 将GDAL dataset转化为IRaster数据集
            //DotSpatial.Data.IRaster raster = GIS.GDAL.RasterConverter.Gdal2DSRaster(dataset, 1);
            //raster.Name = "Result";

            //map.Layers.Add(raster);
        }
コード例 #3
0
        /// <summary>
        /// DotSpatial to Gdal at Raster Level
        /// </summary>
        /// <param name="raster">Dotspatial Raster</param>
        /// <param name="options">Set Options When Gdal Create Dataset. Default is null.</param>
        /// <param name="bandMap">Gdal WriteRaster Method Need to Set BandMap</param>
        /// <returns>Gdal Dataset</returns>
        public static OSGeo.GDAL.Dataset Ds2GdalRaster(DotSpatial.Data.IRaster raster, string[] options, int[] bandMap)
        {
            OSGeo.GDAL.Dataset result = null;
            OSGeo.GDAL.Driver  driver = OSGeo.GDAL.Gdal.GetDriverByName("MEM");

            OSGeo.GDAL.DataType dataType;
            string rasterDataType = raster.DataType.ToString().ToUpper();

            switch (rasterDataType)
            {
            case "SYSTEM.INT32":
            case "SYSTEM.LONG":
                dataType = OSGeo.GDAL.DataType.GDT_Int32;
                break;

            case "SYSTEM.SHORT":
                dataType = OSGeo.GDAL.DataType.GDT_Int16;
                break;

            case "SYSTEM.DOUBLE":
            case "SYSTEM.SINGLE":
                dataType = OSGeo.GDAL.DataType.GDT_Float64;
                break;

            case "SYSTEM.FLOAT":
                dataType = OSGeo.GDAL.DataType.GDT_Float32;
                break;

            case "SYSTEM.BYTE":
                dataType = OSGeo.GDAL.DataType.GDT_Byte;
                break;

            default:
                dataType = OSGeo.GDAL.DataType.GDT_Int16;
                break;
            }

            result = driver.Create("", raster.NumColumnsInFile, raster.NumRowsInFile, 1, dataType, options);

            ///地理坐标信息
            result.SetGeoTransform(raster.Bounds.AffineCoefficients);
            ///投影设置 Set Projection
            result.SetProjection(raster.Projection.ToProj4String());
            ///波段个数
            int bandNum = raster.NumBands;

            if (bandNum < 1)
            {
                bandNum = 1;
            }

            ///赋值
            switch (rasterDataType)
            {
            case "SYSTEM.INT32":
            case "SYSTEM.LONG":
                result.WriteRaster(0, 0, raster.NumColumns, raster.NumRows, DS2GdalValue <int>(raster), raster.NumColumns, raster.NumRows, bandNum, bandMap, 0, 0, 0);
                break;

            case "SYSTEM.SHORT":
                result.WriteRaster(0, 0, raster.NumColumns, raster.NumRows, DS2GdalValue <short>(raster), raster.NumColumns, raster.NumRows, bandNum, bandMap, 0, 0, 0);
                break;

            case "SYSTEM.DOUBLE":
            case "SYSTEM.SINGLE":
                result.WriteRaster(0, 0, raster.NumColumns, raster.NumRows, DS2GdalValue <double>(raster), raster.NumColumns, raster.NumRows, bandNum, bandMap, 0, 0, 0);
                break;

            case "SYSTEM.FLOAT":
                result.WriteRaster(0, 0, raster.NumColumns, raster.NumRows, DS2GdalValue <float>(raster), raster.NumColumns, raster.NumRows, bandNum, bandMap, 0, 0, 0);
                break;

            case "SYSTEM.BYTE":
                result.WriteRaster(0, 0, raster.NumColumns, raster.NumRows, DS2GdalValue <byte>(raster), raster.NumColumns, raster.NumRows, bandNum, bandMap, 0, 0, 0);
                break;

            default:
                result.WriteRaster(0, 0, raster.NumColumns, raster.NumRows, DS2GdalValue <int>(raster), raster.NumColumns, raster.NumRows, bandNum, bandMap, 0, 0, 0);
                break;
            }

            return(result);
        }