예제 #1
0
 private string[] GetUnByDataStatistics(ILayer layer, String strField)
 {
     IFeatureLayer featureLayer = layer as IFeatureLayer;
     ILayerFields pLayerFields = featureLayer as ILayerFields;
     int nCount=pLayerFields.FieldCount;
     IQueryFilter queryFilter = new QueryFilterClass();
     queryFilter.SubFields = strField;
     IFeatureCursor featureCursor = featureLayer.FeatureClass.Search(queryFilter, true);
     IDataStatistics dataStatistics = new DataStatisticsClass();
     dataStatistics.Field = strField;
     dataStatistics.Cursor = featureCursor as ICursor;
     System.Collections.IEnumerator pEnumvar = dataStatistics.UniqueValues;
     int number = dataStatistics.UniqueValueCount;
     pEnumvar.Reset();
     object obj = null;
     pEnumvar.MoveNext();
     int i = 0;
     string[] str = new string[nCount];
     while (pEnumvar.MoveNext())
     {
         obj = pEnumvar.Current;
         str[i++] = obj.ToString();
     }
     return str;
 }
        public ICursor doQueryItems(string[] values)
        {
            if (values == null || values.Length == 0)
            {
                return null;
            }

            try
            {
                IFeatureLayer2 ifl2 = (IFeatureLayer2)ArcMap.Document.SelectedLayer;
                IGeoFeatureLayer igfl = (IGeoFeatureLayer)ifl2;
                ITable tbl = (ITable)((IFeatureLayer)igfl).FeatureClass;
                IQueryFilter qf = getQueryFilter(values);

                LastQueryStrings.Clear();
                LastQueryStrings.Add(qf.WhereClause);

                IDataStatistics ids = new DataStatisticsClass();
                return tbl.Search(qf, false);
            }
            catch (Exception err)
            {
                System.Windows.Forms.MessageBox.Show("An error occurred during the query. Ensure the selected layer is an NWI or NWI+ layer and try again.", "Error");
            }
            finally
            {
            }

            return null;
        }
예제 #3
0
 public void GetUniqueValues(ILayer ilayer_1, string string_1, ListBoxItemCollection listBoxItemCollection_0)
 {
     try
     {
         string str;
         ITable table = this.method_2();
         if ((string_1[0] == '\'') || (string_1[0] == '['))
         {
             str = string_1.Substring(1, string_1.Length - 2);
         }
         else
         {
             str = string_1;
         }
         ICursor         cursor     = table.Search(null, false);
         IDataStatistics statistics = new DataStatisticsClass
         {
             Field  = str,
             Cursor = cursor
         };
         IEnumerator uniqueValues = statistics.UniqueValues;
         uniqueValues.Reset();
         int           index = cursor.Fields.FindField(str);
         esriFieldType type  = cursor.Fields.get_Field(index).Type;
         while (uniqueValues.MoveNext())
         {
             listBoxItemCollection_0.Add(this.ConvertFieldValueToString(type, uniqueValues.Current));
         }
     }
     catch (Exception exception)
     {
         MessageBox.Show(exception.Message);
     }
 }
예제 #4
0
파일: frmSlider.cs 프로젝트: sishui198/SAAR
        private void CboUField_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                strUncernRenderField = CboUField.Text;

                ITable          pTable       = (ITable)pFClass;
                int             intUncernIdx = pTable.FindField(strUncernRenderField);
                IField          pUncernField = pTable.Fields.get_Field(intUncernIdx);
                ICursor         pCursor      = pTable.Search(null, false);
                IDataStatistics pDataStat    = new DataStatisticsClass();
                pDataStat.Field  = pUncernField.Name;
                pDataStat.Cursor = pCursor;
                IStatisticsResults pStatResults = pDataStat.Statistics;

                dblMinValue = pStatResults.Minimum;
                dblMaxValue = pStatResults.Maximum;

                int intX = lblMax.Location.X + lblMax.Size.Width;
                lblMin.Text = "MIN: " + Math.Round(pStatResults.Minimum, intNDecimal).ToString();
                lblMax.Text = "MAX: " + Math.Round(pStatResults.Maximum, intNDecimal).ToString();
                lblMax.SetBounds(intX - lblMax.Size.Width, lblMax.Location.Y, lblMax.Size.Width, lblMax.Size.Height);
                txtValue.Text = Math.Round(dblMinValue, intNDecimal).ToString();
            }
            catch (Exception ex)
            {
                frmErrorLog pfrmErrorLog = new frmErrorLog(); pfrmErrorLog.ex = ex; pfrmErrorLog.ShowDialog();
                return;
            }
        }
        private void GetRankingStatistics(string fieldName)
        {
            if (m_featureLayer == null)
            {
                return;
            }
            //Find the selected field in the feature layer
            IFeatureClass featureClass = m_featureLayer.FeatureClass;
            IField        field        = featureClass.Fields.get_Field(featureClass.FindField(fieldName));

            //Get a feature cursor
            ICursor cursor = (ICursor)m_featureLayer.Search(null, false);

            //Create a DataStatistics object and initialize properties
            IDataStatistics dataStatistics = new DataStatisticsClass();

            dataStatistics.Field  = field.Name;
            dataStatistics.Cursor = cursor;

            //Get the result statistics
            IStatisticsResults statisticsResults = dataStatistics.Statistics;

            //Set the values min and max values
            _minriskvalue = statisticsResults.Minimum;
            _maxriskvalue = statisticsResults.Maximum;
        }
예제 #6
0
        //当选择统计字段发生变化时触发事件,执行本函数,完成统计分析操作
        private void comboBoxFields_SelectedIndexChanged(object sender, EventArgs e)
        {
            //定义及新建IDataStatistics接口的对象进行字段统计
            IDataStatistics dataStatistics = new DataStatisticsClass();

            //获取需要统计的字段
            dataStatistics.Field = comboBoxFields.SelectedItem.ToString();
            //将当前矢量图层对象进行接口转换以进行选择集操作
            IFeatureSelection featureSelection = currentFeatureLayer as IFeatureSelection;
            //定义选择集的游标
            ICursor cursor = null;

            //使用null参数的Search方法获取整个选择集中的要素,得到相应的游标
            featureSelection.SelectionSet.Search(null, false, out cursor);
            //将该游标赋值给IDataStatistics接口对象的游标
            dataStatistics.Cursor = cursor;
            //执行统计
            IStatisticsResults statisticsResults = dataStatistics.Statistics;
            //定义StringBuilder对象进行字符串的操作
            StringBuilder stringBuilder = new StringBuilder();

            //以下语句依次增加各类统计结果
            stringBuilder.AppendLine("统计总数: " + statisticsResults.Count.ToString() + "\n");
            stringBuilder.AppendLine("最小值:" + statisticsResults.Minimum.ToString() + "\n");
            stringBuilder.AppendLine("最大值:" + statisticsResults.Maximum.ToString() + "\n");
            stringBuilder.AppendLine("总计: " + statisticsResults.Sum.ToString() + "\n");
            stringBuilder.AppendLine("平均值: " + statisticsResults.Mean.ToString() + "\n");
            stringBuilder.AppendLine("标准差: " + statisticsResults.StandardDeviation.ToString());
            //将统计结果显示在窗体中
            labelStatisticsResult.Text = stringBuilder.ToString();
        }
예제 #7
0
        /// <summary>
        /// 计算元素指定属性的最大值
        /// </summary>
        /// <param name="fields">元素的属性名称列表</param>
        /// <returns></returns>
        public static double[] GetStaMaxMin(string[] fields, IFeatureLayer pGeoFeatureLyer)
        {
            double pMaxValue = 0;
            double pMinValue = 0;
            double pStaMax;
            double pStaMin;

            double[] PMaxMin = new double[2];

            for (int i = 0; i < fields.Length; i++)
            {
                ICursor         pCursor  = pGeoFeatureLyer.Search(null, true) as ICursor;
                IDataStatistics pDataSta = new DataStatisticsClass();
                pDataSta.Cursor = pCursor;
                pDataSta.Field  = fields[i];
                pStaMax         = pDataSta.Statistics.Maximum;
                pStaMin         = pDataSta.Statistics.Minimum;
                if (pMaxValue < pStaMax)
                {
                    pMaxValue = pStaMax;
                }
                if (pMinValue > pStaMin)
                {
                    pMinValue = pStaMin;
                }
            }
            PMaxMin[0] = pMaxValue;
            PMaxMin[1] = pMinValue;
            return(PMaxMin);
        }
예제 #8
0
        private void btnGetUniqueValues_Click(object sender, EventArgs e)
        {
            if (lbxFields.SelectedItems.Count == 1)
            {
                IFeatureLayer featureLayer = m_layer as IFeatureLayer;

                //Using "Search" to traverse all the features stored in this layer
                IFeatureCursor featureCursor = featureLayer.Search(null, false);

                IDataStatistics dataStatistics = new DataStatisticsClass();
                dataStatistics.Field  = lbxFields.SelectedItem.ToString();
                dataStatistics.Cursor = featureCursor as ICursor;

                //Add in features' values
                IEnumerator enumerator = dataStatistics.UniqueValues;
                enumerator.Reset();
                while (enumerator.MoveNext())
                {
                    //add '' if the type of the field is string
                    if (featureLayer.FeatureClass.Fields.get_Field(featureLayer.FeatureClass.FindField(lbxFields.SelectedItem.ToString())).Type == esriFieldType.esriFieldTypeString)
                    {
                        lbxUniqueValues.Items.Add("'" + enumerator.Current.ToString() + "'");
                    }
                    else
                    {
                        lbxUniqueValues.Items.Add(enumerator.Current.ToString());
                    }
                }
            }
        }
예제 #9
0
        /// <summary>
        ///  查询图层某一字段的所有唯一值 带最多个数限制
        /// </summary>
        /// <param name="layer"></param>
        /// <param name="fieldName"></param>
        /// <param name="maxCount"></param>
        /// <returns></returns>
        public static IList <object> GetUnikeValues(IFeatureLayer layer, string fieldName, int maxCount)
        {
            IList <object>  values         = new List <object>();
            IFeatureCursor  pFeatureCursor = QueryFeatureInLayer(layer, "");
            IDataStatistics dataStatistics = new DataStatisticsClass();

            dataStatistics.Cursor = pFeatureCursor as ICursor;
            dataStatistics.Field  = fieldName;
            //  IStatisticsResults result = dataStatistics.Statistics;
            IEnumerator   myEnumerator = dataStatistics.UniqueValues;
            List <string> myValueList  = new List <string>();
            int           count        = 1;

            myEnumerator.Reset();
            try
            {
                while (myEnumerator.MoveNext())
                {
                    count++;
                    if (count > maxCount)
                    {
                        break;
                    }
                    if (myEnumerator.Current != null)
                    {
                        values.Add(myEnumerator.Current.ToString());
                    }
                }
            }
            catch (Exception e)
            {
            }
            //     IStatisticsResults  result= dataStatistics.Statistics;
            return(values);
        }
