public void ShowNavi() { IGraphicsContainer pGraphicsContainer = axMapControl1.Map as IGraphicsContainer; IActiveView pActiveView = axMapControl1.Map as IActiveView; // 得到“城市”图层 IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer; IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; int indexFlield = pFeatureClass.Fields.FindField("PointName"); IPolyline pPolyline = new PolylineClass(); IPointCollection pPointCollection = pPolyline as IPointCollection; IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField("PointName"); foreach (string staString in opPath) { pQueryFilter.WhereClause = "PointName='" + staString + "'"; IFeatureCursor pCursor = pFeatureClass.Search(pQueryFilter, true); IFeature pFeature = pCursor.NextFeature(); System.Runtime.InteropServices.Marshal.ReleaseComObject(pCursor); GC.Collect(); GC.WaitForPendingFinalizers(); if (pFeature != null) { ESRI.ArcGIS.Geometry.Point pPoint = pFeature.Shape as ESRI.ArcGIS.Geometry.Point; pPointCollection.AddPoint(pPoint); } } object pSym = null; IRgbColor pColor; pColor = new RgbColorClass(); pColor.Red = 0; pColor.Blue = 255; pColor.Green = 0; pSym = new SimpleLineSymbolClass(); ISimpleLineSymbol pSym1 = pSym as ISimpleLineSymbol; pSym1.Width = 6; pSym1.Style = esriSimpleLineStyle.esriSLSDash; pSym1.Color = pColor; ILineElement pLienElement = new LineElementClass(); pLienElement.Symbol = pSym1; IElement pElement = pLienElement as IElement; pElement.Geometry = pPolyline as IGeometry; pGraphicsContainer.AddElement(pElement, 0); pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); }
private void confirmCategory() { string[] shp = new string[2]; shp[0] = System.IO.Path.GetDirectoryName(shpPathText.Text); shp[1] = System.IO.Path.GetFileName(shpPathText.Text); if (shp[0] == null) { return; } IFeatureClass pFC = mg.openShapefile(shp[0], shp[1]); IFeatureCursor pFeatureCur = pFC.Search(null, false); IFeature pFeature = pFeatureCur.NextFeature(); Hashtable i = mg.Index(pFC); readExcel t = new readExcel(); t.OpenExcel(excelText.Text); List <TrashInfo> trashItems = t.readTrashTables(); t.closeExcel(); IQueryFilter tQueryFilter = new QueryFilterClass(); tQueryFilter.WhereClause = ""; tQueryFilter.AddField(pFC.OIDFieldName); //Invoke(new MethodInvoker(() => //{ // proWork.Maximum = pFC.FeatureCount(tQueryFilter); // proWork.Value = 0; //})); //int number = 1; while (pFeature != null) { ResultItem value = new ResultItem(); value = mg.getFields(i, pFeature); #region 查找与excel中匹配的数据 TrashInfo right = trashItems.Find( delegate(TrashInfo T) { return(T.Figure == value.Figure); }); pFeature.set_Value((int)i["垃圾类别"], right.Category); //如果垃圾类别没设置,则取消注释 pFeature.Store(); #endregion //Invoke(new MethodInvoker(() => //{ // proWork.Value = number++; //})); pFeature = pFeatureCur.NextFeature(); } }
public List <double> GetUniques(ITable table, string fldName) { int idx = table.Fields.FindField(fldName); if (idx == -1) { throw new Exception(string.Format( "field {0} not found in {1}", fldName, ((IDataset)table).Name)); } IQueryFilter qf = new QueryFilterClass(); qf.AddField(fldName); List <double> myList = new List <double>(); ICursor cur = null; IRow row = null; try { cur = table.Search(qf, true); while ((row = cur.NextRow()) != null) { try { double key = Convert.ToDouble(row.get_Value(idx) is DBNull ? "<Null>" : row.get_Value(idx).ToString()); if (!myList.Contains(key)) { myList.Add(key); } } catch (Exception ex) { } finally { Marshal.ReleaseComObject(row); } } } catch (Exception ex) { return(null); } finally { if (cur != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cur); } } return(myList); }
/// <summary> /// Gets the number of rows of the table, belonging to a given layer. /// </summary> /// <param name="layer">Esri layer of the TOC</param> /// <returns>Number of rows or Null if the layer is invalid.</returns> public static int?GetLayerRowCount(IFeatureLayer layer) { IDisplayTable displayTable = (IDisplayTable)layer; if ((layer.Valid) && (displayTable != null)) { IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.AddField(layer.FeatureClass.OIDFieldName); return(displayTable.DisplayTable.RowCount(queryFilter)); } return(null); }
private void ThreadTest() { string[] shp = new string[2]; shp[0] = System.IO.Path.GetDirectoryName(shpPathText.Text); shp[1] = System.IO.Path.GetFileName(shpPathText.Text); if (shp[0] == null) { return; } IFeatureClass pFC = openShapefile(shp[0], shp[1]); IFeatureCursor pFeatureCur = pFC.Search(null, false); IFeature pFeature = pFeatureCur.NextFeature(); i = mg.Index(pFC); ////计算要素总数 IQueryFilter tQueryFilter = new QueryFilterClass(); tQueryFilter.WhereClause = ""; tQueryFilter.AddField(pFC.OIDFieldName); Invoke(new MethodInvoker(() => { proWork.Maximum = pFC.FeatureCount(tQueryFilter); proWork.Value = 0; })); int number = 1; while (pFeature != null) { ResultItem value = new ResultItem(); value = mg.getFields(i, pFeature); if (value.Location.X == 0 || value.Location.Y == 0 || (int)i["位置"] == -1) { MessageBox.Show("在shapefile文件中添加经纬度字段“Longitude”、“Latitude”和 “位置”字段!"); return; } string pAddress = LocationService.GetLocation(value.Location.Y, value.Location.X); //基于百度API,根据经纬度获取位置信息 pFeature.set_Value((int)i["位置"], pAddress); pFeature.Store(); Invoke(new MethodInvoker(() => { proWork.Value = number++; })); pFeature = pFeatureCur.NextFeature(); } MessageBox.Show("添加完成!"); }
private void btn_OK_Click(object sender, EventArgs e) { string FieldName = cbx_Field.SelectedItem.ToString(); IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)m_FeatureLayer; pGeoFeatureLayer.ScaleSymbols = false; ITable pTable = (ITable)pGeoFeatureLayer; if (pTable.FindField(FieldName) == -1) { return; } else { IUniqueValueRenderer pUniqueValueRenderer = new UniqueValueRendererClass(); pUniqueValueRenderer.FieldCount = 1; pUniqueValueRenderer.set_Field(0, FieldName); IColorRamp pColorRamp = (IColorRamp)m_StyleGallertItem.Item; pColorRamp.Size = pTable.RowCount(null); bool ok = true; pColorRamp.CreateRamp(out ok); IEnumColors pEnumRamp = pColorRamp.Colors; IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(FieldName); //依据某个字段在表中找出指向所有行的游标对象 ICursor pCursor = pTable.Search(pQueryFilter, true); IRow pNextRow = pCursor.NextRow(); //遍历所有的要素 IColor pNextUniqueColor; string codeValue; while (pNextRow != null) { codeValue = pNextRow.get_Value(pTable.FindField(FieldName)).ToString(); //获得随机颜色带中的任意一种颜色 pNextUniqueColor = pEnumRamp.Next(); IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pNextUniqueColor; //将每次得到的要素字段值和修饰它的符号放入着色对象中 pUniqueValueRenderer.AddValue(codeValue, FieldName, (ISymbol)pFillSymbol); pNextRow = pCursor.NextRow(); } pGeoFeatureLayer.Renderer = (IFeatureRenderer)pUniqueValueRenderer; m_MapControl.ActiveView.ContentsChanged(); m_MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); } }
public static IRecordSet GetRecordSetFromFeatureClass(IFeatureClass featureClass, List <int> fids, List <string> fields, uint epsg) { if (null != featureClass) { IQueryFilter2 queryFilter = new QueryFilterClass(); queryFilter.AddField(featureClass.OIDFieldName); queryFilter.AddField(featureClass.ShapeFieldName); if (null != fields) { foreach (var fld in fields) { queryFilter.AddField(fld); } } ISpatialReference srs = GetSpatialReference(epsg); if (null != srs) { queryFilter.set_OutputSpatialReference(featureClass.ShapeFieldName, srs); } queryFilter.WhereClause = featureClass.OIDFieldName + " IN (" + string.Join(",", System.Array.ConvertAll <int, string>(fids.ToArray(), s => s.ToString(System.Globalization.CultureInfo.InvariantCulture))) + ")"; return(ConvertToRecordset(featureClass, queryFilter)); } return(null); }
/// <summary> /// Gets the number of rows, belonging to a given layer, filtered by the layer. /// </summary> /// <param name="layer">Esri layer of the TOC</param> /// <returns>Number of rows or Null if the layer is invalid or not filtered.</returns> public static int?GetFilteredLayerRowCount(IFeatureLayer layer) { IDisplayTable displayTable = (IDisplayTable)layer; if ((layer.Valid) && (displayTable != null)) { IFeatureLayerDefinition layerDefinition = layer as IFeatureLayerDefinition; string filter = layerDefinition?.DefinitionExpression; if (!string.IsNullOrEmpty(filter)) { IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.WhereClause = filter; queryFilter.AddField(layer.FeatureClass.OIDFieldName); return(displayTable.DisplayTable.RowCount(queryFilter)); } } return(null); }
/// <summary> /// 根据指定的表、字段、条件获取查询游标,使用完毕后,必须使用AppHelper.ReleaseComObject()释放 /// </summary> /// <param name="sTable">表</param> /// <param name="sFields">字段</param> /// <param name="sClause">查询条件</param> /// <returns>查询游标</returns> public static ICursor GetRows(string sTable, string sFields, string sClause) { IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(sFields); pQueryFilter.WhereClause = sClause; IWorkspace pWorkspace = InitWorkspace(); IFeatureWorkspace pfWorkspace = pWorkspace as IFeatureWorkspace; ITable pTable = pfWorkspace.OpenTable(sTable); if (pTable == null) { throw new Exception("表[" + sTable + "]访问错误"); } return(pTable.Search(pQueryFilter, false)); }
public static void SpecialLineRenderer2(ILayer layer, string field, string value, ILineSymbol lineSymbol) { var geoFeaLayer = layer as IGeoFeatureLayer; IUniqueValueRenderer uniValueRender = new UniqueValueRenderer(); IQueryFilter2 queryFilter = new QueryFilterClass(); uniValueRender.FieldCount = 1; uniValueRender.Field[0] = field; queryFilter.AddField(field); if (geoFeaLayer != null) { var fieldIndex = geoFeaLayer.FeatureClass.Fields.FindField(field); var customSymbol = (ISymbol)lineSymbol; var featureCursor = geoFeaLayer.FeatureClass.Search(queryFilter, true); var feature = featureCursor.NextFeature(); while (feature != null) { var sValue = Convert.ToString(feature.Value[fieldIndex]); if (sValue == value) { uniValueRender.AddValue(sValue, "", customSymbol); } else { var defaultSymbol = geoFeaLayer.Renderer.SymbolByFeature[feature]; uniValueRender.AddValue(sValue, "", defaultSymbol); } feature = featureCursor.NextFeature(); } } ComReleaser.ReleaseCOMObject(null); //System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); //释放指针 if (geoFeaLayer != null) { geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; } }
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { textBox1.Clear(); textBox1.Text += comboBox2.Text; listBox1.Items.Clear(); fieldIndex = comboBox2.SelectedIndex; fieldname = pTable.Fields.get_Field(fieldIndex).Name; IQueryFilter pQueryFilter; pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(fieldname); int rowCount = pTable.RowCount(pQueryFilter); for (int i = 0; i < rowCount; i++) { listBox1.Items.Add(pTable.GetRow(i).get_Value(fieldIndex).ToString()); } }
public override void OnClick() { IGeoFeatureLayer pGeoFeatureL; IFeatureLayer pFeatureLayer; ITable pTable; ICursor pCursor; IQueryFilter pQueryFilter; IRowBuffer pRowBuffer; int numFields = 2; int[] fieldIndecies = new int[numFields]; int lfieldIndex; double dmaxValue; bool firstValue; double dfieldValue; IChartRenderer pChartRenderer; IRendererFields pRendererFields; IFillSymbol pFillSymbol; IMarkerSymbol pMarkerSymbol; ISymbolArray pSymbolArray; IChartSymbol pChartSymbol; string strPopField1 = "population"; string strPopField2 = "jingji"; //pActiveView = m_hookHelper.ActiveView; //pMap = m_hookHelper.FocusMap; //pMap.ReferenceScale = pMap.MapScale ; // pFeatureLayer = (IGeoFeatureLayer) pMap.get_Layer(1);//Parameter!!! pGeoFeatureL = (IGeoFeatureLayer)m_pLayer; pTable = (ITable)pGeoFeatureL; pGeoFeatureL.ScaleSymbols = true; pChartRenderer = new ChartRendererClass(); pRendererFields = (IRendererFields)pChartRenderer; pRendererFields.AddField(strPopField1, strPopField1); pRendererFields.AddField(strPopField2, strPopField2); pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(strPopField1); pQueryFilter.AddField(strPopField2); pCursor = pTable.Search(pQueryFilter, true); fieldIndecies[0] = pTable.FindField(strPopField1); fieldIndecies[1] = pTable.FindField(strPopField2); firstValue = true; dmaxValue = 0; pRowBuffer = pCursor.NextRow(); while (pRowBuffer != null) { for (lfieldIndex = 0; lfieldIndex <= numFields - 1; lfieldIndex++) { dfieldValue = (double)Convert.ToInt32(pRowBuffer.get_Value(fieldIndecies[lfieldIndex])); if (firstValue) { dmaxValue = dfieldValue; firstValue = false; } else { if (dfieldValue > dmaxValue) { dmaxValue = dfieldValue; } //Set up the fields to draw charts of //Make an array of the field numbers to iterate accross, this is to keep the code generic in the number of bars to draw. //Iterate across each feature // iterate through each data field and update the maxVal if needed // Special case for the first value in a feature class // we've got a new biggest value } } pRowBuffer = pCursor.NextRow(); } if (dmaxValue <= 0) { MessageBox.Show("Failed to gather stats on the feature class"); Application.Exit(); } IBarChartSymbol pBarChartSymbol; pBarChartSymbol = new BarChartSymbolClass(); pChartSymbol = (IChartSymbol)pBarChartSymbol; pBarChartSymbol.Width = 12; pMarkerSymbol = (IMarkerSymbol)pBarChartSymbol; pChartSymbol.MaxValue = dmaxValue; pMarkerSymbol.Size = 80; pSymbolArray = (ISymbolArray)pBarChartSymbol; pFillSymbol = new SimpleFillSymbolClass(); IRgbColor pRGB = new RgbColorClass(); pRGB.Red = 213; pRGB.Green = 212; pRGB.Blue = 252; pFillSymbol.Color = pRGB; pSymbolArray.AddSymbol((ISymbol)pFillSymbol); pFillSymbol = new SimpleFillSymbolClass(); pRGB.Red = 193; pRGB.Green = 252; pRGB.Blue = 179; pFillSymbol.Color = pRGB; pSymbolArray.AddSymbol((ISymbol)pFillSymbol); pChartRenderer.ChartSymbol = (IChartSymbol)pBarChartSymbol; pChartRenderer.Label = "Population"; pFillSymbol = new SimpleFillSymbolClass(); pRGB.Red = 293; pRGB.Green = 228; pRGB.Blue = 190; pFillSymbol.Color = pRGB; pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol; // Set up the chart marker symbol to use with the renderer //Finally we've got the biggest value, set this into the symbol //This is the maximum height of the bars //Now set up symbols for each bar // Add some colours in for each bar //This is a pastel green //Now set the barchart symbol into the renderer //set up the background symbol to use tan color //Disable overpoaster so that charts appear in the centre of polygons pChartRenderer.UseOverposter = false; pChartRenderer.CreateLegend(); pGeoFeatureL.Renderer = (IFeatureRenderer)pChartRenderer; //pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); }
/// <summary> /// Pie Chart Render /// </summary> /// <param name="currentLayer"></param> /// <param name="breakCount"></param> /// <author>Shen Yongyuan</author> /// <date>20091114</date> public static void PieChartRender(ILayer currentLayer) { //Scale Symbol IGeoFeatureLayer pGeoFeatureL = currentLayer as IGeoFeatureLayer; pGeoFeatureL.ScaleSymbols = true; //Chart Render IChartRenderer pChartRenderer = new ChartRendererClass(); IRendererFields pRendererFields = (IRendererFields)pChartRenderer; pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology", "生态"); pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Social", "社会"); pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Economic", "经济"); //Search Max IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology"); pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Social"); pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Economic"); IFeatureCursor pCursor = pGeoFeatureL.DisplayFeatureClass.Search(pQueryFilter, true); int fldFiledEcology = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology"); int fldFiledSocial = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Social"); int fldFiledEconomic = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Economic"); List <double> valueList = new List <double>(); IFeature pFeature = pCursor.NextFeature(); while (pFeature != null) { valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEcology))); valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledSocial))); valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEconomic))); pFeature = pCursor.NextFeature(); } //Pie Chart IPieChartSymbol pPieChartSymbol; pPieChartSymbol = new PieChartSymbolClass(); IChartSymbol pChartSymbol = (IChartSymbol)pPieChartSymbol; //Pie Chart Attribute pPieChartSymbol.Clockwise = true; pPieChartSymbol.UseOutline = true; ILineSymbol pOutline; pOutline = new SimpleLineSymbolClass(); pOutline.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(100, 205, 30)); pOutline.Width = 1; pPieChartSymbol.Outline = pOutline; IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPieChartSymbol; pChartSymbol.MaxValue = valueList.Max(); pMarkerSymbol.Size = 60; //Symbol Array ISymbolArray pSymbolArray = (ISymbolArray)pPieChartSymbol; ISimpleFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Green); pSymbolArray.AddSymbol((ISymbol)pFillSymbol); pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Red); pSymbolArray.AddSymbol((ISymbol)pFillSymbol); pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Blue); pSymbolArray.AddSymbol((ISymbol)pFillSymbol); pChartRenderer.ChartSymbol = (IChartSymbol)pPieChartSymbol; pChartRenderer.Label = "指标"; //Back Ground pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(239, 228, 190)); pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol; //Render Label pGeoFeatureL.Renderer = pChartRenderer as IFeatureRenderer; }
private void polygonQualityDye(ILayer pLayer) { IGeoFeatureLayer pGeoFeatureL; IFeatureLayer pFeatureLayer; ITable pTable; ICursor pCursor; IQueryFilter pQueryFilter; IRowBuffer pRowBuffer; int numFields = 2; int[] fieldIndecies = new int[numFields]; int iFieldIndex; double dMaxValue; bool isFirstValue; double dFieldValue; IChartRenderer pChartRenderer; IRendererFields pRenderFields; IFillSymbol pFillSymbol; IMarkerSymbol pMarkerSymbol; ISymbolArray pSymbolArray; IChartSymbol pCharSymbol; //设置需要的字段信息 string strPopField1 = cbField1.Text; string strPopField2 = cbField2.Text; IMap pMap = axMapControl1.Map; pMap.ReferenceScale = pMap.MapScale; pFeatureLayer = (IGeoFeatureLayer)pLayer; pGeoFeatureL = (IGeoFeatureLayer)pFeatureLayer; pTable = (ITable)pGeoFeatureL; pGeoFeatureL.ScaleSymbols = true; pChartRenderer = new ChartRendererClass(); //设置柱状图中所需要绘制的属性 pRenderFields = (IRendererFields)pChartRenderer; pRenderFields.AddField(strPopField1, strPopField1); pRenderFields.AddField(strPopField2, strPopField2); pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(strPopField1); pQueryFilter.AddField(strPopField2); pCursor = pTable.Search(pQueryFilter, true); fieldIndecies[0] = pTable.FindField(strPopField1); fieldIndecies[1] = pTable.FindField(strPopField2); isFirstValue = true; dMaxValue = 0; //迭代坊问每一个要素 pRowBuffer = pCursor.NextRow(); try { while (pRowBuffer != null) { for (iFieldIndex = 0; iFieldIndex <= numFields - 1; iFieldIndex++) { //迭代访问要素的字段值并对最大值进行更新和标记 dFieldValue = double.Parse(pRowBuffer.get_Value(fieldIndecies[iFieldIndex]).ToString()); if (isFirstValue) { //将最大值dmax初始化为第一个值 dMaxValue = dFieldValue; isFirstValue = false; } else { if (dFieldValue > dMaxValue) { //获取最大值时候进行更新 dMaxValue = dFieldValue; } } } pRowBuffer = pCursor.NextRow(); } } catch (Exception ex) { MessageBox.Show("该字段中有不合法的值,请重新选择字段"); } if (dMaxValue <= 0) { MessageBox.Show("获取要素失败"); return; } //设置需要渲染的柱状图符号 IBarChartSymbol pBarChartSymbol; pBarChartSymbol = new BarChartSymbolClass(); pCharSymbol = (IChartSymbol)pBarChartSymbol; pBarChartSymbol.Width = 12; pMarkerSymbol = (IMarkerSymbol)pBarChartSymbol; //设置柱状图的最大值 pCharSymbol.MaxValue = dMaxValue; //设置柱状图的最大渲染高度 pMarkerSymbol.Size = 80; //为每个柱状图设置符号 pSymbolArray = (ISymbolArray)pBarChartSymbol; //为每个柱状图添加颜色 pFillSymbol = new SimpleFillSymbolClass(); IRgbColor color = new RgbColorClass(); color.Red = 213; color.Green = 212; color.Blue = 252; pFillSymbol.Color = color; pSymbolArray.AddSymbol((ISymbol)pFillSymbol); pFillSymbol = new SimpleFillSymbolClass(); color.Red = 193; color.Green = 252; color.Blue = 179; pFillSymbol.Color = color; pSymbolArray.AddSymbol((ISymbol)pFillSymbol); //设置渲染符号为柱状图 pChartRenderer.ChartSymbol = (IChartSymbol)pBarChartSymbol; pChartRenderer.Label = cbField1.Text; //设置柱状图的背景颜色 pFillSymbol = new SimpleFillSymbolClass(); color.Red = 239; color.Green = 228; color.Blue = 190; pFillSymbol.Color = color; pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol; //设置overpoaster属性为false,使柱状图显示在polygon多边形要素的中间 pChartRenderer.UseOverposter = false; pChartRenderer.CreateLegend(); //更新柱状图和刷新显示 pGeoFeatureL.Renderer = (IFeatureRenderer)pChartRenderer; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); }
/// <summary> /// ����Ҫ�ط��Ż� /// </summary> /// <params name="layer"></params> /// <params name="field"></params> /// <params name="value"></params> /// <params name="pBitmap"></params> public static void SpecialPointRenderer(ILayer layer, string field, string value, Bitmap pBitmap) { IGeoFeatureLayer geoFeaLayer; IFeatureRenderer featureRenderer; ISymbol defaultSymbol; IUniqueValueRenderer uniValueRender; geoFeaLayer = layer as IGeoFeatureLayer; featureRenderer = geoFeaLayer.Renderer; uniValueRender = new UniqueValueRenderer(); ///ѡ��ij���ֶ���Ϊ��Ⱦ����ֵ IQueryFilter2 queryFilter = new QueryFilterClass(); int fieldIndex; uniValueRender.FieldCount = 1; uniValueRender.Field[0] = field; queryFilter.AddField(field); fieldIndex = geoFeaLayer.FeatureClass.Fields.FindField(field);//����ֶε�index ///��ȡ�Զ������ ISymbol customSymbol; IPictureMarkerSymbol pictureMarkerSymbol = new PictureMarkerSymbolClass(); pictureMarkerSymbol.Size = 55; string strFilePath = Application.StartupPath.ToString() + "\\temp.bmp"; pBitmap.Save(strFilePath); pictureMarkerSymbol.CreateMarkerSymbolFromFile(esriIPictureType.esriIPicturePNG, strFilePath); customSymbol = (ISymbol)pictureMarkerSymbol; ///������Ⱦ���Ž�����Ⱦ string sValue; IFeature feature = null; IFeatureCursor featureCursor; featureCursor = geoFeaLayer.FeatureClass.Search(queryFilter, true); feature = featureCursor.NextFeature(); while (feature != null) { sValue = Convert.ToString(feature.get_Value(fieldIndex)); if (sValue == value) { uniValueRender.AddValue(sValue, "", customSymbol); } else { ///�ǵ�ǰ��ѡҪ�أ�����ű��ֲ��� defaultSymbol = geoFeaLayer.Renderer.get_SymbolByFeature(feature); uniValueRender.AddValue(sValue, "", defaultSymbol); } feature = featureCursor.NextFeature(); } if (featureCursor != null) { featureCursor = null; ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(featureCursor); } geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; }
private void UniqueValueRenderer(IFeatureLayer pFeatLyr, string sFieldName) { IGeoFeatureLayer pGeoFeatureLayer = pFeatLyr as IGeoFeatureLayer; ITable pTable = pFeatLyr as ITable; IUniqueValueRenderer pUniqueValueRender = new UniqueValueRendererClass(); int intFieldNumber = pTable.FindField(sFieldName); pUniqueValueRender.FieldCount = 1; //设置唯一值符号化的关键字段为一个 pUniqueValueRender.set_Field(0, sFieldName); //设置唯一值符号化的第一个关键字段 IRandomColorRamp pRandomcolorramp = new RandomColorRampClass(); //随机颜色 pRandomcolorramp.StartHue = 0; pRandomcolorramp.MinValue = 0; pRandomcolorramp.MinSaturation = 15; pRandomcolorramp.EndHue = 360; pRandomcolorramp.MaxValue = 100; pRandomcolorramp.MaxSaturation = 30;//到这儿为止 IQueryFilter pQueryFilter = new QueryFilterClass(); pRandomcolorramp.Size = pFeatLyr.FeatureClass.FeatureCount(pQueryFilter);//通过属性字段的值的个数来添加颜色个数 bool bSuccess; pRandomcolorramp.CreateRamp(out bSuccess); IEnumColors pEnumRamp = pRandomcolorramp.Colors; //查询字段的值 pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(sFieldName); ICursor pCursor = pTable.Search(pQueryFilter, true); //获取属性表中对应字段的值的游标 IRow pNextRow = pCursor.NextRow(); //获取下一行,这边应是第一行 while (pNextRow != null) //若不为空添加颜色并获取下一行循环到结束 { IRowBuffer pnextrowBuffer = pNextRow; object codeValue = pnextrowBuffer.Value[intFieldNumber]; IColor pnextuniquecolor = pEnumRamp.Next(); if (pnextuniquecolor == null) { pEnumRamp.Reset(); pnextuniquecolor = pEnumRamp.Next(); } switch (pGeoFeatureLayer.FeatureClass.ShapeType) { case esriGeometryType.esriGeometryPolygon: { IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pnextuniquecolor; pUniqueValueRender.AddValue(codeValue.ToString(), "", pFillSymbol as ISymbol); pNextRow = pCursor.NextRow(); break; } case esriGeometryType.esriGeometryPolyline: { ILineSymbol plineSymbol = new SimpleLineSymbolClass(); plineSymbol.Color = pnextuniquecolor; pUniqueValueRender.AddValue(codeValue.ToString(), "", plineSymbol as ISymbol); pNextRow = pCursor.NextRow(); break; } case esriGeometryType.esriGeometryPoint: { IMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbolClass(); pMarkerSymbol.Color = pnextuniquecolor; pUniqueValueRender.AddValue(codeValue.ToString(), "", pMarkerSymbol as ISymbol); pNextRow = pCursor.NextRow(); break; } } } pGeoFeatureLayer.Renderer = pUniqueValueRender as IFeatureRenderer; axMapControl1.Refresh(); axTOCControl1.Update(); }
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(); }
private void UniqueValueRender_Click(object sender, EventArgs e) { // ITable pTable= (ITable)this.mainMapControl.get_Layer(0); int fieldIndex = pTable.FindField("NAME");//取得"NAME"字段的index,关键 IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.WhereClause = ""; pQueryFilter.AddField("NAME"); //IFeatureCursor pFeatureCursor = pTable.Search(pQueryFilter, false); int rowCount = pTable.RowCount(pQueryFilter);//取得"NAME"字段有值得行的数目,关键!!!!! //以下代码创建并设置随机颜色带对象,并生成颜色 IRandomColorRamp pColorRamp = new RandomColorRampClass(); pColorRamp.StartHue = 0; pColorRamp.MinValue = 99; pColorRamp.MinSaturation = 15; pColorRamp.EndHue = 360; pColorRamp.MaxValue = 100; pColorRamp.MaxSaturation = 30; pColorRamp.Size = rowCount; bool ok = true; pColorRamp.CreateRamp(out ok);//产生颜色 if (ok) { IEnumColors pEnumColors = pColorRamp.Colors; ISimpleFillSymbol pSimpleFillSymbol; IRowBuffer pRowBuffer; IColor pColor; string value; IUniqueValueRenderer pUniqueValueRenderer = new UniqueValueRendererClass();//创建着色对象 pUniqueValueRenderer.FieldCount = 1;//设置只对一个字段进行着色 pUniqueValueRenderer.set_Field(0, "NAME"); for (int i = 0; i < rowCount; i++) { pRowBuffer = (IRowBuffer)pTable.GetRow(i);//关键,用于取得字段值 value = pRowBuffer.get_Value(fieldIndex).ToString(); pColor = pEnumColors.Next(); pSimpleFillSymbol = new SimpleFillSymbolClass(); pSimpleFillSymbol.Color = pColor; pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid; pUniqueValueRenderer.AddValue(value, "", (ISymbol)pSimpleFillSymbol);//为每个唯一值设置Symbol,关键!!!!!! } //ITransparencyRenderer pTransparencyRenderer = pUniqueValueRenderer as ITransparencyRenderer; //pTransparencyRenderer.TransparencyField = ""; ((IGeoFeatureLayer)pTable).Renderer = pUniqueValueRenderer as IFeatureRenderer; this.mainMapControl.Refresh(esriViewDrawPhase.esriViewGeography, null, null); //this.axTOCControl.SetBuddyControl(this.mainMapControl.Object); this.axTOCControl.Update(); } }
public static Dictionary <string, string> CountUniques(ITable table, string fldName) { int idx = table.Fields.FindField(fldName); if (idx == -1) { throw new Exception(string.Format( "field {0} not found in {1}", fldName, ((IDataset)table).Name)); } IQueryFilter qf = new QueryFilterClass(); qf.AddField(fldName); var outDict = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase); ICursor cur = null; IRow row = null; try { cur = table.Search(qf, true); while ((row = cur.NextRow()) != null) { try { string key = row.get_Value(idx) is DBNull ? "<Null>" : row.get_Value(idx).ToString(); if (outDict.ContainsKey(key)) { outDict[key] = ""; } else { outDict.Add(key, ""); } } catch (Exception ex) { } finally { Marshal.ReleaseComObject(row); } } } catch (Exception ex) { string msg = row == null ? "error getting value" : "error getting value for row " + row.OID.ToString(); throw new Exception(msg, ex); } finally { if (cur != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cur); } } return(outDict); }
/// <summary> /// return a featureSet from EIDs /// </summary> /// <param name="eids">object EIDs</param> /// <param name="featureSets">array JsonObject featureSet</param> protected void GetTrace(IEnumNetEID eids, out JsonObject[] featureSets) { IEIDHelper eidHelper = new EIDHelperClass(); eidHelper.GeometricNetwork = this.geometricNetwork; eidHelper.ReturnGeometries = true; eidHelper.ReturnFeatures = true; Dictionary <int, IPair <List <int>, IFeatureClass> > dictionary = new Dictionary <int, IPair <List <int>, IFeatureClass> >(); IEnumEIDInfo enumEIDinfo = eidHelper.CreateEnumEIDInfo(eids); enumEIDinfo.Reset(); IEIDInfo eidInfo = enumEIDinfo.Next(); while (eidInfo != null) { IFeatureClass featureClass = eidInfo.Feature.Class as IFeatureClass; IFeature feature = eidInfo.Feature; int featureClassID = featureClass.FeatureClassID; if (!dictionary.ContainsKey(featureClassID)) { IPair <List <int>, IFeatureClass> pair = new Pair <List <int>, IFeatureClass>(new List <int>(), featureClass); dictionary.Add(featureClassID, pair); } dictionary[featureClassID].First.Add(feature.OID); eidInfo = enumEIDinfo.Next(); } List <JsonObject> jsonObjects = new List <JsonObject>(); foreach (int i in dictionary.Keys) { IPair <List <int>, IFeatureClass> pair = dictionary[i]; List <int> listOIDs = pair.First; IFeatureClass featureClass = pair.Second; IQueryFilter2 queryFilter = new QueryFilterClass(); if (this.OutFields[0] != "*") { List <string> listFields = new List <string>(); Array.ForEach( this.OutFields, s => { if (featureClass.Fields.FindField(s) != -1) { listFields.Add(s); } }); if (listFields.Count == 0) { queryFilter.SubFields = featureClass.OIDFieldName; } else { listFields.Each((s, index) => { if (index == 0) { queryFilter.SubFields = s; } else { queryFilter.AddField(s); } }); if (!Array.Exists(this.OutFields, s => s == featureClass.OIDFieldName)) { queryFilter.AddField(featureClass.OIDFieldName); } if (!Array.Exists(this.OutFields, s => s == featureClass.ShapeFieldName)) { queryFilter.AddField(featureClass.ShapeFieldName); } } } queryFilter.WhereClause = featureClass.OIDFieldName + " IN (" + string.Join(",", Array.ConvertAll <int, string>(listOIDs.ToArray(), s => s.ToString(CultureInfo.InvariantCulture))) + ")"; IRecordSet recordset = Helper.ConvertToRecordset(featureClass, queryFilter); jsonObjects.Add(new JsonObject(Encoding.UTF8.GetString(Conversion.ToJson(recordset)))); } featureSets = jsonObjects.ToArray(); }
private void btnAddAllValues_Click(object sender, EventArgs e) { //��ʼ���ͼ��ı����ֶε���Ϣ IFillSymbol pSymbol; IColor pColor; IColor pNextUniqueColor; IEnumColors pEnumRamp; IQueryFilter pQueryFilter; ICursor pCursor; IRow pNextRow; IRowBuffer pNextRowBuffer; object objTempValue=""; object objCodeValue; ITable pTable = pFeatLayer as ITable; IRandomColorRamp pColorRamp = new RandomColorRampClass(); m_colValues=new ArrayClass(); if (comboBoxUnique.Text != "") { int iFieldNo = pTable.FindField(comboBoxUnique.Text); if (iFieldNo != -1) { for (int i = 0; i <= 2; i++) { if (comboBoxEx1.SelectedIndex == i) { pColorRamp.StartHue = m_intColorRampArray[i, 0]; pColorRamp.EndHue = m_intColorRampArray[i, 1]; pColorRamp.MinValue = m_intColorRampArray[i, 2]; pColorRamp.MaxValue = m_intColorRampArray[i, 3]; pColorRamp.MinSaturation = m_intColorRampArray[i, 4]; pColorRamp.MaxSaturation = m_intColorRampArray[i, 5]; } } pColorRamp.Size = 100; bool ok=true; pColorRamp.CreateRamp(out ok); pEnumRamp = pColorRamp.Colors; pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(comboBoxUnique.Text); pCursor = pTable.Search(pQueryFilter, true); pNextRow = pCursor.NextRow(); m_intSymbolsNum = 0; //�����״ͼ�� if (m_strShapeType == "Fill Symbols") { IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); m_pSymbolsArray = new ESRI.ArcGIS.esriSystem.ArrayClass(); while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; objCodeValue=pNextRowBuffer.get_Value(iFieldNo); if ((objTempValue != objCodeValue) || (m_intSymbolsNum == 0)) { pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pFillSymbol.Color = pNextUniqueColor; m_pSymbolsArray.Add(pFillSymbol); m_colValues.Add(objCodeValue); m_intSymbolsNum += 1; objTempValue = objCodeValue; pFillSymbol = null; } pNextRow = pCursor.NextRow(); } } //��ͼ�� if (m_strShapeType == "Line Symbols") { ILineSymbol pLineSymbol = new SimpleLineSymbolClass(); m_pSymbolsArray.RemoveAll(); while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; objCodeValue = pNextRowBuffer.get_Value(iFieldNo); if ((objTempValue != objCodeValue) || (m_intSymbolsNum == 0)) { pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pLineSymbol.Color = pNextUniqueColor; m_pSymbolsArray.Add(pLineSymbol); m_colValues.Add(objCodeValue); m_intSymbolsNum += 1; objTempValue = objCodeValue; pLineSymbol = null; } pNextRow = pCursor.NextRow(); } } //��ͼ�� if (m_strShapeType == "Marker Symbols") { IMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbolClass(); m_pSymbolsArray.RemoveAll(); while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; objCodeValue = pNextRowBuffer.get_Value(iFieldNo); if ((objTempValue != objCodeValue) || (m_intSymbolsNum == 0)) { pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pMarkerSymbol.Color = pNextUniqueColor; m_pSymbolsArray.Add(pMarkerSymbol); m_colValues.Add(objCodeValue); m_intSymbolsNum += 1; pMarkerSymbol = null; } pNextRow = pCursor.NextRow(); } } pColorRamp = null; pQueryFilter = null; pColorRamp = null; //��ʾ���� } } }
/// <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); } }
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(); }
// 唯一值符号化 public static void UniqueValueRenderer(IFeatureLayer featureLayer, string fieldName, IMapControl2 mapControl, AxTOCControl tocControl) { ITable pTable = featureLayer as ITable; IUniqueValueRenderer pRenderer = new UniqueValueRendererClass(); pRenderer.FieldCount = 1; // 设置唯一值符号化的关键字段为一个 pRenderer.set_Field(0, fieldName); // 设置唯一值符号化的第一个关键字段 IRandomColorRamp pColorRamp = new RandomColorRampClass() { StartHue = 0, MinValue = 0, MinSaturation = 0, EndHue = 100, MaxValue = 100, MaxSaturation = 100 }; // 根据渲染字段的值的个数,设置一组随机颜色 pColorRamp.Size = featureLayer.FeatureClass.FeatureCount(new QueryFilterClass()); bool bSuccess = false; pColorRamp.CreateRamp(out bSuccess); IEnumColors pEnumColors = pColorRamp.Colors; IColor pNextUniqueColor = null; // 查询字段的值 IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(fieldName); int fieldNumber = pTable.FindField(fieldName); // 获取渲染字段索引 ICursor pCursor = pTable.Search(pQueryFilter, true); IRow pNextRow = pCursor.NextRow(); object codeValue = null; IRowBuffer pNextRowBuffer = null; while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; // 获取渲染字段的每一个值 codeValue = pNextRowBuffer.get_Value(fieldNumber); pNextUniqueColor = pEnumColors.Next(); if (pNextUniqueColor == null) { pEnumColors.Reset(); pNextUniqueColor = pEnumColors.Next(); } ISymbol pSymbol = null; switch (featureLayer.FeatureClass.ShapeType) { case esriGeometryType.esriGeometryPolygon: pSymbol = new SimpleFillSymbolClass() { Color = pNextUniqueColor }; break; case esriGeometryType.esriGeometryPolyline: pSymbol = new SimpleLineSymbolClass() { Color = pNextUniqueColor }; break; case esriGeometryType.esriGeometryPoint: pSymbol = new SimpleMarkerSymbolClass() { Color = pNextUniqueColor }; break; } pRenderer.AddValue(codeValue.ToString(), "", pSymbol); pNextRow = pCursor.NextRow(); } (featureLayer as IGeoFeatureLayer).Renderer = pRenderer as IFeatureRenderer; mapControl.Refresh(); tocControl.Update(); }
// 唯一值符号化 public static void Symbology_UniqueValue(IFeatureLayer featureLayer, string fieldName, IMapControl2 mapControl, AxTOCControl tocControl) { IUniqueValueRenderer pRenderer = new UniqueValueRendererClass() { FieldCount = 1 }; // 随机色带 IColorRamp pColorRamp = new RandomColorRampClass() { StartHue = 0, MinSaturation = 0, MinValue = 0, EndHue = 360, MaxSaturation = 100, MaxValue = 100, Size = featureLayer.FeatureClass.FeatureCount(new QueryFilterClass()) }; bool bOk = false; pColorRamp.CreateRamp(out bOk); IEnumColors pColors = pColorRamp.Colors; ITable pTable = featureLayer as ITable; int fieldIndex = pTable.FindField(fieldName); IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(fieldName); ICursor pCursor = pTable.Search(pQueryFilter, true); IRow pRow = pCursor.NextRow(); while (pRow != null) { IRowBuffer pRowBuffer = pRow as IRowBuffer; string value = pRowBuffer.get_Value(fieldIndex).ToString(); IColor pColor = pColors.Next(); ISymbol pSymbol = null; switch (featureLayer.FeatureClass.ShapeType) { case esriGeometryType.esriGeometryPoint: pSymbol = new SimpleMarkerSymbolClass() { Color = pColor }; break; case esriGeometryType.esriGeometryPolyline: pSymbol = new SimpleLineSymbolClass() { Color = pColor }; break; case esriGeometryType.esriGeometryPolygon: pSymbol = new SimpleFillSymbolClass() { Color = pColor }; break; } pRenderer.AddValue(value, "", pSymbol); pRow = pCursor.NextRow(); } (featureLayer as IGeoFeatureLayer).Renderer = pRenderer as IFeatureRenderer; mapControl.Refresh(); tocControl.Update(); }
/// <summary> /// 分级符号渲染矢量数据 /// </summary> /// <param name="pFeatureLayer"></param> /// <param name="mField"></param> public void SimpleRenderByColor(IFeatureLayer pFeatureLayer, string mField) { //分5类 int breakCount = 5; try { var pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer; //计算最大最小值 var pTable = (ITable)pGeoFeatureLayer; if (pTable.FindField(mField) == -1) { MessageBox.Show("此类型水质数据不存在"); return; } IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(""); var pCursor = pTable.Search(pQueryFilter, true); //获取统计结果 IDataStatistics pDataStatistics = new DataStatisticsClass(); pDataStatistics.Cursor = pCursor; //设置要统计字段的名称 pDataStatistics.Field = mField; //获取统计的结果 //背景色 IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = GetColor(0, 0, 0); //点符号样式 ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass(); pSimpleMarkerSymbol.Outline = true; pSimpleMarkerSymbol.OutlineColor = GetColor(0, 0, 0); //分级符号 //获取统计数据及频率 ITableHistogram pTableHistogram = new BasicTableHistogramClass(); pTableHistogram.Field = mField; pTableHistogram.Table = pTable; object dataValue, dataFrequency; IBasicHistogram pHistogram = (IBasicHistogram)pTableHistogram; pHistogram.GetHistogram(out dataValue, out dataFrequency); IClassifyGEN pClassifyGen = new NaturalBreaksClass(); //产生种类 pClassifyGen.Classify(dataValue, dataFrequency, ref breakCount); object ob = pClassifyGen.ClassBreaks; double[] classes = (double[])ob; int classesCount = classes.Length; //定义分类渲染 IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass(); pClassBreaksRenderer.Field = mField; pClassBreaksRenderer.BreakCount = classesCount; pClassBreaksRenderer.SortClassesAscending = true; pClassBreaksRenderer.MinimumBreak = classes[0]; //设置要素颜色 IColor pColor = GetColor(0, 217, 0); for (int i = 0; i < classesCount; i++) { ISimpleFillSymbol pFillSymbol1 = new SimpleFillSymbolClass(); pSimpleMarkerSymbol.Color = pColor; pFillSymbol1.Style = esriSimpleFillStyle.esriSFSSolid; pSimpleMarkerSymbol.Size = 2 * (i + 1); pClassBreaksRenderer.BackgroundSymbol = pFillSymbol1; pClassBreaksRenderer.set_Symbol(i, (ISymbol)pSimpleMarkerSymbol); pClassBreaksRenderer.set_Break(i, classes[i]); } pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer; this._pMap.AddLayer(pGeoFeatureLayer); IActiveView pActiveView = _pMap as IActiveView; if (pActiveView != null) { pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); pActiveView.Extent = pActiveView.FullExtent; } } catch (Exception e) { MessageBox.Show("渲染出错!\n" + e.ToString()); } }
public static void SpecialLineRenderer2(ILayer layer, string field, string value, ILineSymbol lineSymbol) { var geoFeaLayer = layer as IGeoFeatureLayer; IUniqueValueRenderer uniValueRender = new UniqueValueRenderer(); IQueryFilter2 queryFilter = new QueryFilterClass(); uniValueRender.FieldCount = 1; uniValueRender.Field[0] = field; queryFilter.AddField(field); if (geoFeaLayer != null) { var fieldIndex = geoFeaLayer.FeatureClass.Fields.FindField(field); var customSymbol = (ISymbol)lineSymbol; var featureCursor = geoFeaLayer.FeatureClass.Search(queryFilter, true); var feature = featureCursor.NextFeature(); while (feature != null) { var sValue = Convert.ToString(feature.Value[fieldIndex]); if (sValue == value) { uniValueRender.AddValue(sValue, "", customSymbol); } else { var defaultSymbol = geoFeaLayer.Renderer.SymbolByFeature[feature]; uniValueRender.AddValue(sValue, "", defaultSymbol); } feature = featureCursor.NextFeature(); } } ComReleaser.ReleaseCOMObject(null); //System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); //释放指针 if (geoFeaLayer != null) geoFeaLayer.Renderer = uniValueRender as IFeatureRenderer; }
private void polygonUniqueDye(ILayer pLayer) { IGeoFeatureLayer m_pGeoFeatureL; IUniqueValueRenderer pUniqueValueR; IFillSymbol pFillSymbol; IColor pNextUniqueColor; IEnumColors pEnumRamp; ITable pTable; int iFieldNumber; IRow pNextRow; IRowBuffer pNextRowBuffer; ICursor pCursor; IQueryFilter pQueryFilter; string codeValue; IRandomColorRamp pColorRamp; string strNameField = cbField1.Text; IMap pMap = axMapControl1.Map; pMap.ReferenceScale = 0; m_pGeoFeatureL = pLayer as IGeoFeatureLayer; pUniqueValueR = new UniqueValueRendererClass(); pTable = (ITable)m_pGeoFeatureL; iFieldNumber = pTable.FindField(strNameField); if (iFieldNumber == -1) { MessageBox.Show("未能找到字段" + strNameField); return; } //只用一个字段进行单值着色 pUniqueValueR.FieldCount = 1; //用于区分着色的字段 pUniqueValueR.set_Field(0, strNameField); //产生一个随机的颜色条,用的是HSV颜色模式 pColorRamp = new RandomColorRampClass(); pColorRamp.StartHue = 0; pColorRamp.MinValue = 99; pColorRamp.MinSaturation = 15; pColorRamp.EndHue = 360; pColorRamp.MaxValue = 100; pColorRamp.MaxSaturation = 30; //任意产生100歌颜色,如果知道要素的数据可以产生精确的颜色数目 pColorRamp.Size = 100; bool ok = true; pColorRamp.CreateRamp(out ok); pEnumRamp = pColorRamp.Colors; pNextUniqueColor = null; //产生查询过滤器的对象 pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(strNameField); //根据某个字段在表中找出指向所有行的游标对象 pCursor = pTable.Search(pQueryFilter, true); pNextRow = pCursor.NextRow(); //遍历所有的要素 while (pNextRow != null) { pNextRowBuffer = pNextRow; //找出row为某个定值的值 codeValue = pNextRowBuffer.get_Value(iFieldNumber).ToString(); //获取随机颜色带中的任意一个颜色 pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pNextUniqueColor; //将每次得到的要素字段值和修饰它的符号值放入着色对象中 pUniqueValueR.AddValue(codeValue, strNameField, (ISymbol)pFillSymbol); pNextRow = pCursor.NextRow(); } m_pGeoFeatureL.Renderer = (IFeatureRenderer)pUniqueValueR; axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); }
private void ThreadTest() { if (!phase.Text.Contains("-")) { MessageBox.Show("期数格式不正确"); return; } times = phase.Text.Substring(phase.Text.IndexOf("-") + 1); string[] shp = new string[2]; shp[0] = System.IO.Path.GetDirectoryName(shpPathText.Text); shp[1] = System.IO.Path.GetFileName(shpPathText.Text); if (shp[0] == null) { return; } IFeatureClass pFC = openShapefile(shp[0], shp[1]); IFeatureCursor pFeatureCur = pFC.Search(null, false); IFeature pFeature = pFeatureCur.NextFeature(); i = mg.Index(pFC); //计算要素总数 IQueryFilter tQueryFilter = new QueryFilterClass(); tQueryFilter.WhereClause = ""; tQueryFilter.AddField(pFC.OIDFieldName); Invoke(new MethodInvoker(() => { proWork.Maximum = pFC.FeatureCount(tQueryFilter); proWork.Value = 0; })); int number = 1; while (pFeature != null) { ResultItem value = new ResultItem(); value = mg.getFields(i, pFeature); #region 添加位置 if (value.Location.X == 0 || value.Location.Y == 0 || value.Project_XY.X == 0 || value.Project_XY.Y == 0 || value.RegionID == " " || (int)i["镇名"] == -1) { MessageBox.Show(@"在shapefile文件中添加经纬度(Longitude\Latitude)、平面坐标(X\Y)、图号(图号)、垃圾类别(垃圾类别)、位置(位置)和镇名(镇名) 字段项!"); return; } string pAddress = LocationService.GetLocation(value.Location.Y, value.Location.X); //基于百度API,根据经纬度获取位置信息 pFeature.set_Value((int)i["位置"], pAddress); pFeature.Store(); #endregion #region 添加图号 if (value.Figure != " " || value.Figure != null) { Invoke(new MethodInvoker(() => { proWork.Value = number++; })); pFeature = pFeatureCur.NextFeature(); continue; } string content = null; content += Judge(value.RegionID); int temp; if (!ht.ContainsKey(value.RegionID)) { ht.Add(value.RegionID, 1); } else { temp = (int)ht[value.RegionID]; temp += 1; ht[value.RegionID] = temp; } content += ht[value.RegionID].ToString().PadLeft(3, '0') + "-" + times; pFeature.set_Value((int)i["图号"], content); pFeature.Store(); #endregion Invoke(new MethodInvoker(() => { proWork.Value = number++; })); pFeature = pFeatureCur.NextFeature(); } if (!Directory.Exists(@"D:\青浦区垃圾巡查\" + phase.Text + "期")) { Directory.CreateDirectory(@"D:\青浦区垃圾巡查\" + phase.Text + "期"); } MessageBox.Show("完成!"); }
/// <summary> /// Bar Chart Render for Enviroment /// </summary> /// <param name="currentLayer"></param> /// <param name="breakCount"></param> /// <author>Shen Yongyuan</author> /// <date>20091114</date> public static void BarChartRenderSingle(ILayer currentLayer) { //Scale Symbol IGeoFeatureLayer pGeoFeatureL = currentLayer as IGeoFeatureLayer; pGeoFeatureL.ScaleSymbols = true; //Chart Render IChartRenderer pChartRenderer = new ChartRendererClass(); IRendererFields pRendererFields = (IRendererFields)pChartRenderer; pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + Town.Constant.Constant.TmpFieldName, "指标"); //Search Max IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + Town.Constant.Constant.TmpFieldName); IFeatureCursor pCursor = pGeoFeatureL.DisplayFeatureClass.Search(pQueryFilter, true); int fldFiledEcology = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + Town.Constant.Constant.TmpFieldName); List <double> valueList = new List <double>(); IFeature pFeature = pCursor.NextFeature(); while (pFeature != null) { valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEcology))); pFeature = pCursor.NextFeature(); } //Bar Chart IBarChartSymbol pBarChartSymbol = new BarChartSymbolClass(); IChartSymbol pChartSymbol = (IChartSymbol)pBarChartSymbol; pBarChartSymbol.Width = 12; IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pBarChartSymbol; pChartSymbol.MaxValue = valueList.Max(); pMarkerSymbol.Size = 50; //Set Symbol ISymbolArray pSymbolArray = (ISymbolArray)pBarChartSymbol; ISimpleFillSymbol pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Green); pSymbolArray.AddSymbol((ISymbol)pFillSymbol); //Render Attribute pChartRenderer.ChartSymbol = (IChartSymbol)pBarChartSymbol; pChartRenderer.Label = "指标"; pChartRenderer.UseOverposter = false; pChartRenderer.CreateLegend(); //Back Ground pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(239, 228, 190)); pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol; //Render Label pGeoFeatureL.Renderer = pChartRenderer as IFeatureRenderer; }
/// <summary> /// 实现要素图层属性唯一值设色 /// </summary> /// <param name="pFeatureLayer">需要设色的要素图层</param> /// <param name="fieldName">唯一值的属性字段</param> private void UniqueValueRenderer(IFeatureLayer pFeatureLayer, string fieldName) { IGeoFeatureLayer pGeoFeatureLayer = pFeatureLayer as IGeoFeatureLayer; ITable pTable = pFeatureLayer as ITable; int fieldNumber = pTable.FindField(fieldName); IUniqueValueRenderer pUniqueRenderer = new UniqueValueRendererClass(); pUniqueRenderer.FieldCount = 1; pUniqueRenderer.set_Field(0, fieldName); //设置显示颜色的范围 IRandomColorRamp pRandColorRamp = new RandomColorRampClass(); pRandColorRamp.StartHue = 0; pRandColorRamp.MinValue = 85; pRandColorRamp.MinSaturation = 15; pRandColorRamp.EndHue = 360; pRandColorRamp.MaxValue = 100; pRandColorRamp.MaxSaturation = 30; //创建随机颜色带 pRandColorRamp.Size = getUniqueValue(pFeatureLayer.FeatureClass, fieldName).Count; bool bSucess = false; pRandColorRamp.CreateRamp(out bSucess); IEnumColors pEnumColors = pRandColorRamp.Colors; IColor pNextUniqueColor = null; //属性唯一值 IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(fieldName); ICursor pCursor = pFeatureLayer.FeatureClass.Search(pQueryFilter, false) as ICursor; IRow pNextRow = pCursor.NextRow(); object codeValue = null; IRowBuffer pNextRowBuffer = null; IFillSymbol pFillSymbol = null; ILineSymbol pLineSymbol = null; IMarkerSymbol pMarkerSymbol = null; while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; codeValue = pNextRowBuffer.get_Value(fieldNumber); pNextUniqueColor = pEnumColors.Next(); if (pNextUniqueColor == null) { pEnumColors.Reset(); pNextUniqueColor = pEnumColors.Next(); } switch (pGeoFeatureLayer.FeatureClass.ShapeType) { case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint: pMarkerSymbol = new SimpleMarkerSymbolClass(); pMarkerSymbol.Color = pNextUniqueColor; pUniqueRenderer.AddValue(codeValue.ToString(), "", pMarkerSymbol as ISymbol); pNextRow = pCursor.NextRow(); break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline: pLineSymbol = new SimpleLineSymbolClass(); pLineSymbol.Color = pNextUniqueColor; pUniqueRenderer.AddValue(codeValue.ToString(), "", pLineSymbol as ISymbol); pNextRow = pCursor.NextRow(); break; case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon: pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pNextUniqueColor; pUniqueRenderer.AddValue(codeValue.ToString(), "", pFillSymbol as ISymbol); pNextRow = pCursor.NextRow(); int k = pFillSymbol.Color.CMYK; break; default: break; } } pGeoFeatureLayer.Renderer = pUniqueRenderer as IFeatureRenderer; //必须手动清除COM对象,否则会造成内存溢出(尤其是IQueryFilter,ICursor) Marshal.ReleaseComObject(pQueryFilter); Marshal.ReleaseComObject(pCursor); Marshal.ReleaseComObject(pEnumColors); }
public static void UniqueRender(ILayer currentLayer, string fieldName) { IGeoFeatureLayer m_pGeoFeatureL; IUniqueValueRenderer pUniqueValueR; IFillSymbol pFillSymbol; IColor pNextUniqueColor; IEnumColors pEnumRamp; ITable pTable; int lfieldNumber; IRow pNextRow; IRowBuffer pNextRowBuffer; ICursor pCursor; IQueryFilter pQueryFilter; string codeValue; IRandomColorRamp pColorRamp; m_pGeoFeatureL = (IGeoFeatureLayer)currentLayer; pUniqueValueR = new UniqueValueRendererClass(); pTable = (ITable)m_pGeoFeatureL; lfieldNumber = 0; for (int i = 0; i < pTable.Fields.FieldCount; i++) { if (pTable.Fields.get_Field(i).Name.ToUpper().Contains(fieldName.ToUpper())) { fieldName = pTable.Fields.get_Field(i).Name; lfieldNumber = i; break; } } pUniqueValueR.FieldCount = 1; pUniqueValueR.set_Field(0, fieldName); pColorRamp = new RandomColorRampClass(); pColorRamp.StartHue = 0; pColorRamp.MinValue = 99; pColorRamp.MinSaturation = 15; pColorRamp.EndHue = 360; pColorRamp.MaxValue = 100; pColorRamp.MaxSaturation = 30; pColorRamp.Size = 100; bool ok = true; pColorRamp.CreateRamp(out ok); pEnumRamp = pColorRamp.Colors; pNextUniqueColor = null; pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(fieldName); pCursor = pTable.Search(pQueryFilter, true); pNextRow = pCursor.NextRow(); while (pNextRow != null) { pNextRowBuffer = pNextRow; codeValue = (string)pNextRowBuffer.get_Value(lfieldNumber); pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pFillSymbol = new SimpleFillSymbolClass(); pFillSymbol.Color = pNextUniqueColor; pUniqueValueR.AddValue(codeValue, fieldName, (ISymbol) pFillSymbol); pNextRow = pCursor.NextRow(); } m_pGeoFeatureL.Renderer = (IFeatureRenderer)pUniqueValueR; }
/// <summary> /// Handler operation Identify Route Ex /// </summary> /// <param name="boundVariables">list of variables bound</param> /// <param name="operationInput">input of operation</param> /// <param name="outputFormat">format of output</param> /// <param name="requestProperties">list of request properties</param> /// <param name="responseProperties">list of response properties </param> /// <returns>response in byte</returns> private byte[] IdentifyRouteExOperHandler(NameValueCollection boundVariables, JsonObject operationInput, string outputFormat, string requestProperties, out string responseProperties) { responseProperties = "{\"Content-Type\" : \"application/json\"}"; string methodName = MethodBase.GetCurrentMethod().Name; int routeLayerID = Convert.ToInt32(boundVariables["RouteLayersID"], CultureInfo.InvariantCulture); esriUnits routeMeasureUnit = DSUtility.GetMeasureUnit(operationInput, MeasureUnit.routeMeasureUnit); esriSegmentExtension segmentExtension = DSUtility.GetSegmentExtension(operationInput); IFeatureClass featureClass = this.GetRouteFeatureClass(routeLayerID); JsonObject jsonLocation; if (!operationInput.TryGetJsonObject("location", out jsonLocation)) { throw new ArgumentException("Invalid location", methodName); } IPoint location = Conversion.ToGeometry(jsonLocation, esriGeometryType.esriGeometryPoint) as IPoint; if (location == null) { throw new ArgumentException("Invalid location", methodName); } string routeIDFieldNameValue = DSUtility.GetRouteIDFieldName(operationInput); IFields fields = featureClass.Fields; int indexField = fields.FindField(routeIDFieldNameValue); if (indexField == -1) { throw new DynamicSegmentationException(string.Format(CultureInfo.InvariantCulture, "routeIDFieldName {0} not found!", routeIDFieldNameValue)); } object routeID; bool found = operationInput.TryGetObject("routeID", out routeID); if (!found) { throw new DynamicSegmentationException("routeID not valid"); } double?tolerance; found = operationInput.TryGetAsDouble("tolerance", out tolerance); if (!found || !tolerance.HasValue) { tolerance = 0.0; } IField field = fields.get_Field(indexField); this.CheckRouteID(routeID, field); IRouteLocator2 routeLocator = DSUtility.GetRouteLocator(featureClass, routeIDFieldNameValue, routeMeasureUnit); IQueryFilter queryFilter = new QueryFilterClass(); queryFilter.SubFields = routeLocator.RouteIDFieldName; queryFilter.AddField(routeLocator.RouteFeatureClass.ShapeFieldName); string where = string.Format("{0} = {1}{2}{1}", routeLocator.RouteIDFieldNameDelimited, routeLocator.RouteIDIsString ? "'" : string.Empty, routeID); queryFilter.WhereClause = where; IPoint locationNearest = null; IFeatureCursor featureCursor = null; try { featureCursor = routeLocator.RouteFeatureClass.Search(queryFilter, true); IFeature featureRoute = featureCursor.NextFeature(); if (featureRoute == null) { throw new DynamicSegmentationException(string.Format(CultureInfo.InvariantCulture, "Feature with value {0} not found!", routeID)); } IProximityOperator proximityOperator = featureRoute.ShapeCopy as IProximityOperator; locationNearest = proximityOperator.ReturnNearestPoint(location, segmentExtension); } catch { throw; } finally { if (featureCursor != null) { Marshal.ReleaseComObject(featureCursor); } } IEnvelope envelope = locationNearest.Envelope; envelope.Expand(tolerance.Value, tolerance.Value, false); IRouteMeasurePointLocation routeMeasurePointLocation = new RouteMeasurePointLocationClass(); IRouteLocation routeLocation; IFeature feature; JsonObject result = new JsonObject(); List <JsonObject> measures = new List <JsonObject>(); IEnumRouteIdentifyResult enumResult = routeLocator.Identify(envelope, where); for (int i = 1; i <= enumResult.Count; i++) { enumResult.Next(out routeLocation, out feature); routeMeasurePointLocation = (IRouteMeasurePointLocation)routeLocation; JsonObject measure = new JsonObject(); measure.AddString("routeID", routeLocation.RouteID.ToString()); measure.AddDouble("measure", routeMeasurePointLocation.Measure); measure.AddJsonObject("location", Conversion.ToJsonObject(locationNearest, true)); measures.Add(measure); } result.AddArray("location", measures.ToArray()); return(result.JsonByte()); }
private void mnuUniqueValue_Click(object sender, EventArgs e) { ILayer pLayer = MainMap.get_Layer(0); ITable pTable = pLayer as ITable; IUniqueValueRenderer pUniqueValueRender = new UniqueValueRendererClass(); pUniqueValueRender.FieldCount = 1; pUniqueValueRender.set_Field(0, "ADCODE99"); int fldIndex = pTable.Fields.FindField("ADCODE99"); // 产生一个随机的色带 IRandomColorRamp pColorRamp = new RandomColorRampClass(); pColorRamp.StartHue = 0; pColorRamp.MinValue = 99; pColorRamp.MinSaturation = 15; pColorRamp.EndHue = 360; pColorRamp.MaxValue = 100; pColorRamp.MinSaturation = 30; // 任意产生50种颜色 pColorRamp.Size = 50; bool bOK; pColorRamp.CreateRamp(out bOK); IEnumColors pEnumRamp = pColorRamp.Colors; IColor pNextUniqueColor = null; IQueryFilter pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField("ADCODE99"); ICursor pCursor = pTable.Search(pQueryFilter, true); IRow pRow = pCursor.NextRow(); while (pRow != null) { IRowBuffer pRowBuffer = pRow as IRowBuffer; System.Object cValue = pRowBuffer.get_Value(fldIndex); pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } ISimpleFillSymbol pSym = new SimpleFillSymbolClass(); pSym.Color = pNextUniqueColor; pUniqueValueRender.AddValue(cValue.ToString(), "", pSym as ISymbol); pRow = pCursor.NextRow(); } IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer; pGeoFeatureLayer.Renderer = pUniqueValueRender as IFeatureRenderer; MainMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); }
private void btnAddAllValues_Click(object sender, EventArgs e) { //开始获得图层的表格和字段等信息 IFillSymbol pSymbol; IColor pColor; IColor pNextUniqueColor; IEnumColors pEnumRamp; IQueryFilter pQueryFilter; ICursor pCursor; IRow pNextRow; IRowBuffer pNextRowBuffer; object objTempValue = ""; object objCodeValue; ITable pTable = pFeatLayer as ITable; IRandomColorRamp pColorRamp = new RandomColorRampClass(); m_colValues = new ArrayClass(); if (comboBoxUnique.Text != "") { int iFieldNo = pTable.FindField(comboBoxUnique.Text); if (iFieldNo != -1) { for (int i = 0; i <= 2; i++) { if (comboBoxEx1.SelectedIndex == i) { pColorRamp.StartHue = m_intColorRampArray[i, 0]; pColorRamp.EndHue = m_intColorRampArray[i, 1]; pColorRamp.MinValue = m_intColorRampArray[i, 2]; pColorRamp.MaxValue = m_intColorRampArray[i, 3]; pColorRamp.MinSaturation = m_intColorRampArray[i, 4]; pColorRamp.MaxSaturation = m_intColorRampArray[i, 5]; } } pColorRamp.Size = 100; bool ok = true; pColorRamp.CreateRamp(out ok); pEnumRamp = pColorRamp.Colors; pQueryFilter = new QueryFilterClass(); pQueryFilter.AddField(comboBoxUnique.Text); pCursor = pTable.Search(pQueryFilter, true); pNextRow = pCursor.NextRow(); m_intSymbolsNum = 0; //填加面状图层 if (m_strShapeType == "Fill Symbols") { IFillSymbol pFillSymbol = new SimpleFillSymbolClass(); m_pSymbolsArray = new ESRI.ArcGIS.esriSystem.ArrayClass(); while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; objCodeValue = pNextRowBuffer.get_Value(iFieldNo); if ((objTempValue != objCodeValue) || (m_intSymbolsNum == 0)) { pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pFillSymbol.Color = pNextUniqueColor; m_pSymbolsArray.Add(pFillSymbol); m_colValues.Add(objCodeValue); m_intSymbolsNum += 1; objTempValue = objCodeValue; pFillSymbol = null; } pNextRow = pCursor.NextRow(); } } //线图层 if (m_strShapeType == "Line Symbols") { ILineSymbol pLineSymbol = new SimpleLineSymbolClass(); m_pSymbolsArray.RemoveAll(); while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; objCodeValue = pNextRowBuffer.get_Value(iFieldNo); if ((objTempValue != objCodeValue) || (m_intSymbolsNum == 0)) { pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pLineSymbol.Color = pNextUniqueColor; m_pSymbolsArray.Add(pLineSymbol); m_colValues.Add(objCodeValue); m_intSymbolsNum += 1; objTempValue = objCodeValue; pLineSymbol = null; } pNextRow = pCursor.NextRow(); } } //点图层 if (m_strShapeType == "Marker Symbols") { IMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbolClass(); m_pSymbolsArray.RemoveAll(); while (pNextRow != null) { pNextRowBuffer = pNextRow as IRowBuffer; objCodeValue = pNextRowBuffer.get_Value(iFieldNo); if ((objTempValue != objCodeValue) || (m_intSymbolsNum == 0)) { pNextUniqueColor = pEnumRamp.Next(); if (pNextUniqueColor == null) { pEnumRamp.Reset(); pNextUniqueColor = pEnumRamp.Next(); } pMarkerSymbol.Color = pNextUniqueColor; m_pSymbolsArray.Add(pMarkerSymbol); m_colValues.Add(objCodeValue); m_intSymbolsNum += 1; pMarkerSymbol = null; } pNextRow = pCursor.NextRow(); } } pColorRamp = null; pQueryFilter = null; pColorRamp = null; //显示符号 } } }
/// <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); } }
//进行唯一值渲染 private void UniqueValueRenderer(IFeatureLayer featureLayer, string FieldName) { int FieldIndex = featureLayer.FeatureClass.Fields.FindField(FieldName); IUniqueValueRenderer uniqueValueRenderer = new UniqueValueRendererClass(); uniqueValueRenderer.FieldCount = 1; uniqueValueRenderer.set_Field(0, FieldName); IRandomColorRamp randomColorRamp = new RandomColorRampClass(); randomColorRamp.StartHue = 0; randomColorRamp.MinValue = 0; randomColorRamp.MinSaturation = 15; randomColorRamp.EndHue = 360; randomColorRamp.MaxValue = 100; randomColorRamp.MaxSaturation = 30; IQueryFilter queryFilter = new QueryFilterClass(); randomColorRamp.Size = featureLayer.FeatureClass.FeatureCount(queryFilter); bool flag = false; randomColorRamp.CreateRamp(out flag); IEnumColors enumColors = randomColorRamp.Colors; IColor color = null; object codeValue = null; queryFilter = new QueryFilterClass(); queryFilter.AddField(FieldName); IFeatureCursor featureCursor= featureLayer.FeatureClass.Search(queryFilter, true); IFeature feature = featureCursor.NextFeature(); while (feature != null) { codeValue = feature.get_Value(FieldIndex); color = enumColors.Next(); if (color == null) { enumColors.Reset(); color = enumColors.Next(); } ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass(); simpleLineSymbol.Color = color; uniqueValueRenderer.AddValue(codeValue.ToString(), "", simpleLineSymbol as ISymbol); feature = featureCursor.NextFeature(); } IGeoFeatureLayer geoFeatureLayer = featureLayer as IGeoFeatureLayer; geoFeatureLayer.Renderer = uniqueValueRenderer as IFeatureRenderer; System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor); axMapControl1.Refresh(); axMapControl1.Update(); }