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; }
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); } }
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; }
//当选择统计字段发生变化时触发事件,执行本函数,完成统计分析操作 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(); }
/// <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); }
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()); } } } }
/// <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); }
/// <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); } }
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); }
/// <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; } }
//获取唯一值函数 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); }
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); }
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); }
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); } }
// *------------------------------------------------------------------------------------------------------- // *功能函数:获取自动编号的下一个值 // *开 发 者:陈亚飞 // *开发日期: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); } }
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, ""); } }
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); }
/// <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); }
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); } } }
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; }
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()); } }
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); }
//得到地图中的指定特征图层指定字段的不重复值 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); }
/// <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); } }
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); }
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); }
/// <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); }
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; } } }
// 属性统计 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); }
//�õ���ͼ�е�ָ������ͼ��ָ���ֶε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; }
/// <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; }
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(); }
/// <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); } }
/// <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; }
//比例图 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(); }
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; }
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; }
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(); }
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(); } }
//此专题图制作跟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); }
/// <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); } }
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(); }
//分级字段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; } }
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; }
/// <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; }
/// <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; }
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; }
/// <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); } }
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); } }
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; }
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(); }