Пример #1
0
        /// <summary>
        /// update corresponding layer
        /// </summary>
        /// <param name="type"></param>
        public void drawLayer(string resultType, string col,
                              DateTime date, ArcSWAT.ResultSummaryType summaryType)
        {
            if (_type != ArcSWAT.SWATUnitType.SUB && _type != ArcSWAT.SWATUnitType.RCH)
            {
                return;
            }
            if (_workingLayer == null)
            {
                return;
            }
            if (_unitList == null && _scenario != null)
            {
                if (_type == ArcSWAT.SWATUnitType.SUB)
                {
                    _unitList = _scenario.Subbasins;
                }
                if (_type == ArcSWAT.SWATUnitType.RCH)
                {
                    _unitList = _scenario.Reaches;
                }
            }
            if (_unitList == null)
            {
                return;
            }

            _resultColumn = col;
            _summaryType  = summaryType;
            _resultDate   = date;

            Debug.WriteLine("Draw Layer, " + _workingLayer.LegendText);
            Debug.WriteLine("Getting results...");
            DateTime d = DateTime.Now;

            DataTable dt          = _workingLayer.DataSet.DataTable;
            int       resultIndex = dt.Columns.IndexOf(RESULT_COLUMN);
            int       idIndex     = dt.Columns.IndexOf(ID_COLUMN_NAME);

            if (summaryType == ArcSWAT.ResultSummaryType.AVERAGE_ANNUAL ||
                summaryType == ArcSWAT.ResultSummaryType.ANNUAL)
            {
                int year = -1;
                if (summaryType == ArcSWAT.ResultSummaryType.ANNUAL)
                {
                    year = date.Year;
                }

                Dictionary <int, double> ave_annual = _scenario.getAverageAnnualResults(_type, col, year);
                foreach (DataRow r in dt.Rows)
                {
                    r[resultIndex] = ArcSWAT.ScenarioResultStructure.EMPTY_VALUE;

                    int id = int.Parse(r[idIndex].ToString());
                    r[resultIndex] = ave_annual[id];
                }
            }
            else
            {
                foreach (DataRow r in dt.Rows)
                {
                    r[resultIndex] = ArcSWAT.ScenarioResultStructure.EMPTY_VALUE;

                    int id = int.Parse(r[idIndex].ToString());
                    if (!_unitList.ContainsKey(id))
                    {
                        continue;
                    }

                    ArcSWAT.SWATUnit unit = _unitList[id];
                    if (!unit.Results.ContainsKey(resultType))
                    {
                        continue;
                    }

                    ArcSWAT.SWATUnitResult result = unit.Results[resultType];
                    if (!result.Columns.Contains(col))
                    {
                        continue;
                    }


                    if (summaryType == ArcSWAT.ResultSummaryType.TIMESTEP)
                    {
                        r[resultIndex] = result.getData(col, date);
                    }
                    else if (summaryType == ArcSWAT.ResultSummaryType.ANNUAL)   //annual
                    {
                        r[resultIndex] = result.getData(col, date.Year);
                    }
                }
            }

            Debug.WriteLine(DateTime.Now.Subtract(d).TotalMilliseconds);
            Debug.WriteLine("setLayerSchema");
            d = DateTime.Now;

            //update symbol
            setLayerSchema(_workingLayer);

            Debug.WriteLine(DateTime.Now.Subtract(d).TotalMilliseconds);

            ////update chart
            //onLayerSelectionChanged(type);
            if (onMapUpdated != null)
            {
                onMapUpdated(this, new EventArgs());
            }
        }