예제 #10
0
파일: UCSQLSearch.cs 프로젝트: zj8487/HyDM
        /// <summary>
        ///
        /// </summary>
        /// <param name="table"></param>
        /// <param name="sFieldName">字段别名</param>
        /// <param name="listboxValues"></param>
        private void GetUniqueValue(ITable table, string sFieldName, DevExpress.XtraEditors.ListBoxControl listboxValues)
        {
            try
            {
                IDataStatistics _dataStatistics = new DataStatisticsClass();
                ICursor         _cursor;

                string strFieldName = m_FieldTable[sFieldName].ToString();
                int    _fieldIndex  = table.Fields.FindField(strFieldName);

                _cursor = table.Search(null, false);
                listboxValues.Items.Clear();

                _dataStatistics.Field  = strFieldName;
                _dataStatistics.Cursor = _cursor;
                IEnumerator _enumerator = _dataStatistics.UniqueValues;
                _enumerator.Reset();
                while (_enumerator.MoveNext())
                {
                    if (table.Fields.get_Field(_fieldIndex).Type == esriFieldType.esriFieldTypeString)
                    {
                        listboxValues.Items.Add("'" + _enumerator.Current.ToString() + "'");
                    }
                    else
                    {
                        listboxValues.Items.Add(_enumerator.Current.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
예제 #11
0
        private double FindMaxValueInRendererFields(IFeatureClass featureClass)
        {
            ITable  pTable  = (ITable)featureClass;
            ICursor pCursor = pTable.Search(null, false);
            //Use the statistics objects to calculate the max value and the min value
            IDataStatistics pDataStatistics = new DataStatisticsClass();

            pDataStatistics.Cursor = pCursor;
            double gMaxValue = 0.0;

            foreach (System.Collections.DictionaryEntry de in fieldSymbolHashTable)
            {
                string strField = de.Key.ToString();
                //Set statistical field
                pDataStatistics.Field = strField;
                //Get the result of statistics
                IStatisticsResults pStatisticsResult = pDataStatistics.Statistics;
                double             dmaxValue         = pStatisticsResult.Maximum;
                if (dmaxValue > gMaxValue)
                {
                    gMaxValue = dmaxValue;
                }
            }
            return(gMaxValue);
        }
예제 #12
0
        /// <summary>
        /// 查询要素某字段唯一值
        /// </summary>
        /// <param name="basicField"></param>
        /// <param name="featureClass"></param>
        /// <returns></returns>
        public static List <string> QueryUniqueValue(IFeatureClass featureClass, string basicField)
        {
            try
            {
                List <string> uniqueValueSet = new List <string>();

                //得到IFeatureCursor游标
                IFeatureCursor cursor = featureClass.Search(null, false);

                IDataStatistics statistics = new DataStatisticsClass();
                statistics.Field  = basicField;
                statistics.Cursor = cursor as ICursor;
                //枚举唯一值
                IEnumerator enumValue = statistics.UniqueValues;

                enumValue.Reset();

                while (enumValue.MoveNext())
                {
                    uniqueValueSet.Add(enumValue.Current.ToString());
                }

                return(uniqueValueSet);
            }
            catch (Exception ex)
            {
                LogHelper.Error.Append(ex);

                throw ex;
            }
        }
예제 #13
0
        //获取唯一值函数
        public string[] UniqueValue(IFeatureClass pFeatureClass, string strFld)
        {
            //得到IFeatureCursor游标
            IFeatureCursor pCursor = pFeatureClass.Search(null, false);
            //IDataStatistics对象实例生成
            IDataStatistics pData = new DataStatisticsClass();

            pData.Field  = strFld;
            pData.Cursor = pCursor as ICursor;
            //枚举唯一值
            IEnumerator pEnumVar = pData.UniqueValues;
            //记录总数
            int RecordCount = pData.UniqueValueCount;

            //字符数组
            string[] strValue = new string[RecordCount];
            pEnumVar.Reset();

            int i = 0;

            while (pEnumVar.MoveNext())
            {
                strValue[i++] = pEnumVar.Current.ToString();
            }
            return(strValue);
        }
예제 #14
0
        public static List <string> GetLayerUniqueFieldValue(IFeatureLayer pFeatureLayer, string fieldName)
        {
            List <string>  arrValues      = new List <string>();
            IQueryFilter   pQueryFilter   = new QueryFilterClass();
            IFeatureCursor pFeatureCursor = null;

            pQueryFilter.SubFields = fieldName;
            pFeatureCursor         = pFeatureLayer.FeatureClass.Search(pQueryFilter, true);

            IDataStatistics pDataStati = new DataStatisticsClass();

            pDataStati.Field  = fieldName;
            pDataStati.Cursor = (ICursor)pFeatureCursor;

            IEnumerator pEnumerator = pDataStati.UniqueValues;

            pEnumerator.Reset();
            while (pEnumerator.MoveNext())
            {
                object pObj = pEnumerator.Current;
                arrValues.Add(pObj.ToString());
            }
            if (pQueryFilter != null)
            {
                Marshal.ReleaseComObject(pQueryFilter);
            }
            if (pFeatureCursor != null)
            {
                Marshal.ReleaseComObject(pFeatureCursor);
            }
            arrValues.Sort();
            return(arrValues);
        }
예제 #15
0
        public double[] Area(string sql, IFeatureClass pFeatureClass)
        {
            double[]      area;
            List <double> list = new List <double>();

            //获取当前图层;

            IFeatureCursor  pFeatureCursor  = pFeatureClass.Search(null, true);
            IDataStatistics pDataStatistics = new DataStatisticsClass();

            pDataStatistics.Field  = MainForm.dataInputInfo.zoneField;
            pDataStatistics.Cursor = (ICursor)pFeatureCursor;
            IEnumerator pEnumerator = pDataStatistics.UniqueValues;

            pEnumerator.Reset();

            while (pEnumerator.MoveNext())
            {
                object obj = pEnumerator.Current;

                //计算耕地面积;
                IQueryFilter pQueryFilter = new QueryFilterClass();
                pQueryFilter.WhereClause = "\"" + MainForm.dataInputInfo.zoneField + "\"" + " = \'" + obj + "\'" + sql;
                IFeatureCursor pFeatureCursor3 = pFeatureClass.Search(pQueryFilter, true);

                IDataStatistics pAreaStatistics3 = new DataStatisticsClass();
                pAreaStatistics3.Field  = "Shape_Area";
                pAreaStatistics3.Cursor = pFeatureCursor3 as ICursor;
                IStatisticsResults results3 = pAreaStatistics3.Statistics;
                list.Add(results3.Sum);
            }
            area = list.ToArray();
            return(area);
        }
예제 #16
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.listBox1.Items.Clear();
            IFeatureCursor  pCursor = m_feaFC.Search(null, false);
            IDataStatistics pData   = new  DataStatisticsClass();

            pData.Field  = this.FieldListbox.SelectedItem.ToString();
            pData.Cursor = pCursor  as  ICursor;
            IEnumerator pEnumVar = pData.UniqueValues;
            IField      pFied    = m_feaFC.Fields.get_Field(this.FieldListbox.SelectedIndex);

            string text;

            if (pFied.Type == esriFieldType.esriFieldTypeOID || pFied.Type == esriFieldType.esriFieldTypeDouble || pFied.Type == esriFieldType.esriFieldTypeInteger)
            {
                text = "";
            }
            else
            {
                text = "'";
            }
            while (pEnumVar.MoveNext())
            {
                this.listBox1.Items.Add(text + pEnumVar.Current.ToString() + text);
            }
        }
예제 #17
0
        // *-------------------------------------------------------------------------------------------------------
        // *功能函数:获取自动编号的下一个值
        // *开 发 者:陈亚飞
        // *开发日期:20110617
        // *参    数:表格所在工作空间,表格名称,自动编号的字段名,异常
        // *返    回:返回该字段的下一个值
        public static long GetMaxID(IFeatureWorkspace pFeaWs, string pTableName, string pFiledName, out Exception outError)
        {
            outError = null;
            long ReturnMaxID = -1;
            //获取表格
            ITable pTable = pFeaWs.OpenTable(pTableName);

            try
            {
                //表格行数
                long count = Convert.ToInt64(pTable.RowCount(null).ToString());
                if (count == 0)
                {
                    ReturnMaxID = 1;
                }
                else
                {
                    //若表格行数部位0行,则统计表格中该字段的最大值
                    IDataStatistics pDataSta = new DataStatisticsClass();
                    pDataSta.Field  = pFiledName;
                    pDataSta.Cursor = pTable.Search(null, false);
                    IStatisticsResults pStaRes = null;
                    pStaRes = pDataSta.Statistics;
                    count   = (long)pStaRes.Maximum;
                    //下一个值为最大值+1
                    ReturnMaxID = count + 1;
                }
                return(ReturnMaxID);
            }
            catch (Exception eError)
            {
                outError = new Exception("获取自动编号的下一个值失败!");
                return(-1);
            }
        }
예제 #18
0
 public void GetUniqueValues(ILayer ilayer_1, string string_2, IList ilist_1)
 {
     try
     {
         IAttributeTable table = ilayer_1 as IAttributeTable;
         if (table != null)
         {
             ITable       attributeTable = table.AttributeTable;
             IQueryFilter queryFilter    = new QueryFilterClass
             {
                 WhereClause = "1=1"
             };
             (queryFilter as IQueryFilterDefinition).PostfixClause = "Order by " + string_2;
             ICursor         cursor     = attributeTable.Search(queryFilter, false);
             IDataStatistics statistics = new DataStatisticsClass
             {
                 Field  = string_2,
                 Cursor = cursor
             };
             IEnumerator uniqueValues = statistics.UniqueValues;
             uniqueValues.Reset();
             while (uniqueValues.MoveNext())
             {
                 this.arrayList_0.Add(uniqueValues.Current);
             }
             this.arrayList_0.Sort();
         }
     }
     catch (Exception exception)
     {
         Logger.Current.Error("", exception, "");
     }
 }
예제 #19
0
        public static IEnumerable <T> GetUniqueColumnValues <T>(ICursor cursor, string columnName)
        {
            IDataStatistics dataStatistics = null;

            try
            {
                //获取null值
                T nullValue = default(T);
                dataStatistics        = new DataStatisticsClass();
                dataStatistics.Cursor = cursor;
                dataStatistics.Field  = columnName;
                IEnumerator enumerator = dataStatistics.UniqueValues;
                enumerator.Reset();
                while (enumerator.MoveNext())
                {
                    object currValue = enumerator.Current;
                    if (currValue == DBNull.Value || currValue == null)
                    {
                        yield return(nullValue);
                    }
                    else
                    {
                        yield return((T)Convert.ChangeType(currValue, typeof(T)));
                    }
                }
            }
            finally
            {
                AOUtil.ReleaseComObjectAllRefs(dataStatistics);
            }
        }
        private void btn_OK_Click(object sender, EventArgs e)
        {
            string FieldName = cbx_Field.SelectedItem.ToString();

            if (FieldName == "None")
            {
                MessageBox.Show("不可用字段,请选择其它图层"); return;
            }
            IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)m_FeatureLayer;

            pGeoFeatureLayer.ScaleSymbols = true;
            ITable  pTable  = (ITable)pGeoFeatureLayer;
            ICursor pCursor = pTable.Search(null, true);

            IDataStatistics pDataStatistics = new DataStatisticsClass();

            pDataStatistics.Cursor = pCursor;
            //Set statistical field
            pDataStatistics.Field = FieldName;
            //Get the result of statistics
            IStatisticsResults pStatisticsResult = pDataStatistics.Statistics;

            if (pStatisticsResult == null)
            {
                MessageBox.Show("Failed to gather stats on the feature class");
                return;
            }

            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            // pFillSymbol.Color = m_BackGroundColor;


            IMarkerSymbol pCharaterMarkerS = new CharacterMarkerSymbolClass();

            pCharaterMarkerS       = (IMarkerSymbol)m_StyleGallertItem.Item;
            pCharaterMarkerS.Size  = (int)numericUpDown1.Value;
            pCharaterMarkerS.Color = m_BackGroundColor;

            IProportionalSymbolRenderer pProportionalSymbolR = new ProportionalSymbolRendererClass();

            pProportionalSymbolR.ValueUnit            = esriUnits.esriUnknownUnits;
            pProportionalSymbolR.Field                = FieldName;
            pProportionalSymbolR.FlanneryCompensation = false;
            pProportionalSymbolR.MinDataValue         = pStatisticsResult.Minimum;
            pProportionalSymbolR.MaxDataValue         = pStatisticsResult.Maximum;
            pProportionalSymbolR.BackgroundSymbol     = pFillSymbol;
            pProportionalSymbolR.MinSymbol            = (ISymbol)pCharaterMarkerS;
            pProportionalSymbolR.LegendSymbolCount    = 5;
            pProportionalSymbolR.CreateLegendSymbols();

            IRotationRenderer pRotationRenderer = (IRotationRenderer)pProportionalSymbolR;

            pRotationRenderer.RotationField = FieldName;
            pRotationRenderer.RotationType  = esriSymbolRotationType.esriRotateSymbolGeographic;
            //Set the states layer renderer to the proportional symbol renderer and refresh the display
            pGeoFeatureLayer.Renderer = (IFeatureRenderer)pProportionalSymbolR;

            m_MapControl.ActiveView.ContentsChanged();
            m_MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
예제 #21
0
        /// <summary>
        /// 获取指定字段的所有值
        /// </summary>
        /// <param name="table"></param>
        /// <param name="sFieldName">字段别名</param>
        private bool GetUniqueValue(ITable table, string sFieldName)
        {
            try
            {
                IDataStatistics _dataStatistics = new DataStatisticsClass();
                ICursor         _cursor;

                int _fieldIndex = table.Fields.FindField(sFieldName);

                _cursor = table.Search(null, false);
                this.cboFieldsValue.Properties.Items.Clear();

                _dataStatistics.Field  = sFieldName;
                _dataStatistics.Cursor = _cursor;
                IEnumerator _enumerator = _dataStatistics.UniqueValues;
                _enumerator.Reset();
                while (_enumerator.MoveNext())
                {
                    cboFieldsValue.Properties.Items.Add(_enumerator.Current.ToString());
                }
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
                //MessageBox.Show(ex.Message);
            }
            return(true);
        }
예제 #22
0
        private void BtnUniqeValue_Click(object sender, EventArgs e)
        {
            this.lsbUniqeValue.Items.Clear();
            if (this.lsbFields.SelectedIndex > -1)
            {
                try
                {
                    IFeatureLayer pFL      = (IFeatureLayer)m_pLayer;
                    IFeatureClass pFtClass = pFL.FeatureClass;
                    IFields       pFlds    = pFtClass.Fields;
                    string        strFld   = this.lsbFields.SelectedItem.ToString();
                    int           nIndex   = pFlds.FindField(strFld);
                    IField        pFld     = pFlds.get_Field(nIndex);

                    ICursor         pCursor = (ICursor)pFL.Search(null, false);
                    IDataStatistics pData   = new DataStatisticsClass();
                    pData.Field  = strFld;
                    pData.Cursor = pCursor;

                    System.Collections.IEnumerator pEnumer;
                    object Value = null;
                    pEnumer = (IEnumerator)pData.UniqueValues;
                    int nCount = pData.UniqueValueCount;
                    for (int i = 0; i < nCount; i++)
                    {
                        pEnumer.MoveNext();
                        Value = pEnumer.Current;
                        //再根据字段类型来设置显示
                        switch (pFld.Type)
                        {
                        case esriFieldType.esriFieldTypeString:
                            this.lsbUniqeValue.Items.Add("'" + Value.ToString() + "'");
                            break;

                        case esriFieldType.esriFieldTypeBlob:
                            break;

                        case esriFieldType.esriFieldTypeDate:
                            break;

                        case esriFieldType.esriFieldTypeGeometry:
                            break;

                        case esriFieldType.esriFieldTypeRaster:
                            break;

                        default:
                            this.lsbUniqeValue.Items.Add(Value.ToString());
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "错误!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
예제 #23
0
 private int GetUniqueValuesCount(IFeatureClass featureClass, string strField)
 {
     ICursor cursor = (ICursor)featureClass.Search(null, false);
     IDataStatistics dataStatistics = new DataStatisticsClass();
     dataStatistics.Field = strField;
     dataStatistics.Cursor = cursor;
     System.Collections.IEnumerator enumerator = dataStatistics.UniqueValues;
     return dataStatistics.UniqueValueCount;
 }
예제 #24
0
파일: Form2.cs 프로젝트: ranhongwu/AE-Test
        private void get_Unique_Click(object sender, EventArgs e)
        {
            UniqueList.Items.Clear();
            try
            {
                /*IDataset pDataset = (IDataset)currentFeatureLayer.FeatureClass;
                 * //IQueryDef接口定义查询信息
                 * IQueryDef pQueryDef = ((IFeatureWorkspace)pDataset.Workspace).CreateQueryDef();
                 * //查询的表格名称
                 * pQueryDef.Tables = pDataset.Name;
                 * //SQL中distinct用来查询唯一值
                 * pQueryDef.SubFields = "distinct "+currentFieldName;
                 * ICursor pCursor = pQueryDef.Evaluate();
                 * IFields pFields = currentFeatureLayer.FeatureClass.Fields;
                 * IField pField = pFields.get_Field(pFields.FindField(currentFieldName));
                 *
                 * IRow pRow = pCursor.NextRow();
                 * while (pRow != null)
                 * {
                 *  //string类型的字段sql查询时需要加单引号
                 *  if (pField.Type == esriFieldType.esriFieldTypeString)
                 *      UniqueList.Items.Add("\'" + pRow.get_Value(0).ToString() + "\'");
                 *  else
                 *      UniqueList.Items.Add(pRow.get_Value(0).ToString());
                 *   pRow= pCursor.NextRow();
                 * }*/

                IQueryFilter pQF = new QueryFilterClass();
                pQF.SubFields = currentFieldName;
                IFeatureCursor  pFC = currentFeatureLayer.FeatureClass.Search(pQF, false);
                IDataStatistics pDS = new DataStatisticsClass();
                pDS.Field  = currentFieldName;
                pDS.Cursor = pFC as ICursor;

                //此处初始化IField的目的是为了判断属性的类别string或者double
                IFields pFields = currentFeatureLayer.FeatureClass.Fields;
                IField  pField  = pFields.get_Field(pFields.FindField(currentFieldName));

                System.Collections.IEnumerator pEnum = pDS.UniqueValues;
                pEnum.Reset();
                while (pEnum.MoveNext())
                {
                    if (pField.Type == esriFieldType.esriFieldTypeString)
                    {
                        UniqueList.Items.Add("\'" + pEnum.Current.ToString() + "\'");
                    }
                    else
                    {
                        UniqueList.Items.Add(pEnum.Current.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
예제 #25
0
        private static IUniqueValueRenderer GenerateUniqueValueRenderer(IFeatureLayer featureLayer)
        {
            IFeatureWorkspace featureWorkspace = ((IDataset)featureLayer.FeatureClass).Workspace as IFeatureWorkspace;
            ITable            table            = featureWorkspace.OpenTable(TableName);

            string             relClassName = string.Format("{0}_{1}", ((IDataset)featureLayer.FeatureClass).Name, ((IDataset)table).Name);
            IRelationshipClass relClass     = featureWorkspace.OpenRelationshipClass(relClassName);

            IDisplayRelationshipClass displayRelClass = featureLayer as IDisplayRelationshipClass;

            if (displayRelClass == null)
            {
                return(null);
            }
            displayRelClass.DisplayRelationshipClass(relClass, esriJoinType.esriLeftOuterJoin);

            IUniqueValueRenderer uvRenderer = new UniqueValueRendererClass {
                FieldCount = 1
            };

            uvRenderer.Field[0] = string.Format("{0}.{1}", ((IDataset)table).Name, JoinField);

            IFeatureCursor      cursor         = ((IGeoFeatureLayer)featureLayer).SearchDisplayFeatures(null, true);
            DataStatisticsClass dataStatistics = new DataStatisticsClass
            {
                Field  = uvRenderer.Field[0],
                Cursor = cursor as ICursor
            };

            IEnumerator pEnumerator = dataStatistics.UniqueValues;

            pEnumerator.Reset();

            Random random = new Random();

            while (pEnumerator.MoveNext())
            {
                string value = Convert.ToString(pEnumerator.Current);

                RgbColorClass fillColor = new RgbColorClass
                {
                    Red   = random.Next(0, 255),
                    Green = random.Next(0, 255),
                    Blue  = random.Next(0, 255)
                };

                SimpleFillSymbolClass fillSymbol = new SimpleFillSymbolClass {
                    Color = fillColor
                };

                uvRenderer.AddValue(value, "ZONE", fillSymbol);
            }

            Marshal.ReleaseComObject(cursor);
            return(uvRenderer);
        }
예제 #26
0
        //得到地图中的指定特征图层指定字段的不重复值
        private IEnumVariantSimple GetUniqueValue(string strFieldName, IMap pMap, string strLayerName)
        {
            IFeatureLayer   pFeatLayer   = Utility.FindFeatLayer(strLayerName, pMainFrm);
            ICursor         pCursor      = pFeatLayer.Search(null, false) as ICursor;
            IDataStatistics pDatasetStat = new DataStatisticsClass();

            pDatasetStat.Field  = strFieldName;
            pDatasetStat.Cursor = pCursor;
            return(pDatasetStat.UniqueValues as IEnumVariantSimple);
        }
예제 #27
0
        /// <summary>
        /// 获取当前版本信息(获取环境中数据库版本表中VERSION的最大值加1做为当前编辑生成版本)
        /// </summary>
        /// <param name="ex"></param>
        /// <returns></returns>
        public int GetVersion(out Exception ex)
        {
            ex = null;
            int iVersion = -1;

            if (this.HisWs == null)
            {
                ex = new Exception("更新环境库尚未初始化"); return(-1);
            }
            try
            {
                ITable getTable = (this.HisWs as IFeatureWorkspace).OpenTable(this.m_sDBVersionTable);
                if (getTable.RowCount(null) == 0)
                {
                    return(1);
                }
                else
                {
                    int index = getTable.FindField("VERSION");
                    if (index < 0)
                    {
                        ex = new Exception("数据库版本表中未能找到VERSION字段"); return(-1);
                    }
                    ICursor TableCursor = getTable.Search(null, false);
                    //IRow getRow = TableCursor.NextRow();
                    //while (getRow != null)
                    //{
                    //    int getValue =Convert.ToInt32(getRow.get_Value(index));
                    //    if (getValue > iVersion) iVersion = getValue;
                    //    getRow = TableCursor.NextRow();
                    //}
                    IDataStatistics dataStatistics = new DataStatisticsClass();
                    dataStatistics.Field  = "VERSION";
                    dataStatistics.Cursor = TableCursor;
                    ESRI.ArcGIS.esriSystem.IStatisticsResults statisticsResults = dataStatistics.Statistics;
                    double getMaxVersion = statisticsResults.Maximum;
                    iVersion = Convert.ToInt32(getMaxVersion);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(TableCursor);
                }
                return(iVersion + 1);
            }
            catch (Exception eError)
            {
                //******************************************
                //guozheng added System Exception log
                if (SysCommon.Log.Module.SysLog == null)
                {
                    SysCommon.Log.Module.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog();
                }
                SysCommon.Log.Module.SysLog.Write(eError);
                //******************************************
                ex = new Exception("获取新数据库版本信息失败。\n原因:" + eError.Message);
                return(-1);
            }
        }
예제 #28
0
        public ChartRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName)
        {
            IGeoFeatureLayer pGeoFeaturelayer = pFtLayer as IGeoFeatureLayer;

            IChartRenderer pChart = new ChartRendererClass();



            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName;

            double pMax = pDataStat.Statistics.Maximum;



            IRendererFields pRenderFields = pChart as IRendererFields;

            pRenderFields.AddField(pFieldName, pFieldName);

            IBarChartSymbol pBarChart = new BarChartSymbolClass();

            pBarChart.Width = 5;


            IMarkerSymbol pMarkerSymbol = pBarChart as IMarkerSymbol;


            pMarkerSymbol.Size = 12;


            IChartSymbol pChartSym = pBarChart as IChartSymbol;

            pChartSym.MaxValue = pMax;


            ISymbolArray pSymbolArr = pBarChart as ISymbolArray;


            IFillSymbol pFillSy = new SimpleFillSymbolClass();

            pFillSy.Color = GetRgb(220, 0, 0);

            pSymbolArr.AddSymbol(pFillSy as ISymbol);

            pGeoFeaturelayer.Renderer = pChart as IFeatureRenderer;


            pMapcontrol.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
예제 #29
0
 public bool GetUniqueValues(ILayer ilayer_1, string string_0, IList ilist_1)
 {
     try
     {
         ITable displayTable = null;
         if (ilayer_1 is IDisplayTable)
         {
             displayTable = (ilayer_1 as IDisplayTable).DisplayTable;
         }
         else
         {
             IAttributeTable table2 = ilayer_1 as IAttributeTable;
             if (table2 != null)
             {
                 displayTable = table2.AttributeTable;
             }
             else
             {
                 displayTable = ilayer_1 as ITable;
             }
         }
         if (displayTable == null)
         {
             return(false);
         }
         ICursor         o          = displayTable.Search(null, false);
         IDataStatistics statistics = new DataStatisticsClass
         {
             Field  = string_0,
             Cursor = o
         };
         if ((statistics.UniqueValueCount > 500) &&
             (MessageBox.Show("唯一值数大于500,是否继续", "提示", MessageBoxButtons.YesNo) == DialogResult.No))
         {
             Marshal.ReleaseComObject(o);
             o = null;
             return(false);
         }
         this.bool_1 = true;
         IEnumerator uniqueValues = statistics.UniqueValues;
         uniqueValues.Reset();
         while (uniqueValues.MoveNext())
         {
             this.ilist_0.Add(uniqueValues.Current);
         }
         (this.ilist_0 as ArrayList).Sort();
         return(true);
     }
     catch (Exception exception)
     {
         Logger.Current.Error("", exception, "");
     }
     return(false);
 }
예제 #30
0
        /// <summary>
        /// 获取唯一值
        /// </summary>
        /// <param name="pFeatureClass"></param>
        /// <param name="fieldName"></param>
        /// <returns></returns>
        public static IEnumerator GetUniqueValue(IFeatureClass pFeatureClass, string fieldName)
        {
            IFeatureCursor  pFeatureCursor  = pFeatureClass.Search(null, true);
            IDataStatistics pDataStatistics = new DataStatisticsClass();

            pDataStatistics.Field  = fieldName;
            pDataStatistics.Cursor = pFeatureCursor as ICursor;
            IEnumerator pEnumerator = pDataStatistics.UniqueValues;

            return(pEnumerator);
        }
예제 #31
0
        private void button2_Click(object sender, EventArgs e)
        {
            GetWorkPath();
            IWorkspace        ws   = OpenShapfileWorkspace(this.strFilePath);
            IFeatureWorkspace pFWS = ws as IFeatureWorkspace;

            if (strFileName == null || strFileName != "UK_CoastlineSplit")
            {
                MessageBox.Show("Please select the CoastlineSplit in TOC");
                return;
            }
            IFeatureClass fcCoastLineSplit = pFWS.OpenFeatureClass(strFileName);
            //IQueryFilter queryFilter = new QueryFilterClass();
            ICursor cursor = (ICursor)fcCoastLineSplit.Search(null, false);
            //Get statistic of length field and get min and max values
            IDataStatistics dataStatistic = new DataStatisticsClass();
            int             fieldindex    = fcCoastLineSplit.Fields.FindField("length");

            if (fieldindex == -1)
            {
                MessageBox.Show("Please add 'length' field!");
                return;
            }
            dataStatistic.Field  = "length";
            dataStatistic.Cursor = cursor;
            ESRI.ArcGIS.esriSystem.IStatisticsResults staResult = dataStatistic.Statistics;
            // round the result in 4 decimals
            maxLength     = Math.Round(staResult.Maximum, 4).ToString();
            minLength     = Math.Round(staResult.Minimum, 4).ToString();
            meanLength    = Math.Round(staResult.Mean, 4).ToString();
            textBox2.Text = minLength;
            textBox3.Text = maxLength;
            textBox4.Text = meanLength;
            // If minimum length is smaller than 1 meter, set the minimum to the minimum value greater than 1 meter
            if (staResult.Minimum <= 1)
            {
                if (MessageBox.Show("The minimum length is shorter than 1 meter, change the minimum value greater than 1?", "Note", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    IQueryFilter queryFilter = new QueryFilterClass();
                    queryFilter.WhereClause = "length > 1";
                    ISelectionSet  pSelectionSet = fcCoastLineSplit.Select(queryFilter, esriSelectionType.esriSelectionTypeHybrid, esriSelectionOption.esriSelectionOptionNormal, null);
                    IFeatureCursor pFCursor;
                    ICursor        pCursor;
                    pSelectionSet.Search(null, true, out pCursor);
                    pFCursor             = pCursor as IFeatureCursor;
                    dataStatistic        = new DataStatisticsClass();
                    dataStatistic.Field  = "length";
                    dataStatistic.Cursor = pCursor;
                    staResult            = dataStatistic.Statistics;
                    minLength            = Math.Round(staResult.Minimum, 4).ToString();
                    textBox2.Text        = minLength;
                }
            }
        }
예제 #32
0
        // 属性统计
        public static IStatisticsResults GetStatResult(IFeatureLayer featureLayer, string fieldName)
        {
            ITable          pTable          = featureLayer as ITable;
            ICursor         pCursor         = pTable.Search(null, false);
            IDataStatistics pDataStatistics = new DataStatisticsClass()
            {
                Cursor = pCursor, Field = fieldName
            };

            return(pDataStatistics.Statistics);
        }
        public ProPortialRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer,  string pFieldName)
        {
            IGeoFeatureLayer pGeo = pFtLayer as IGeoFeatureLayer;

            IProportionalSymbolRenderer pProRender = new ProportionalSymbolRendererClass();

            pProRender.Field = pFieldName;

            pProRender.ValueUnit = esriUnits.esriUnknownUnits;

            ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbolClass();

            pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;

            pMarkerSymbol.Size = 2;

            pMarkerSymbol.Color = GetRGBColor(255, 0, 0);

            pProRender.MinSymbol = pMarkerSymbol as ISymbol;

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName;

            pProRender.MinDataValue = pDataStat.Statistics.Minimum;

            pProRender.MaxDataValue = pDataStat.Statistics.Maximum;

            IFillSymbol pFillS = new SimpleFillSymbolClass();

            pFillS.Color = GetRGBColor(239, 228, 190);

            ILineSymbol pLineS = new SimpleLineSymbolClass();

            pLineS.Width = 2;

            pFillS.Outline = pLineS;

            ISimpleFillSymbol pSFillS = pFillS as ISimpleFillSymbol;

            pSFillS.Color = GetRGBColor(100, 100, 253);

            pProRender.BackgroundSymbol = pFillS;

            pGeo.Renderer = pProRender as IFeatureRenderer;

            pMapcontrol.ActiveView.Refresh();
        }
        public ChartRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName)
        {
            IGeoFeatureLayer pGeoFeaturelayer = pFtLayer as IGeoFeatureLayer;

            IChartRenderer pChart = new ChartRendererClass();

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName;

            double pMax = pDataStat.Statistics.Maximum;

            IRendererFields pRenderFields = pChart as IRendererFields;

            pRenderFields.AddField(pFieldName,pFieldName);

            IBarChartSymbol pBarChart = new BarChartSymbolClass();

            pBarChart.Width = 5;

            IMarkerSymbol pMarkerSymbol = pBarChart as IMarkerSymbol;

            pMarkerSymbol.Size = 12;

            IChartSymbol pChartSym = pBarChart as IChartSymbol;

            pChartSym.MaxValue = pMax;

            ISymbolArray pSymbolArr = pBarChart as ISymbolArray;

            IFillSymbol pFillSy = new SimpleFillSymbolClass();

            pFillSy.Color = GetRgb(220, 0, 0);

            pSymbolArr.AddSymbol(pFillSy as ISymbol);

            pGeoFeaturelayer.Renderer = pChart as IFeatureRenderer;

            pMapcontrol.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
예제 #35
0
 //�õ���ͼ�е�ָ������ͼ��ָ���ֶεIJ��ظ�ֵ
 private IEnumVariantSimple GetUniqueValue(string strFieldName, IMap pMap, string strLayerName)
 {
     IFeatureLayer pFeatLayer = Utility.FindFeatLayer(strLayerName, pMainFrm);
     ICursor pCursor = pFeatLayer.Search(null, false) as ICursor;
     IDataStatistics pDatasetStat = new DataStatisticsClass();
     pDatasetStat.Field = strFieldName;
     pDatasetStat.Cursor = pCursor;
     return pDatasetStat.UniqueValues as IEnumVariantSimple;
 }
예제 #36
0
 /// <summary>
 /// 获取字段唯一值
 /// </summary>
 public static string[] GetUniqueValue(IFeatureClass pFeatureClass, string strFld)
 {
     
     //得到IFeatureCursor游标
     IFeatureCursor pCursor = pFeatureClass.Search(null, false);
     //coClass对象实例生成
     IDataStatistics pData = new DataStatisticsClass();
     pData.Field = strFld;
     pData.Cursor = pCursor as ICursor;
     //枚举唯一值
     System.Collections.IEnumerator pEnumVar = pData.UniqueValues;
     //记录总数
     int RecordCount = pData.UniqueValueCount;
     //字符数组
     string[] strValue = new string[RecordCount];
     pEnumVar.Reset();
     int i = 0;
     while (pEnumVar.MoveNext())
     {
         strValue[i++] = pEnumVar.Current.ToString();
     }
     return strValue;
 }
예제 #37
0
        private void btnPieChartRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = this.mainMapControl.get_Layer(0) as IGeoFeatureLayer;

            //找出两个用于着色字段的最大值的最大值(这次加上最小值之和,这个函数的尾后部分用到,用于在着色对象里确定最小的PieChartSymbol的大小)
            double p1, p2, max, m1, m2, min;
            ICursor pCursor = pGeoFeatLyr.Search(null, true) as ICursor;
            IDataStatistics pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1994(";
            p1 = pDataStatistics.Statistics.Maximum;
            m1 = pDataStatistics.Statistics.Minimum;
            pCursor = pGeoFeatLyr.Search(null, true) as ICursor;
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            p2 = pDataStatistics.Statistics.Maximum;
            m2 = pDataStatistics.Statistics.Minimum;
            max = p1 > p2 ? p1 : p2;
            min = m1 + m2;//最小值之和

            //以下生成好三个SimpleFillSymbol,留作后用
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Color = getRGBColor(255, 0, 0);
            pSimpleFillSymbol.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol2 = new SimpleFillSymbolClass();
            pSimpleFillSymbol2.Color = getRGBColor(0, 0, 255);
            pSimpleFillSymbol2.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol3 = new SimpleFillSymbolClass();
            pSimpleFillSymbol3.Color = getRGBColor(0, 255, 0);

            //以下创建并设置PieChartSymbol对象,并设置PieChartSymbol对象的各个SimpleFillSymbol
            IPieChartSymbol pPieChartSymbol = new PieChartSymbolClass();
            pPieChartSymbol.Clockwise = true;
            pPieChartSymbol.UseOutline = false;
            IChartSymbol pChartSymbol = pPieChartSymbol as IChartSymbol;
            pChartSymbol.MaxValue = max;
            ISymbolArray pSymbolArray = pPieChartSymbol as ISymbolArray;
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol);
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol2);
            IMarkerSymbol pMarkerSymbol = pPieChartSymbol as IMarkerSymbol;
            pMarkerSymbol.Size = 5;//PieChartSymbol的大小(我觉得是饼的厚度)

            //以下创建并设置着色对象
            IChartRenderer pChartRenderer = new ChartRendererClass();
            pChartRenderer.BaseSymbol = pSimpleFillSymbol3 as ISymbol;
            pChartRenderer.ChartSymbol = pChartSymbol;
            pChartRenderer.UseOverposter = true;
            pChartRenderer.Label = "GDP";
            IPieChartRenderer pPieChartRenderer = pChartRenderer as IPieChartRenderer;
            pPieChartRenderer.MinSize = 0.5;//最小的尺码关键
            pPieChartRenderer.MinValue = 1;//最小尺码的值,为什么0不可以??????????????关键
            pPieChartRenderer.ProportionalBySum = true;//PieChartSymbol的大小按照字段和成比例,关键
                                                       //若PieChartSymbol的大小只按一个字段,则须设置.ProportionalField为该字段
            IRendererFields pRenderFields = pChartRenderer as IRendererFields;//添加用于着色的字段
            pRenderFields.AddField("GDP_1994(", "GDP_1994(");
            pRenderFields.AddField("GDP_1999(", "GDP_1999(");
            pChartRenderer.CreateLegend();//生成图例

            pGeoFeatLyr.Renderer = pChartRenderer as IFeatureRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
예제 #38
0
        /// <summary>
        /// 按下"添加所有值"按钮后,让table按当前字段的值进行排序,并把信息添加到listView里面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUniValueAddAllValues_Click(object sender, EventArgs e)
        {
            try
            {
                string currentFieldName = this.cbbUniValueField.Text;//当前字段名

                string currentFieldType = this.lsvFields.FindItemWithText(currentFieldName).SubItems[2].Text;//当前字段类型
                bool currentTypeIsNumeric = false;//判断当前字段类型是否为数字类型
                if (currentFieldType == "Short Integer" || currentFieldType == "Long Integer" || currentFieldType == "Float" || currentFieldType == "Double")
                {
                    currentTypeIsNumeric = true;
                }

                this.lsvUniqueValue.Items.Clear();

                //对Table中当前字段进行排序,把结果赋给Cursor
                ITable pTable = this.pLayer as ITable;
                ITableSort pTableSort = new TableSortClass();
                pTableSort.Table = pTable;
                pTableSort.Fields = currentFieldName;
                pTableSort.set_Ascending(currentFieldName, true);
                pTableSort.set_CaseSensitive(currentFieldName, true);
                pTableSort.Sort(null);//排序
                ICursor pCursor = pTableSort.Rows;

                //字段统计
                IDataStatistics pDataStatistics = new DataStatisticsClass();
                pDataStatistics.Cursor = pCursor;
                pDataStatistics.Field = currentFieldName;
                System.Collections.IEnumerator pEnumeratorUniqueValues = pDataStatistics.UniqueValues;//唯一值枚举
                int uniqueValueCount = pDataStatistics.UniqueValueCount;//唯一值的个数

                //table中当前字段有值(不为null)的row的个数,并把信息添加到listView的第一行
                 IQueryFilter pQueryFilter = new QueryFilterClass();
                pQueryFilter.AddField(currentFieldName);
                int valueSum = pTable.RowCount(pQueryFilter);
                this.lsvUniqueValue.Items.Add(currentFieldName);
                this.lsvUniqueValue.Items[0].SubItems.Add(currentFieldName);
                this.lsvUniqueValue.Items[0].SubItems.Add(valueSum.ToString());

                //循环把信息添加到listView里
                int i = 1;//注意!是从1开始,因为第一行已经被占用
                string currentValue = null;//指示当前的值
                //IDataStatistics pUniValueStatistics = new DataStatisticsClass();
                int currentValueCount;
                for (pEnumeratorUniqueValues.Reset(); pEnumeratorUniqueValues.MoveNext(); i++)
                {
                    currentValue = pEnumeratorUniqueValues.Current.ToString();//当前值
                    this.lsvUniqueValue.Items.Add(currentValue);
                    this.lsvUniqueValue.Items[i].SubItems.Add(currentValue);
                    //需要这个if的原因是SQL语句中数字和非数字的写法不一样
                    if (currentTypeIsNumeric)
                    {
                        pQueryFilter.WhereClause = "\"" + currentFieldName + "\"" + " = " + currentValue;
                    }
                    else
                    {
                        pQueryFilter.WhereClause = "\"" + currentFieldName + "\"" + " = " + "'" + currentValue + "'";
                    }
                    currentValueCount = pTable.RowCount(pQueryFilter);//table中该字段是当前值的row的个数
                    this.lsvUniqueValue.Items[i].SubItems.Add(currentValueCount.ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
예제 #39
0
        /// <summary>
        /// get the unique values from a specified field in a specified featureclass using the
        /// specified filter
        /// </summary>
        public static List<string> GetUniqueValues(IFeatureClass ThisFC,
            string FieldName, string WhereClause, ref string ErrorMessage)
        {
            IDataStatistics ThisDataStatistics;
            System.Collections.IEnumerator ValueList;
            IFeatureCursor ThisFCursor;
            IQueryFilter ThisQueryFilter;
            List<string> UniqueValues;
            string CurrentValue;

            UniqueValues = new List<string>();

            ThisQueryFilter = new QueryFilterClass();
            ThisQueryFilter.WhereClause = WhereClause;

            try
            {
                ThisFCursor = ThisFC.Search(ThisQueryFilter, false);

                ThisDataStatistics = new DataStatisticsClass();
                ThisDataStatistics.Field = FieldName;
                ThisDataStatistics.Cursor = ThisFCursor as ICursor;

                ValueList = ThisDataStatistics.UniqueValues;

                while (ValueList.MoveNext())
                {
                    CurrentValue = (string)Util.SafeConvert(ValueList.Current, typeof(string));
                    if (string.IsNullOrEmpty(CurrentValue)) continue;

                    UniqueValues.Add(CurrentValue);
                }
            }
            catch (Exception ex)
            {
                ErrorMessage = "Error occured while obtaining unique values. " + ex.Message;
            }

            return UniqueValues;
        }
예제 #40
0
 //比例图
 private void button4_Click(object sender, EventArgs e)
 {
     IGeoFeatureLayer geoFeatureLayer;
     IFeatureLayer featureLayer;
     IProportionalSymbolRenderer proportionalSymbolRenderer;
     ITable table;
     ICursor cursor;
     IDataStatistics dataStatistics;
     IStatisticsResults statisticsResult;
     stdole.IFontDisp fontDisp;
     geoFeatureLayer = getGeoLayer("东丰县行政区域");
     featureLayer = geoFeatureLayer as IFeatureLayer;
     table = geoFeatureLayer as ITable;
     cursor = table.Search(null, true);
     dataStatistics = new DataStatisticsClass();
     dataStatistics.Cursor = cursor;
     dataStatistics.Field = "SHAPE_Area";
     statisticsResult = dataStatistics.Statistics;
     if (statisticsResult != null)
     {
         IFillSymbol fillSymbol = new SimpleFillSymbolClass();
         fillSymbol.Color = getRGB(0, 255, 0);
         ICharacterMarkerSymbol characterMarkerSymbol = new CharacterMarkerSymbolClass();
         fontDisp = new stdole.StdFontClass() as stdole.IFontDisp;
         fontDisp.Name = "arial";
         fontDisp.Size = 20;
         characterMarkerSymbol.Font = fontDisp;
         characterMarkerSymbol.CharacterIndex = 90;
         characterMarkerSymbol.Color = getRGB(255, 0, 0);
         characterMarkerSymbol.Size = 8;
         proportionalSymbolRenderer = new ProportionalSymbolRendererClass();
         proportionalSymbolRenderer.ValueUnit = esriUnits.esriUnknownUnits;
         proportionalSymbolRenderer.Field = "SHAPE_Area";
         proportionalSymbolRenderer.FlanneryCompensation = false;
         proportionalSymbolRenderer.MinDataValue = statisticsResult.Minimum;
         proportionalSymbolRenderer.MaxDataValue = statisticsResult.Maximum;
         proportionalSymbolRenderer.BackgroundSymbol = fillSymbol;
         proportionalSymbolRenderer.MinSymbol = characterMarkerSymbol as ISymbol;
         proportionalSymbolRenderer.LegendSymbolCount = 10;
         proportionalSymbolRenderer.CreateLegendSymbols();
         geoFeatureLayer.Renderer = proportionalSymbolRenderer as IFeatureRenderer;
     }
     this.axMapControl1.Refresh();
 }
예제 #41
0
        private IStatisticsResults GetDataStatistics(IFeatureLayer pFeaturelayer, string strFieldname)
        {
            IMxDocument pmxdoc = ArcMap.Document as IMxDocument;
            IMap pmap = pmxdoc.FocusMap;

            IFeatureSelection pFSel = pFeaturelayer as IFeatureSelection;
            ISelectionSet pSelSet = pFSel.SelectionSet;

            ICursor pCur;

            pSelSet.Search(null, false, out pCur);

            IFeatureClass pFeatureClass = pFeaturelayer.FeatureClass;
            IDataStatistics pData = new DataStatisticsClass();
            IStatisticsResults pStatResults;

            pData.Cursor = pCur;
            pData.Field = strFieldname;
            pStatResults = pData.Statistics;

            return pStatResults;
        }
예제 #42
0
        public static double Statistic2(IFeatureClass FeatureClass, string FieldName,IFeature Feature,string WhererClause)
        {
            var spatialFilter = new SpatialFilterClass
            {
                Geometry = Feature.Shape,
                WhereClause = WhererClause,
            };

            var rels = new []{esriSpatialRelEnum.esriSpatialRelIntersects, esriSpatialRelEnum.esriSpatialRelContains };
            IFeatureCursor featureCursor = null;
            ICursor cursor = null;
            double statisticVal = 0.0;
            foreach(var rel in rels)
            {
                spatialFilter.SpatialRel = rel;
                featureCursor = FeatureClass.Search(spatialFilter, false);
                cursor = featureCursor as ICursor;

                IDataStatistics dataStatistic;
                IStatisticsResults statisticResults;
                if (cursor != null)
                {
                    dataStatistic = new DataStatisticsClass();
                    dataStatistic.Cursor = cursor;
                    dataStatistic.Field = FieldName;
                    statisticResults = dataStatistic.Statistics;
                    statisticVal += statisticResults.Sum;
                }
            }
            System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);
            return statisticVal;
        }
예제 #43
0
        private void btnProportionalSymbolRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = (IGeoFeatureLayer)this.mainMapControl.get_Layer(0);
            ITable pTable = pGeoFeatLyr as ITable;
            IQueryFilter pQueryFilter = new QueryFilterClass();
            pQueryFilter.AddField("GDP_1999(");
            pQueryFilter.WhereClause = "";
            ICursor pCursor;//DataStatistic对象统计需要用一个Cursor
            pCursor = pTable.Search(pQueryFilter, true);

            IDataStatistics pDataStatistics = new DataStatisticsClass();//用于统计字段信息,需要一个Cursor
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            IStatisticsResults pStatisticsResults;//字段统计结果
            pStatisticsResults = pDataStatistics.Statistics;

            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();//用于背景
            pSimpleFillSymbol.Color = this.getHsvColor(60, 120, 60);

            ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();//标注符号(最小),注意size属性
            pSimpleMarkerSymbol.Color = this.getHsvColor(120, 100, 75);
            pSimpleMarkerSymbol.Size = 0.5;
            //以下创建并设置着色对象
            IProportionalSymbolRenderer pProportionalSymbolRenderer = new ProportionalSymbolRendererClass();
            pProportionalSymbolRenderer.ValueUnit = esriUnits.esriUnknownUnits;
            pProportionalSymbolRenderer.Field = "GDP_1999(";
            pProportionalSymbolRenderer.FlanneryCompensation = false;
            pProportionalSymbolRenderer.MinDataValue = 1;//为什么用pStatisticsResults.Minimum会出错??????????
            pProportionalSymbolRenderer.MaxDataValue = pStatisticsResults.Maximum;
            pProportionalSymbolRenderer.BackgroundSymbol = pSimpleFillSymbol as IFillSymbol;
            pProportionalSymbolRenderer.MinSymbol = pSimpleMarkerSymbol as ISymbol;//最小值的符号,关键!!!!!!!
            pProportionalSymbolRenderer.LegendSymbolCount = 3;
            pProportionalSymbolRenderer.CreateLegendSymbols();

            pGeoFeatLyr.Renderer = pProportionalSymbolRenderer as IFeatureRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
예제 #44
0
        public Hashtable GetFieldStatistics(string layerName, string fieldName, bool selectedOnly=false)
        {
            Hashtable result = new Hashtable();
            ILayer layer = this._getLayerByName(layerName);
            if (layer != null && layer is IFeatureLayer)
            {
                ICursor cursor;
                if (selectedOnly == true)
                {
                    ((IFeatureSelection)layer).SelectionSet.Search(null, false, out cursor);
                }
                else
                {
                    IFeatureLayer featureLayer = layer as IFeatureLayer;
                    cursor = (ICursor)featureLayer.FeatureClass.Search(null, false);
                }

                result.Add("layer_name", layerName);
                result.Add("field_name", fieldName);

                IDataStatistics dataStatistics = new DataStatisticsClass();
                dataStatistics.Cursor = cursor;
                dataStatistics.Field = fieldName;
                IStatisticsResults statResults = dataStatistics.Statistics;
                Hashtable stats = new Hashtable();
                stats.Add("count", statResults.Count);
                stats.Add("sum", statResults.Sum);
                stats.Add("mean", statResults.Mean);
                stats.Add("std", statResults.StandardDeviation);
                stats.Add("minimum", statResults.Minimum);
                stats.Add("maximum", statResults.Maximum);
                result.Add("statistics", stats);

                // Create a data graph.
                IDataGraphT dataGraphT = new DataGraphTClass();
                // Add the histogram series.
                ISeriesProperties seriesProps = dataGraphT.AddSeries("bar:histogram");
                seriesProps.SourceData = (IFeatureLayer)layer; //((IAttributeTable)layer).AttributeTable;
                seriesProps.SetField(0, fieldName);
                
                // Set the histogram properties.
                IHistogramSeriesProperties histogramSeriesProps = (IHistogramSeriesProperties)seriesProps;
                histogramSeriesProps.BinCount = 20;

                if (selectedOnly == true)
                {
                    dataGraphT.UseSelectedSet = true;
                    dataGraphT.HighlightSelection = false;
                    //seriesProps.SourceData = ((IFeatureSelection)layer).SelectionSet;
                }
                else
                {
                    dataGraphT.UseSelectedSet = true;
                    dataGraphT.HighlightSelection = true;
                    //seriesProps.SourceData = ((IFeatureLayer)layer).FeatureClass;
                }
                // Set titles.
                dataGraphT.GeneralProperties.Title = "Histogram of " + fieldName;
                dataGraphT.AxisProperties[1].Title = "COUNT";
                // Update the data graph.
                dataGraphT.Update(null);
                // Export the graph to file (the format depends on the file extension).
                string tempDir = System.IO.Path.GetTempPath();
                string outImageFile = System.IO.Path.Combine(tempDir, layerName+ "_" + fieldName + DateTime.Now.ToString("_MM_dd_yy_H_mm_ss_") + "_histogram.bmp");

                if (System.IO.File.Exists(outImageFile))
                {
                    System.IO.File.Delete(outImageFile);
                }

                dataGraphT.ExportToFile(outImageFile);

                result.Add("histogram", outImageFile);
            }
            return result;
        }
        private void cbxFields_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbxFields.SelectedItem != null)
            {
                strRendererField = cbxFields.SelectedItem.ToString();
                //Find the selected field in the feature layer
                IFeatureClass featureClass = layer2Symbolize.FeatureClass;
                IField field = featureClass.Fields.get_Field(featureClass.FindField(strRendererField));

                //Get a feature cursor
                ICursor cursor = (ICursor)layer2Symbolize.Search(null, false);

                //Create a DataStatistics object and initialize properties
                IDataStatistics dataStatistics = new DataStatisticsClass();
                dataStatistics.Field = field.Name;
                dataStatistics.Cursor = cursor;
                //Get the result statistics
                IStatisticsResults statisticsResults = dataStatistics.Statistics;

                //Set the values min min and max values
                txtMinValue.Text = statisticsResults.Minimum.ToString();
                txtMaxValue.Text = statisticsResults.Maximum.ToString();
            }
        }
예제 #46
0
        //此专题图制作跟StackedChart差不多
        private void btnBarChartRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = this.mainMapControl.get_Layer(0) as IGeoFeatureLayer;

            //用DataStatistics对象,得到两个字段最大值的较大值(最最大)
            double p1, p2, max;
            ICursor pCursor = (ICursor)pGeoFeatLyr.Search(null, true);
            IDataStatistics pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            p1 = pDataStatistics.Statistics.Maximum;
            pCursor = (ICursor)pGeoFeatLyr.Search(null, true);
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1994(";
            p2 = pDataStatistics.Statistics.Maximum;
            max = p1 > p2 ? p1 : p2;

            //以下生成好三个SimpleFillSymbol,留作后用
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Color = getRGBColor(255, 0, 0);
            pSimpleFillSymbol.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol2 = new SimpleFillSymbolClass();
            pSimpleFillSymbol2.Color = getRGBColor(0, 0, 255);
            pSimpleFillSymbol2.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol3 = new SimpleFillSymbolClass();
            pSimpleFillSymbol3.Color = getRGBColor(0, 255, 0);

            //创建并设置BarChartSymbol,以及设置好BarChartSymbol里的各自Symbol
            IBarChartSymbol pBarChartSymbol = new BarChartSymbolClass();
            pBarChartSymbol.Width = 6;//宽度
            pBarChartSymbol.Spacing = 1;//Bar之间的间隔
            IChartSymbol pChartSymbol = pBarChartSymbol as IChartSymbol;
            pChartSymbol.MaxValue = max;//用到了上面求出的最大值
            ISymbolArray pSymbolArray = pBarChartSymbol as ISymbolArray;//用于在BarChartSymbol里添加Symbol,关键
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol);
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol2);
            IMarkerSymbol pMarkerSymbol = pBarChartSymbol as IMarkerSymbol;
            pMarkerSymbol.Size = 60;//BarChartSymbol符号大小

            //以下创建并设置着色对象
            IChartRenderer pChartRenderer = new ChartRendererClass();
            IRendererFields pRendererFields = pChartRenderer as IRendererFields;//添加用于着色的字段,关键
            pRendererFields.AddField("GDP_1994(", "GDP_1994(");
            pRendererFields.AddField("GDP_1999(", "GDP_1999(");
            pChartRenderer.ChartSymbol = pChartSymbol;//赋给上面创建的BarChartSymbol
            pChartRenderer.BaseSymbol = pSimpleFillSymbol3 as ISymbol;
            pChartRenderer.Label = "GDP";
            pChartRenderer.UseOverposter = true;
            pChartRenderer.CreateLegend();//创建图例,关键

            pGeoFeatLyr.Renderer = pChartRenderer as IFeatureRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
		private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
		{
			//Find the selected field in the feature layer
			IFeatureClass featureClass = m_featureLayer.FeatureClass;
			IField field = featureClass.Fields.get_Field(featureClass.FindField(comboBox1.Text));

			//Get a feature cursor
			ICursor cursor = (ICursor) m_featureLayer.Search(null, false);

			//Create a DataStatistics object and initialize properties
			IDataStatistics dataStatistics = new DataStatisticsClass();
			dataStatistics.Field = field.Name;
			dataStatistics.Cursor = cursor;

			//Get the result statistics
			IStatisticsResults statisticsResults = dataStatistics.Statistics;

			//Set the values min and max values
			textBox2.Text = statisticsResults.Minimum.ToString();
			textBox3.Text = statisticsResults.Maximum.ToString();
			textBox1.Text = "10";
		}	
        public static void transformData(ITable zoneTable, string linkFieldName, ITable zonalSummaryTable, string prefix="")
        {
            string prf = "";
            if (prefix != ""&&prefix!=null) prf = prefix + "_";
            IObjectClassInfo2 oi2 = (IObjectClassInfo2)zoneTable;
            if (!oi2.CanBypassEditSession())
            {
                System.Windows.Forms.MessageBox.Show("Table has a composite relationship. Please export data to a simple object and try again.");
                return;
            }
            geoDatabaseUtility geoUtil = new geoDatabaseUtility();
            IFields zsFlds = zonalSummaryTable.Fields;
            IFields zFlds = zoneTable.Fields;
            foreach (string s in new string[] { "Band", "Zone", "Count" })
            {
                if (zsFlds.FindField(s) == -1)
                {
                    System.Windows.Forms.MessageBox.Show("Not a valid Zonal Summary table!!!", "Format", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                    return;
                }
            }
            if (zFlds.FindField(linkFieldName) == -1)
            {
                System.Windows.Forms.MessageBox.Show("Not a valid Zone table!!!", "Format", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return;
            }
            IDataStatistics dStat = new DataStatisticsClass();
            dStat.Cursor = zonalSummaryTable.Search(null, false);
            dStat.Field = "Band";
            int unqCnt = 0;
            System.Collections.IEnumerator en = dStat.UniqueValues;
            en.MoveNext();
            do
            {
                //Console.WriteLine(en.Current.ToString());
                unqCnt++;
            } while (en.MoveNext());
            int exRwCnt = zoneTable.RowCount(null) * unqCnt;
            int sumRwCnt = zonalSummaryTable.RowCount(null);
            //Console.WriteLine("zonal*bands = " + exRwCnt.ToString() + "zoneSumCnt = " + sumRwCnt.ToString());
            if (exRwCnt != sumRwCnt)
            {

                System.Windows.Forms.MessageBox.Show("Zone and Zonal Summary tables row counts do not match! You must update your zonal statistics before running this tool!", "Format", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                return;

            }
            List<string> newFldNames = new List<string>();
            List<string> zsFldNames = new List<string>();
            for (int i = 0; i < zsFlds.FieldCount; i++)
            {
                IField fld = zsFlds.get_Field(i);
                if (fld.Type == esriFieldType.esriFieldTypeDouble)
                {
                    string nm = fld.Name;
                    if (nm.ToLower() != "zone" && nm.ToLower() != "band")
                    {
                        zsFldNames.Add(nm);
                        for (int j = 0; j < unqCnt; j++)
                        {
                            string nnm = prf+nm + "_" + (j + 1).ToString();
                            newFldNames.Add(geoUtil.createField(zoneTable, nnm, esriFieldType.esriFieldTypeDouble,false));
                        }
                    }

                }
            }
            int[] zsFldNamesIndex = new int[zsFldNames.Count];
            for (int i = 0; i < zsFldNames.Count; i++)
            {
                string vl = zsFldNames[i];
                zsFldNamesIndex[i] = zonalSummaryTable.FindField(vl);
            }
            int[] newFldNamesIndex = new int[newFldNames.Count];
            for (int i = 0; i < newFldNames.Count; i++)
            {
                string vl = newFldNames[i];
                newFldNamesIndex[i] = zoneTable.FindField(vl);
            }
            //IQueryFilter qfz = new QueryFilterClass();
            //IQueryFilterDefinition qfzD = (IQueryFilterDefinition)qfz;
            //qfzD.PostfixClause = "ORDER BY " + linkFieldName;
            //IQueryFilter qfzs = new QueryFilterClass();
            //IQueryFilterDefinition qfzsD = (IQueryFilterDefinition)qfzs;
            //qfzsD.PostfixClause = "ORDER BY Zone, Band";
            //ICursor curZ = zoneTable.Update(qfz, false);
            //ICursor curZs = zonalSummaryTable.Search(qfzs, false);
            ITableSort tblSortZ = new TableSortClass();
            tblSortZ.Table = zoneTable;
            tblSortZ.Fields = linkFieldName;
            ITableSort tblSortZs = new TableSortClass();
            tblSortZs.Table = zonalSummaryTable;
            tblSortZs.Fields = "Zone, Band";
            tblSortZs.Sort(null);
            tblSortZ.Sort(null);
            ICursor curZ = tblSortZ.Rows;
            ICursor curZs = tblSortZs.Rows;
            IRow rwZ = curZ.NextRow();
            while (rwZ != null)
            {
                for (int i = 0; i < unqCnt; i++)
                {
                    IRow rwZs = curZs.NextRow();
                    for (int j = 0; j < zsFldNames.Count; j++)
                    {
                        string zsN = zsFldNames[j];
                        int zsNIndex = zsFldNamesIndex[j];
                        double zsVl = System.Convert.ToDouble(rwZs.get_Value(zsNIndex));
                        string newZName = prf+zsN + "_" + (i + 1).ToString();
                        int newZNameIndex = newFldNamesIndex[newFldNames.IndexOf(newZName)];
                        rwZ.set_Value(newZNameIndex, zsVl);
                    }
                }
                rwZ.Store();
                //curZ.UpdateRow(rwZ);
                rwZ = curZ.NextRow();
            }
            System.Runtime.InteropServices.Marshal.ReleaseComObject(curZ);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(curZs);
        }
예제 #49
0
        /// <summary>
        /// 获得当前字段的唯一值
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonGetValue_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.listBoxFields.SelectedIndex == -1) return;

                string currentFieldName = this.listBoxFields.Text;//当前字段名
                string currentLayerName=this.comboBoxLayers.Text;
                this.pEnumLayer.Reset();
                for (this.pLayer = this.pEnumLayer.Next(); this.pLayer != null; this.pLayer = this.pEnumLayer.Next())
                {
                    if (this.pLayer.Name == currentLayerName) break;
                }
                this.pLayerFields = this.pLayer as ILayerFields;
                IField pField = this.pLayerFields.get_Field(this.pLayerFields.FindField(currentFieldName));
                esriFieldType pFieldType = pField.Type;

                //对Table中当前字段进行排序,把结果赋给Cursor
                ITable pTable = this.pLayer as ITable;
                ITableSort pTableSort = new TableSortClass();
                pTableSort.Table = pTable;
                pTableSort.Fields = currentFieldName;
                pTableSort.set_Ascending(currentFieldName, true);
                pTableSort.set_CaseSensitive(currentFieldName, true);
                pTableSort.Sort(null);//排序
                ICursor pCursor = pTableSort.Rows;

                //字段统计
                IDataStatistics pDataStatistics = new DataStatisticsClass();
                pDataStatistics.Cursor = pCursor;
                pDataStatistics.Field = currentFieldName;
                System.Collections.IEnumerator pEnumeratorUniqueValues = pDataStatistics.UniqueValues;//唯一值枚举
                int uniqueValueCount = pDataStatistics.UniqueValueCount;//唯一值的个数

                this.listBoxValues.Items.Clear();
                string currentValue = null;
                pEnumeratorUniqueValues.Reset();
                if (pFieldType == esriFieldType.esriFieldTypeString)
                {
                    while (pEnumeratorUniqueValues.MoveNext())
                    {
                        currentValue = pEnumeratorUniqueValues.Current.ToString();
                        this.listBoxValues.Items.Add("'" + currentValue + "'");
                    }
                }
                else
                {
                    while (pEnumeratorUniqueValues.MoveNext())
                    {
                        currentValue = pEnumeratorUniqueValues.Current.ToString();
                        this.listBoxValues.Items.Add(currentValue);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
예제 #50
0
        private void btnStackedChartRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = (IGeoFeatureLayer)this.mainMapControl.get_Layer(0);

            double p1, p2, max;//比较制作专题图所用两个字段的最大值的最大
            ICursor pCursor = (ICursor)pGeoFeatLyr.Search(null, true);
            IDataStatistics pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            p1 = pDataStatistics.Statistics.Maximum;
            pCursor = (ICursor)pGeoFeatLyr.Search(null, true);//重新设置Cursor,为什么一定要这样?
            //pDataStatistics.Cursor = null;
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1994(";
            p2 = pDataStatistics.Statistics.Maximum;
            //MessageBox.Show(p1.ToString() + "\n" + p2.ToString());
            max = p1 > p2 ? p1 : p2;

            //以下创造3个SimpleFillSymbol,供下面使用
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Color = getRGBColor(255, 0, 0);
            pSimpleFillSymbol.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol2 = new SimpleFillSymbolClass();
            pSimpleFillSymbol2.Color = getRGBColor(0, 0, 255);
            pSimpleFillSymbol2.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol3 = new SimpleFillSymbolClass();
            pSimpleFillSymbol3.Color = getRGBColor(0, 255, 0);

            //以下代码设置StackedChart符号,和StackedChart符号的各符号
            IStackedChartSymbol pStackedChartSymbol = new StackedChartSymbolClass();//Stached符号
            pStackedChartSymbol.Width = 6;//宽度
            pStackedChartSymbol.Fixed = false;//不固定长度
            IChartSymbol pChartSymbol = pStackedChartSymbol as IChartSymbol;
            pChartSymbol.MaxValue = max;//必须
            IMarkerSymbol pMarkerSymbol = pStackedChartSymbol as IMarkerSymbol;
            pMarkerSymbol.Size = 60;//符号大小
            ISymbolArray pSymbolArray = pStackedChartSymbol as ISymbolArray;//SymbolArray
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol);//添加符号
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol2);//添加符号

            //以下代码设置着色对象
            IChartRenderer pChartRenderer = new ChartRendererClass();
            IRendererFields pRendererFields = pChartRenderer as IRendererFields;
            pRendererFields.AddField("GDP_1999(", "GDP_1999(");
            pRendererFields.AddField("GDP_1994(", "GDP_1994(");
            pChartRenderer.ChartSymbol = (IChartSymbol)pStackedChartSymbol;//设置符号
            pChartRenderer.Label = "GDP";
            pChartRenderer.BaseSymbol = pSimpleFillSymbol3 as ISymbol;//背景
            pChartRenderer.UseOverposter = true;//防止重叠
            pChartRenderer.CreateLegend();//创造图例,关键!!!!!!!!!

            pGeoFeatLyr.Renderer = (IFeatureRenderer)pChartRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
예제 #51
0
        //分级字段ComboBox选择变化
        private void cbbClassBreakField_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.cbbClassBreakField.SelectedIndex == 0)
            {
                this.lblClassBreaksCount.Enabled = false;
                this.cbbClassBreaksCount.Enabled = false;
                this.lblClassBreaksMethod.Enabled = false;
                this.lblClassBreaksMethod.Enabled = false;
                this.groupBox8.Enabled = false;
            }
            else
            {
                this.lblClassBreaksCount.Enabled = true;
                this.cbbClassBreaksCount.Enabled = true;
                this.lblClassBreaksMethod.Enabled = true;
                this.cbbClassBreaksMethod.Enabled = true;
                this.groupBox8.Enabled = true;

                string currentFieldName = this.cbbClassBreakField.Text;//当前字段名

                ITable pTable = this.pLayer as ITable;
                ICursor pCursor = pTable.Search(null, true);

                //字段统计
                IDataStatistics pDataStatistics = new DataStatisticsClass();
                pDataStatistics.Cursor = pCursor;
                pDataStatistics.Field = currentFieldName;
                System.Collections.IEnumerator pEnumeratorUniqueValues = pDataStatistics.UniqueValues;//唯一值枚举
                int uniqueValueCount = pDataStatistics.UniqueValueCount;//唯一值的个数

                this.cbbClassBreaksCount.Items.Clear();
                for (int i = 1; i <= uniqueValueCount; i++)
                {
                    this.cbbClassBreaksCount.Items.Add(i.ToString());
                }
                this.cbbClassBreaksCount.SelectedIndex = 0;
                this.cbbClassBreaksMethod.SelectedIndex = 0;
            }
        }
예제 #52
0
 private double FindMaxValueInRendererFields(IFeatureClass featureClass)
 {
     ITable pTable = (ITable)featureClass;
     ICursor pCursor = pTable.Search(null, false);
     //Use the statistics objects to calculate the max value and the min value
     IDataStatistics pDataStatistics = new DataStatisticsClass();
     pDataStatistics.Cursor = pCursor;
     double gMaxValue = 0.0;
     foreach (System.Collections.DictionaryEntry de in fieldSymbolHashTable)
     {
         string strField = de.Key.ToString();
         //Set statistical field
         pDataStatistics.Field = strField;
         //Get the result of statistics
         IStatisticsResults pStatisticsResult = pDataStatistics.Statistics;
         double dmaxValue = pStatisticsResult.Maximum;
         if (dmaxValue > gMaxValue) gMaxValue = dmaxValue;
     }
     return gMaxValue;
 }
예제 #53
0
        /// <summary>
        /// 获取指定字段的所有值
        /// </summary>
        /// <param name="table"></param>
        /// <param name="sFieldName">字段别名</param>
        private bool GetUniqueValue(ITable table, string sFieldName)
        {
            try
            {
                IDataStatistics _dataStatistics = new DataStatisticsClass();
                ICursor _cursor;

                int _fieldIndex = table.Fields.FindField(sFieldName);

                _cursor = table.Search(null, false);
                this.cboFieldsValue.Properties.Items.Clear();

                _dataStatistics.Field = sFieldName;
                _dataStatistics.Cursor = _cursor;
                IEnumerator _enumerator = _dataStatistics.UniqueValues;
                _enumerator.Reset();
                while (_enumerator.MoveNext())
                {
                    cboFieldsValue.Properties.Items.Add(_enumerator.Current.ToString());

                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
                //MessageBox.Show(ex.Message);
            }
            return true;
        }
예제 #54
0
        /// <summary>
        /// 获取字段唯一值
        /// </summary>
        public static string[] GetUniqueValue(AxMapControl axMapControl1, int index,string strFld)
        {
            ILayer layer = axMapControl1.get_Layer(index);
            IFeatureLayer featureLayer = layer as IFeatureLayer;
            int i = 0;
            if (featureLayer == null)
            {
                MessageBox.Show("选择图层不是Feature图层!");
                return null ;
            }
            //获取featureLayer的featureClass

            IFeatureClass pFeatureClass = featureLayer.FeatureClass;
            //得到IFeatureCursor游标
            IFeatureCursor pCursor = pFeatureClass.Search(null, false);
            //coClass对象实例生成
            IDataStatistics pData = new DataStatisticsClass();
            pData.Field = strFld;
            pData.Cursor = pCursor as ICursor;
            //枚举唯一值
            System.Collections.IEnumerator pEnumVar = pData.UniqueValues;
            //记录总数
            int RecordCount = pData.UniqueValueCount;
            //字符数组
            string[] strValue = new string[RecordCount];
            pEnumVar.Reset();
            //int i = 0;
            while (pEnumVar.MoveNext())
            {
                strValue[i++] = pEnumVar.Current.ToString();
            }
            return strValue;
        }
예제 #55
0
 private int GetUniqueValuesCount(IFeatureClass featureClass, string strField)
 {
     ICursor cursor = (ICursor)featureClass.Search(null, false);
     IDataStatistics dataStatistics = new DataStatisticsClass();
     dataStatistics.Field = strField;
     dataStatistics.Cursor = cursor;
     System.Collections.IEnumerator enumerator = dataStatistics.UniqueValues;
     return dataStatistics.UniqueValueCount;
 }
예제 #56
0
        private static double Statistic2(ICursor cursor,string fieldName,IFeatureClass featureClass)
        {
            var dataStatistic = new DataStatisticsClass();
            dataStatistic.Cursor = cursor;
            dataStatistic.Field = fieldName;
            if (string.IsNullOrEmpty(fieldName))
            {
                dataStatistic.Field = featureClass.Fields.get_Field(1).Name;

                return dataStatistic.Statistics.Count;
            }
            return dataStatistic.Statistics.Sum;
        }
예제 #57
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="table"></param>
        /// <param name="sFieldName">�ֶα���</param>
        /// <param name="listboxValues"></param>
        private void GetUniqueValue(ITable table, string sFieldName, DevExpress.XtraEditors.ListBoxControl listboxValues)
        {
            try
            {
                IDataStatistics _dataStatistics = new DataStatisticsClass();
                ICursor _cursor;

                string strFieldName = m_FieldTable[sFieldName].ToString();
                int _fieldIndex = table.Fields.FindField(strFieldName);

                _cursor = table.Search(null, false);
                listboxValues.Items.Clear();

                _dataStatistics.Field = strFieldName;
                _dataStatistics.Cursor = _cursor;
                IEnumerator _enumerator = _dataStatistics.UniqueValues;
                _enumerator.Reset();
                while (_enumerator.MoveNext())
                {
                    if (table.Fields.get_Field(_fieldIndex).Type == esriFieldType.esriFieldTypeString)
                        listboxValues.Items.Add("'" + _enumerator.Current.ToString() + "'");
                    else
                        listboxValues.Items.Add(_enumerator.Current.ToString());

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
예제 #58
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.listBox1.Items.Clear();
            IFeatureCursor pCursor = m_feaFC.Search(null, false);
            IDataStatistics pData = new  DataStatisticsClass();
            pData.Field = this.FieldListbox.SelectedItem.ToString() ;
            pData.Cursor = pCursor  as  ICursor;
            IEnumerator pEnumVar = pData.UniqueValues;
            IField pFied = m_feaFC.Fields.get_Field(this.FieldListbox.SelectedIndex);

            string text;

            if (pFied.Type == esriFieldType.esriFieldTypeOID || pFied.Type == esriFieldType.esriFieldTypeDouble || pFied.Type == esriFieldType.esriFieldTypeInteger)
            {
                text = "";
            }
            else
            {
                text = "'";
            }
            while (pEnumVar.MoveNext())
            {
                this.listBox1.Items.Add(text + pEnumVar.Current.ToString() + text);
            }
        }
예제 #59
0
 public static void Statistic(IFeatureClass stopfeatureClass,string stopwhereClause,string fieldName,out double maxValue,out double minValue)
 {
     var queryFilter = new QueryFilterClass();
     queryFilter.WhereClause = stopwhereClause;
     var featureCursor = stopfeatureClass.Search(queryFilter, false);
     var statisticCursor = featureCursor as ICursor;
     var dataStatistic = new DataStatisticsClass();
     dataStatistic.Cursor = statisticCursor;
     dataStatistic.Field = fieldName;
     var statisticsResult = dataStatistic.Statistics;
     maxValue = statisticsResult.Maximum;
     minValue = statisticsResult.Minimum;
 }
예제 #60
0
        public PieRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName1, string pFieldName2)
        {
            IGeoFeatureLayer pGeoFeaLayer = (IGeoFeatureLayer)pFtLayer;
            IChartRenderer pChartRenderer = new ChartRendererClass();
            // Set up the field to draw charts
            IRendererFields pRenderFields = (IRendererFields)pChartRenderer;
            pRenderFields.AddField(pFieldName1, pFieldName1);
            pRenderFields.AddField(pFieldName2, pFieldName2);
            IPieChartRenderer pPieChartRender = (IPieChartRenderer)pChartRenderer;

            //计算最大值部分有待补充////////////////////////////////////
            //Calculate the max value of the data field to scale the chart

            //ICursor pCursor = new CursorClass();
            IQueryFilter pQueryFilter = new QueryFilterClass();
            //IRowBuffer pRow = new RowBufferClass();
            ITable pTable = (ITable)pGeoFeaLayer;
            pQueryFilter.AddField(pFieldName1);
            ICursor pCursor = pTable.Search(pQueryFilter, true);

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName1;

            double pMax = pDataStat.Statistics.Maximum;

            IPieChartSymbol pPiechartSymbol = new PieChartSymbolClass();
            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            IChartSymbol pChartSymbol = (IChartSymbol)pPiechartSymbol;
            pPiechartSymbol.Clockwise = true;
            pPiechartSymbol.UseOutline = true;
            ILineSymbol pOutLine = new SimpleLineSymbolClass();
            pOutLine.Color = GetRGBColor(255, 0, 255);
            pOutLine.Width = 1;
            pPiechartSymbol.Outline = pOutLine;

            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPiechartSymbol;
            //finally
            pChartSymbol.MaxValue = pMax;
            pMarkerSymbol.Size = 16;
            //像符号数组中添加 添加符号
            ISymbolArray pSymbolArray = (ISymbolArray)pPiechartSymbol;
            pFillSymbol.Color = GetRGBColor(213, 212, 252);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //////////////////////////
            pFillSymbol.Color = GetRGBColor(183, 242, 122);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //set up the background
            pFillSymbol.Color = GetRGBColor(239, 228, 190);
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;
            pChartRenderer.UseOverposter = false;
            pPieChartRender.MinSize = 1;
            pPieChartRender.MinValue = pDataStat.Statistics.Minimum;
            pPieChartRender.FlanneryCompensation = false;
            pPieChartRender.ProportionalBySum = true;
            pChartRenderer.ChartSymbol = (IChartSymbol)pPiechartSymbol;
            pChartRenderer.CreateLegend();
            pGeoFeaLayer.Renderer = (IFeatureRenderer)pChartRenderer;
            pMapcontrol.ActiveView.Refresh();
        }