Esempio n. 1
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);
        }
Esempio n. 2
0
        private void regression(List <Cell> samplePoints)
        {
            // 构造输入输出数据集

            // 样本数目
            int COUNT = samplePoints.Count;

            // 构造输入和输出数据集
            double[][] inputs  = new double[COUNT][];
            bool[]     outputs = new bool[COUNT];
            for (int i = 0; i < COUNT; i++)
            {
                Cell cell = samplePoints[i];
                int  pos  = cell.row * width + cell.col;
                inputs[i] = (from buffer in driveBuffers
                             select buffer[pos]).ToArray <double>();
                outputs[i] = cell.type;
            }



            var learner = new IterativeReweightedLeastSquares <Accord.Statistics.Models.Regression.LogisticRegression>()
            {
                Tolerance             = 1e-8, // 收敛参数
                Iterations            = 20,   // 最大循环数目
                Regularization        = 0,
                ComputeStandardErrors = true
            };


            Accord.Statistics.Models.Regression.LogisticRegression regression = learner.Learn(inputs, outputs);


            // 输出 odds
            StringBuilder strb = new StringBuilder();

            for (int i = 0; i <= inputs[0].Length; i++)
            {
                strb.AppendLine(" " + i + " : " + regression.GetOddsRatio(i));
            }
            updateConsoleEvent(strb.ToString());

            // 输出 weights
            StringBuilder strw = new StringBuilder();

            strw.AppendLine("权重系数:");
            strw.AppendLine("截距: " + regression.Intercept.ToString());
            var weights = regression.Weights;

            for (int i = 0; i < weights.Length; i++)
            {
                strw.AppendLine("权重" + (i + 1) + ":" + weights[i]);
            }
            updateConsoleEvent(strw.ToString());

            double[] result  = new double[width * height];
            double   minProp = double.MaxValue;

            double[] minInput = null;
            for (int row = 0; row < height; row++)
            {
                for (int col = 0; col < width; col++)
                {
                    int pos = row * width + col;
                    if (beginBuffer[pos] < 0 || !IsValid(pos))
                    {
                        result[pos] = this.landUse.NullInfo.LandUseTypeValue;
                        continue;
                    }
                    double[] input = (from buffer in driveBuffers
                                      select buffer[pos]).ToArray <double>();
                    double prop = regression.Probability(input);
                    if (prop < minProp)
                    {
                        minProp  = prop;
                        minInput = input;
                    }
                    result[pos] = prop;
                }
            }



            // 新建 GDAL dataset
            OSGeo.GDAL.Driver  driver  = OSGeo.GDAL.Gdal.GetDriverByName("GTIFF");
            OSGeo.GDAL.Dataset dataset = driver.Create(this.ResultLayerName, width, height, 1, OSGeo.GDAL.DataType.GDT_Float64, null);

            dataset.WriteRaster(0, 0, width, height, result, width, height, 1, new int[1] {
                1
            }, 0, 0, 0);
            dataset.FlushCache();
        }
Esempio n. 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);
        }