Пример #1
0
        private void button2_Click(object sender, EventArgs e)
        {
            LinearFitterInt32 L   = new LinearFitterInt32();
            LinearFitObject   obj = new LinearFitObject();

            L.Fit(new int[] { 0, 1 }, new int[] { 4, 6 }, obj);
        }
Пример #2
0
        public void Reset(IRasterDataProvider dataProvider, int xBandNo, int yBandNo, int[] aoi, XYAxisEndpointValue endpointValues, LinearFitObject fitObj, Action <int, string> progressTracker)
        {
            _fitObj       = fitObj;
            _dataProvider = dataProvider;
            _xBandNo      = xBandNo;
            _yBandNo      = yBandNo;
            _fileName     = _dataProvider.fileName;
            _xBandName    = Path.GetFileName(_fileName) + " (Band " + _xBandNo.ToString() + ")";
            _yBandName    = Path.GetFileName(_fileName) + " (Band " + _yBandNo.ToString() + ")";
            _aoi          = aoi;
            //
            IMaxMinValueComputer c = MaxMinValueComputerFactory.GetMaxMinValueComputer(dataProvider.DataType);

            double[] minValues  = new double[2];
            double[] maxValues  = new double[2];
            double[] meanValues = new double[2];
            c.Compute(new IRasterBand[] { dataProvider.GetRasterBand(xBandNo), dataProvider.GetRasterBand(yBandNo) }, aoi, out minValues, out maxValues, out meanValues, progressTracker);
            _minValueXBand = endpointValues.MinX;
            _maxValueXBand = endpointValues.MaxX;
            _minValueYBand = endpointValues.MinY;
            _maxValueYBand = endpointValues.MaxY;
            _oMinValueX    = minValues[0];
            _oMaxValueX    = maxValues[0];
            //
            _visitor = ScatterPixelVisitorFactory.GetVisitor(_dataProvider.DataType);
            _visitor.Init(_dataProvider.GetRasterBand(xBandNo), _dataProvider.GetRasterBand(yBandNo));
        }
Пример #3
0
        public void Reset(IRasterDataProvider dataProvider, int xBandNo, int yBandNo, double[] xBandInvalidValue, double[] yBandInvalidValue, int[] aoi, LinearFitObject fitObj, Action <int, string> progressTracker)
        {
            _fitObj       = fitObj;
            _dataProvider = dataProvider;
            _xBandNo      = xBandNo;
            _yBandNo      = yBandNo;
            _fileName     = _dataProvider.fileName;
            string[] filenames = _fileName.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            if (filenames.Length == 2)
            {
                _xBandName = Path.GetFileName(filenames[0]) + " (Band " + _xBandNo.ToString() + ")";
                _yBandName = Path.GetFileName(filenames[1]) + " (Band " + _yBandNo.ToString() + ")";
                _fileName  = "";
            }
            _aoi = aoi;
            //
            IMaxMinValueComputer c = MaxMinValueComputerFactory.GetMaxMinValueComputer(dataProvider.DataType);

            double[] minValues  = new double[2];
            double[] maxValues  = new double[2];
            double[] meanValues = new double[2];
            c.Compute(new IRasterBand[] { dataProvider.GetRasterBand(xBandNo), dataProvider.GetRasterBand(yBandNo) }, aoi, new double[][] { xBandInvalidValue, yBandInvalidValue }, out minValues, out maxValues, out meanValues, progressTracker);
            _minValueXBand = minValues[0];
            _maxValueXBand = maxValues[0];
            _minValueYBand = minValues[1];
            _maxValueYBand = maxValues[1];
            _oMinValueX    = _minValueXBand;
            _oMaxValueX    = _maxValueXBand;
            //
            _visitor = ScatterPixelVisitorFactory.GetVisitor(_dataProvider.DataType);
            _visitor.Init(_dataProvider.GetRasterBand(xBandNo), _dataProvider.GetRasterBand(yBandNo));
        }
