示例#1
0
        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);
        }
示例#2
0
文件: After.cs 项目: yeahZL/Yahaha
        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();
            }
        }
示例#3
0
        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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        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);
 }
示例#8
0
        /// <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);
        }
示例#9
0
        /// <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));
        }
示例#10
0
        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;
            }
        }
示例#11
0
        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());
            }
        }
示例#12
0
        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);
        }
示例#13
0
        /// <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;
        }
示例#14
0
        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;
        }
示例#16
0
        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();
        }
示例#17
0
        private void btnProportionalSymbolRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = (IGeoFeatureLayer)this.mainMapControl.get_Layer(0);
            ITable pTable = pGeoFeatLyr as ITable;
            IQueryFilter pQueryFilter = new QueryFilterClass();
            pQueryFilter.AddField("GDP_1999(");
            pQueryFilter.WhereClause = "";
            ICursor pCursor;//DataStatistic对象统计需要用一个Cursor
            pCursor = pTable.Search(pQueryFilter, true);

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

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

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

            pGeoFeatLyr.Renderer = pProportionalSymbolRenderer as IFeatureRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
示例#18
0
        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();
            }
        }
示例#19
0
        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);
        }
示例#20
0
        /// <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();
        }
示例#21
0
        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;
                    //��ʾ����

                }
            }
        }
示例#22
0
        /// <summary>
        /// 按下"添加所有值"按钮后,让table按当前字段的值进行排序,并把信息添加到listView里面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUniValueAddAllValues_Click(object sender, EventArgs e)
        {
            try
            {
                string currentFieldName = this.cbbUniValueField.Text;//当前字段名

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

                this.lsvUniqueValue.Items.Clear();

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

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

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

                //循环把信息添加到listView里
                int i = 1;//注意!是从1开始,因为第一行已经被占用
                string currentValue = null;//指示当前的值
                //IDataStatistics pUniValueStatistics = new DataStatisticsClass();
                int currentValueCount;
                for (pEnumeratorUniqueValues.Reset(); pEnumeratorUniqueValues.MoveNext(); i++)
                {
                    currentValue = pEnumeratorUniqueValues.Current.ToString();//当前值
                    this.lsvUniqueValue.Items.Add(currentValue);
                    this.lsvUniqueValue.Items[i].SubItems.Add(currentValue);
                    //需要这个if的原因是SQL语句中数字和非数字的写法不一样
                    if (currentTypeIsNumeric)
                    {
                        pQueryFilter.WhereClause = "\"" + currentFieldName + "\"" + " = " + currentValue;
                    }
                    else
                    {
                        pQueryFilter.WhereClause = "\"" + currentFieldName + "\"" + " = " + "'" + currentValue + "'";
                    }
                    currentValueCount = pTable.RowCount(pQueryFilter);//table中该字段是当前值的row的个数
                    this.lsvUniqueValue.Items[i].SubItems.Add(currentValueCount.ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        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 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();
        }
示例#25
0
        // 唯一值符号化
        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();
        }
示例#26
0
        // 唯一值符号化
        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;
        }
示例#29
0
        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);
        }
示例#30
0
        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("完成!");
        }
示例#31
0
        /// <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);
        }
示例#33
0
        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;
        }
示例#34
0
        /// <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());
        }
示例#35
0
        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);
        }
示例#36
0
        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;
                    //显示符号
                }
            }
        }
示例#37
0
        /// <summary>
        /// 按下"添加所有值"按钮后,让table按当前字段的值进行排序,并把信息添加到listView里面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUniValueAddAllValues_Click(object sender, EventArgs e)
        {
            try
            {
                string currentFieldName = this.cbbUniValueField.Text;                                             //当前字段名

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

                this.lsvUniqueValue.Items.Clear();

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

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

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

                //循环把信息添加到listView里
                int    i            = 1;    //注意!是从1开始,因为第一行已经被占用
                string currentValue = null; //指示当前的值
                //IDataStatistics pUniValueStatistics = new DataStatisticsClass();
                int currentValueCount;
                for (pEnumeratorUniqueValues.Reset(); pEnumeratorUniqueValues.MoveNext(); i++)
                {
                    currentValue = pEnumeratorUniqueValues.Current.ToString();//当前值
                    this.lsvUniqueValue.Items.Add(currentValue);
                    this.lsvUniqueValue.Items[i].SubItems.Add(currentValue);
                    //需要这个if的原因是SQL语句中数字和非数字的写法不一样
                    if (currentTypeIsNumeric)
                    {
                        pQueryFilter.WhereClause = "\"" + currentFieldName + "\"" + " = " + currentValue;
                    }
                    else
                    {
                        pQueryFilter.WhereClause = "\"" + currentFieldName + "\"" + " = " + "'" + currentValue + "'";
                    }
                    currentValueCount = pTable.RowCount(pQueryFilter);//table中该字段是当前值的row的个数
                    this.lsvUniqueValue.Items[i].SubItems.Add(currentValueCount.ToString());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
示例#38
0
 //进行唯一值渲染
 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();
 }