Пример #4
0
        public override void Execute()
        {
            //Test();
            //return;
            IRasterDataProvider dataProvider = null;
            bool isNew = false;

            int[] bandNos = null;
            int[] aoi     = GetAOI();
            using (frmScatterVarSelector frm = new frmScatterVarSelector())
            {
                frm.StartPosition = FormStartPosition.CenterScreen;
                frm.Apply(GetCurrentDataProvider(), aoi);
                if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    dataProvider = frm.DataProvider;
                    bandNos      = new int[] { frm.XBandNo, frm.YBandNo };
                    isNew        = frm.IsNewDataProvider;
                    aoi          = frm.AOI;
                }
            }
            if (bandNos == null || dataProvider == null)
            {
                return;
            }
            //
            IProgressMonitor progress = _smartSession.ProgressMonitorManager.DefaultProgressMonitor;

            try
            {
                progress.Reset("正在准备生成散点图...", 100);
                progress.Start(false);
                frmScatterGraph frm1 = new frmScatterGraph();
                frm1.Owner         = _smartSession.SmartWindowManager.MainForm as Form;
                frm1.StartPosition = FormStartPosition.CenterScreen;
                LinearFitObject fitObj = new LinearFitObject();
                frm1.Reset(dataProvider, bandNos[0], bandNos[1], aoi,
                           fitObj,
                           (idx, tip) => { progress.Boost(idx, "正在准备生成散点图..."); }
                           );
                progress.Finish();
                frm1.Show();
                frm1.Rerender();
                frm1.FormClosed += new FormClosedEventHandler((obj, e) =>
                {
                    if (isNew)
                    {
                        dataProvider.Dispose();
                    }
                });
            }
            finally
            {
                progress.Finish();
            }
        }
Пример #5
0
        private void ucScatterGraph1_LinearFitFinished(object sender, EventArgs e)
        {
            txtFitResult.Text = string.Empty;
            LinearFitObject fitObj = sender as LinearFitObject;

            if (fitObj != null)
            {
                txtFitResult.Text = string.Format("f(x) = {0} + {1}x", fitObj.a.ToString("0.####"), fitObj.b.ToString("0.####")) + " , R² = " + fitObj.r2.ToString("0.####");
                if (txtFitResult.Text.Contains("+ -"))
                {
                    txtFitResult.Text = txtFitResult.Text.Replace("+ -", "- ");
                }
            }
        }
Пример #6
0
        public void Reset(enumDataType datatype, Object xData, Object yData, XYAxisEndpointValue endpointValues, string title, string xaxisname, string yaxisname, LinearFitObject fitObj, Action <int, string> progressTracker)
        {
            _fitObj         = fitObj;
            _graphTitleName = title;
            _xAxisName      = xaxisname;
            _yAxisName      = yaxisname;

            IMaxMinValueComputer c = MaxMinValueComputerFactory.GetMaxMinValueComputer(enumDataType.Double);

            double[] minValues  = new double[2];
            double[] maxValues  = new double[2];
            double[] meanValues = new double[2];
            c.DirectCompute(2, new double[][] { xData as double[], yData as double[] }, minValues, maxValues, meanValues);
            _minValueXBand = endpointValues.MinX;
            _maxValueXBand = endpointValues.MaxX;
            _minValueYBand = endpointValues.MinY;
            _maxValueYBand = endpointValues.MaxY;
            _oMinValueX    = minValues[0];
            _oMaxValueX    = maxValues[0];
            //
            _visitor = ScatterPixelVisitorFactory.GetVisitor(datatype);
            _visitor.InitObj(xData, yData);
        }
Пример #7
0
 public void Reset(IRasterDataProvider dataProvider, int xBandNo, int yBandNo, int[] aoi, XYAxisEndpointValue endpointValues, LinearFitObject fitObj, Action <int, string> progressTracker)
 {
 }
Пример #8
0
        public override void Execute()
        {
            IRasterDataProvider XdataProvider = null, YdataProvider = null;

            try
            {
                bool   isNewX = false, isNewY = false;
                int[]  bandNos   = null;
                int[]  viewerAoi = null, rightAoi = null;
                string aoiType   = null;
                using (frmScatterTwoVarSelector frm = new frmScatterTwoVarSelector())
                {
                    frm.StartPosition = FormStartPosition.CenterScreen;
                    //XdataProvider =GetCurrentDataProvider();
                    //if (XdataProvider!=null)
                    //{
                    //    frm.AOIName = "视图AOI";
                    //    aoiType = "viewer";
                    //    viewerAoi = GetAOI();
                    //    frm.Apply(XdataProvider, viewerAoi, true);
                    //}
                    //else
                    {
                        if (StatRegionSet.UseRecgRegion || StatRegionSet.UseRegion)
                        {
                            frm.AOIName = StatRegionSet.SelectedRegionEnvelope.Name;
                            aoiType     = "recg";
                        }
                        else if (StatRegionSet.UseVectorAOIRegion)
                        {
                            frm.AOIName = StatRegionSet.AOIName;
                            aoiType     = "vector";
                        }
                    }
                    if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        XdataProvider = frm.XDataProvider;
                        isNewX        = frm.IsNewXDataProvider;
                        YdataProvider = frm.YDataProvider;
                        isNewY        = frm.IsNewYDataProvider;
                        bandNos       = new int[] { frm.XBandNo, frm.YBandNo };
                        //判断两个文件的大小一致、空间范围一致
                        if (XdataProvider.Width != YdataProvider.Width) //|| XdataProvider.Height != YdataProvider.Height
                        {
                            throw new ArgumentException("两个文件大小不一致!目前仅支持相同大小文件!");
                        }
                        CoordEnvelope lenv = XdataProvider.CoordEnvelope, renv = YdataProvider.CoordEnvelope;
                        if (lenv == null || lenv.Width <= 0 || lenv.Height <= 0)
                        {
                            throw new ArgumentException("X轴文件的空间范围信息不可用!");
                        }
                        if (renv == null || renv.Width <= 0 || renv.Height <= 0)
                        {
                            throw new ArgumentException("Y轴文件的空间范围信息不可用!");
                        }
                        if (lenv.MinX != renv.MinX || lenv.MaxY != renv.MaxY)
                        {
                            throw new ArgumentException("两个文件空间区域不一致!目前仅支持相同范围!!");
                        }
                        if (frm.AOIName != null)//利用AOI
                        {
                            // 两个文件存在相交
                            PrjEnvelope lfilePrj, rfilePrj;
                            //PrjEnvelope lfilePrj = new PrjEnvelope(lenv.MinX, lenv.MaxX, lenv.MinY, lenv.MaxY), rfilePrj = new PrjEnvelope(renv.MinX, renv.MaxX, renv.MinY, renv.MaxY);
                            //PrjEnvelope env = PrjEnvelope.Intersect(lfilePrj, rfilePrj);
                            //if (env == null || env.Width <= 0 || env.Height <= 0)
                            //    throw new ArgumentException("两个文件不存在空间相交区域!");
                            //分别计算两个文件的AOI index
                            if (aoiType.ToLower() == "recg")
                            {
                                if (CloudParaFileStatics.CheckAOIIntersect(XdataProvider, StatRegionSet.SelectedRegionEnvelope.PrjEnvelope, out lfilePrj, out viewerAoi) &&
                                    CloudParaFileStatics.CheckAOIIntersect(YdataProvider, StatRegionSet.SelectedRegionEnvelope.PrjEnvelope, out rfilePrj, out rightAoi))
                                {
                                }
                            }
                            else if (aoiType.ToLower() == "vector")
                            {
                                AOIContainerLayer aoiContainer = StatRegionSet.AoiContainer;
                                PrjEnvelope       RegionEnv    = StatRegionSet.AOIPrjEnvelope;
                                if (RegionEnv == null || RegionEnv.Height <= 0 || RegionEnv.Width <= 0)
                                {
                                    throw new ArgumentException("矢量AOI区域设置无效或范围不合法!");
                                }
                                if (aoiContainer != null)
                                {
                                    Size xSize = new Size(XdataProvider.Width, XdataProvider.Height);
                                    viewerAoi = CloudParaFileStaticsAOI.GetAOI(lenv, aoiContainer, xSize);
                                    if (viewerAoi == null || viewerAoi.Length <= 0)
                                    {
                                        throw new ArgumentException(Path.GetFileName(XdataProvider.fileName) + "与矢量AOI区域" + frm.AOIName + "无相交区域!");
                                    }
                                    Size ySize = new Size(YdataProvider.Width, YdataProvider.Height);
                                    rightAoi = CloudParaFileStaticsAOI.GetAOI(renv, aoiContainer, ySize);
                                    if (rightAoi == null || rightAoi.Length <= 0)
                                    {
                                        throw new ArgumentException(Path.GetFileName(YdataProvider.fileName) + "与矢量AOI区域" + frm.AOIName + "无相交区域!");
                                    }
                                }
                            }
                            //判断两个Index大小相等
                            if (viewerAoi == null || rightAoi == null || viewerAoi.Length != rightAoi.Length)
                            {
                                throw new ArgumentException("两个文件AOI区域大小不一致!");
                            }
                        }
                        //构建虚拟的dataProvider
                        IRasterBand         xband    = XdataProvider.GetRasterBand(bandNos[0]);
                        IRasterBand         yband    = YdataProvider.GetRasterBand(bandNos[1]);
                        IRasterDataProvider localprd = new LogicalRasterDataProvider(frm.AOIName + "区域", new IRasterBand[2] {
                            xband, yband
                        }, null);
                        //if (localprd.BandCount!=2)
                        //{
                        //    throw new ArgumentException("两个波段信息不一致,无法进行散点图运算!");
                        //}
                        IProgressMonitor progress = _smartSession.ProgressMonitorManager.DefaultProgressMonitor;
                        try
                        {
                            progress.Reset("正在准备生成散点图...", 100);
                            progress.Start(false);
                            frmScatterGraph frm1 = new frmScatterGraph();
                            frm1.Owner         = _smartSession.SmartWindowManager.MainForm as Form;
                            frm1.StartPosition = FormStartPosition.CenterScreen;
                            LinearFitObject fitObj = frm.FitObj;
                            frm1.Reset(localprd, 1, 2, viewerAoi,
                                       fitObj,
                                       (idx, tip) => { progress.Boost(idx, "正在准备生成散点图..."); }
                                       );
                            progress.Finish();
                            frm1.Show();
                            frm1.Rerender();
                            frm1.FormClosed += new FormClosedEventHandler((obj, e) =>
                            {
                                if (isNewX && XdataProvider != null)
                                {
                                    XdataProvider.Dispose();
                                    XdataProvider = null;
                                }
                                if (isNewY && YdataProvider != null)
                                {
                                    YdataProvider.Dispose();
                                    YdataProvider = null;
                                }
                            });
                        }
                        finally
                        {
                            progress.Finish();
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }
Пример #9
0
 public void Reset(Core.DF.IRasterDataProvider dataProvider, int xBandNo, int yBandNo, double[] xBandInvalidValue, double[] yBandInvalidValue, int[] aoi, LinearFitObject fitObj, Action <int, string> progressTracker)
 {
     ucScatterGraph1.Reset(dataProvider, xBandNo, yBandNo, xBandInvalidValue, yBandInvalidValue, aoi, fitObj, progressTracker);
 }
Пример #10
0
 public void Reset(IRasterDataProvider dataProvider, int xBandNo, int yBandNo, int[] aoi, XYAxisEndpointValue endpointValues, LinearFitObject fitObj, Action <int, string> progressTracker)
 {
     ucScatterGraph1.Reset(dataProvider, xBandNo, yBandNo, aoi, endpointValues, fitObj, progressTracker);
 }