/// <summary>
        /// Occurs when this command is clicked
        /// </summary>
        public override void OnClick()
        {
            // TODO: Add ZoomToSelectedFeatures.OnClick implementation
            ILayer            pLayer  = (ILayer)m_mapControl.CustomProperty;
            IFeatureLayer     pFLayer = (IFeatureLayer)pLayer;
            IFeatureSelection pFSel   = (IFeatureSelection)pFLayer;
            ISelectionSet     pSelSet = pFSel.SelectionSet;

            IEnumGeometry     pEnumGeom     = new EnumFeatureGeometry();
            IEnumGeometryBind pEnumGeomBind = (IEnumGeometryBind)pEnumGeom;

            pEnumGeomBind.BindGeometrySource(null, pSelSet);

            IGeometryFactory pGeomFactory = new GeometryEnvironmentClass();
            IGeometry        pGeom        = pGeomFactory.CreateGeometryFromEnumerator(pEnumGeom);
            double           dblXPer      = (pGeom.Envelope.XMax - pGeom.Envelope.XMin) / 10;
            double           dblYPer      = (pGeom.Envelope.YMax - pGeom.Envelope.YMin) / 10;
            IEnvelope        pEnvel       = new EnvelopeClass();

            pEnvel.PutCoords(pGeom.Envelope.XMin - dblXPer, pGeom.Envelope.YMin - dblYPer, pGeom.Envelope.XMax + dblXPer, pGeom.Envelope.YMax + dblYPer);
            //envelope1.PutCoords(pFLayer1.AreaOfInterest.Envelope.XMin - (pFLayer1.AreaOfInterest.Envelope.XMin * 0.0005), pFLayer1.AreaOfInterest.Envelope.YMin - (pFLayer1.AreaOfInterest.Envelope.YMin * 0.0005), pFLayer1.AreaOfInterest.Envelope.XMax * 1.0005, pFLayer1.AreaOfInterest.Envelope.YMax * 1.0005);

            m_mapControl.ActiveView.Extent = pEnvel;
            m_mapControl.ActiveView.Refresh();
        }
        void activeViewEvents_SelectionChanged()
        {
            ///loop through all feature layer and do a partial refresh if the layer is polygon
            ///This important as selection change only does a partial refresh at geoselection level and since we are drawing polygon at geography phase, this step is essential.
            IMap m_Map = m_MxDoc.FocusMap;

            ESRI.ArcGIS.esriSystem.UID m_UID = new ESRI.ArcGIS.esriSystem.UID();
            m_UID.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";
            IEnumLayer m_EnumLayer = m_Map.Layers[m_UID];
            ILayer     m_Layer     = m_EnumLayer.Next();


            IActiveView m_activeview = (IActiveView)m_MxDoc.ActivatedView;

            do
            {
                if (m_Layer is IFeatureLayer)
                {
                    if (m_Layer != null)
                    {
                        if (m_Layer.Visible == true)
                        {
                            IFeatureSelection m_FeatureSelection = (IFeatureSelection)m_Layer;
                            ISelectionSet     m_SelSet           = m_FeatureSelection.SelectionSet;



                            if (m_SelSet.Count > 0)
                            {
                                IEnumGeometry     m_EnumGeo;
                                IEnumGeometryBind m_EnumGeoBind;

                                m_EnumGeo     = new EnumFeatureGeometry();
                                m_EnumGeoBind = (IEnumGeometryBind)m_EnumGeo;
                                m_EnumGeoBind.BindGeometrySource(null, m_SelSet);

                                IGeometryFactory m_GeoFactory = new GeometryEnvironmentClass();
                                IGeometry        m_GeoEnvelop = m_GeoFactory.CreateGeometryFromEnumerator(m_EnumGeo);
                                m_activeview.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, m_GeoEnvelop.Envelope);
                            }
                            else
                            {
                                m_activeview.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                            }
                        }
                    }
                }
                m_Layer = m_EnumLayer.Next();
            } while (m_Layer != null);
        }
Beispiel #3
0
        //高亮显示查询到的要素集合
        private void ZoomToSelectedFeature(IFeatureLayer pFeatureLyr, IQueryFilter pQueryFilter)
        {
            //符号边线颜色
            IRgbColor pLineColor = new RgbColor();

            pLineColor.Green = 130;
            ILineSymbol ilSymbl = new SimpleLineSymbolClass();

            ilSymbl.Color = pLineColor;
            ilSymbl.Width = 3;
            //定义选中要素的符号为红色
            ISimpleFillSymbol ipSimpleFillSymbol = new SimpleFillSymbol();

            ipSimpleFillSymbol.Outline = ilSymbl;
            RgbColor pFillColor = new RgbColor();

            pFillColor.Green         = 60;
            ipSimpleFillSymbol.Color = pFillColor;
            ipSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSDiagonalCross;
            //选取要素集
            IFeatureSelection pFtSelection = pFeatureLyr as IFeatureSelection;

            pFtSelection.SetSelectionSymbol = true;
            pFtSelection.SelectionSymbol    = (ISymbol)ipSimpleFillSymbol;
            pFtSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);

            ISelectionSet pSelectionSet = pFtSelection.SelectionSet;
            //居中显示选中要素
            IEnumGeometry     pEnumGeom     = new EnumFeatureGeometry();
            IEnumGeometryBind pEnumGeomBind = pEnumGeom as IEnumGeometryBind;

            pEnumGeomBind.BindGeometrySource(null, pSelectionSet);
            IGeometryFactory pGeomFactory = new GeometryEnvironmentClass();
            IGeometry        pGeom        = pGeomFactory.CreateGeometryFromEnumerator(pEnumGeom);

            MyMapControl.ActiveView.Extent = pGeom.Envelope;
            MyMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
        }
Beispiel #4
0
        /// <summary>
        /// 选择一行,并在地图中显示
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void att_gridview_RowClick(object sender, RowClickEventArgs e)
        {
            GridView    att_gridview = (GridView)sender;
            GridHitInfo info         = att_gridview.CalcHitInfo(e.X, e.Y);

            //只有单击rowinditor时才执行选择行
            if (!info.InRowCell)
            {
                if (info.InRow)
                {
                    //存放selectedrow
                    ArrayList rows = new ArrayList();
                    for (int i = 0; i < att_gridview.SelectedRowsCount; i++)
                    {
                        if (att_gridview.GetSelectedRows()[i] >= 0)
                        {
                            rows.Add(att_gridview.GetDataRow(att_gridview.GetSelectedRows()[i]));
                        }
                    }
                    if (rows.Count > 0)
                    {
                        //遍历flayer_list寻找当前属性表对应的图层
                        for (int i = 0; i < flayer_list.Count; i++)
                        {
                            IDataLayer     datalayer = flayer_list[i] as IDataLayer;
                            IWorkspaceName w_name    = ((IDatasetName)(datalayer.DataSourceName)).WorkspaceName;
                            if (att_gridview.Tag.ToString() == w_name.PathName + "\\" + flayer_list[i].Name + "_" + flayer_list[i].DataSourceType)
                            {
                                IFeatureClass     m_featureclass = flayer_list[i].FeatureClass;
                                IFeatureSelection m_fselection   = flayer_list[i] as IFeatureSelection;

                                //构造查询条件
                                IQueryFilter m_queryfilter = new QueryFilterClass();
                                string       key           = flayer_list[i].FeatureClass.Fields.get_Field(0).Name;
                                string       m_whereclause = key + "=";
                                for (int j = 0; j < rows.Count; j++)
                                {
                                    DataRow m_dr = rows[j] as DataRow;
                                    if (j < 1)
                                    {
                                        m_whereclause += m_dr[0].ToString();
                                    }
                                    else
                                    {
                                        m_whereclause = m_whereclause + " or " + key + "=" + m_dr[0].ToString();
                                    }
                                }
                                m_queryfilter.WhereClause = m_whereclause;

                                //显示查询的要素
                                m_fselection.SelectFeatures(m_queryfilter, esriSelectionResultEnum.esriSelectionResultNew, false);
                                ISelectionSet     m_selectionset = m_fselection.SelectionSet;
                                IEnumGeometry     m_enumgeometry = new EnumFeatureGeometry();
                                IEnumGeometryBind m_enumgeobine  = m_enumgeometry as IEnumGeometryBind;
                                m_enumgeobine.BindGeometrySource(null, m_selectionset);
                                IGeometryFactory m_geofactory = new GeometryEnvironmentClass();
                                IGeometry        m_geometry   = m_geofactory.CreateGeometryFromEnumerator(m_enumgeometry);
                                m_mapControl.ActiveView.Extent = m_geometry.Envelope;
                                m_mapControl.Refresh();
                            }
                        }
                    }
                }
            }
        }
Beispiel #5
0
        public void SiteSelection1()
        {
            //****** Author:  James Carpenter
            //******** Date:  2/28/2017
            //* Description:  This procedure automates the site selection process for
            //*               Jen and Barry's Ice Cream Store. The form takes in criteria
            //*               and the output is a selection of cities that fit that criteria.
            //****** Locals:  pMxDoc, pMap, pLayers, pLayer, pCountyLayer, pCityLayer,
            //******          pQueryFilter, pCountyFClass, pFCursor, pEnumGeom, pEnumGeomBind,
            //******          pGeomFactory, pGeom, pSpatialFilter, pQueryFilter2, pCityFClass,
            //******          pFCursor2, pFeature2, pfSel, pActiveView
            //****************************************

            IMxDocument pMxDoc;

            pMxDoc = (IMxDocument)ArcMap.Application.Document;

            IMap pMap;

            pMap = pMxDoc.FocusMap;

            IEnumLayer pLayers;

            pLayers = pMap.Layers;

            ILayer pLayer;

            pLayer = pLayers.Next();

            // Delcaring the feature layers
            IFeatureLayer pCountyLayer = null;
            IFeatureLayer pCityLayer   = null;

            // Declaring the names of the layers
            while (pLayer != null)
            {
                if (pLayer.Name == "counties")
                {
                    pCountyLayer = (IFeatureLayer)pLayer;
                    break;
                }
                else if (pLayer.Name == "cities")
                {
                    pCityLayer = (IFeatureLayer)pLayer;
                }
                pLayer = pLayers.Next();
            }

            // Declare variables
            int farms;

            farms = Convert.ToInt32(textBox1.Text);
            int labor;

            labor = Convert.ToInt32(textBox2.Text);
            int popden;

            popden = Convert.ToInt32(textBox3.Text);
            int uni;

            uni = Convert.ToInt32(textBox4.Text);
            double crime;

            crime = Convert.ToDouble(textBox5.Text);

            // Counties Query
            IQueryFilter pQueryFilter;

            pQueryFilter             = new QueryFilter();
            pQueryFilter.WhereClause = "NO_FARMS87 > (" + farms + ") AND AGE_18_64 >= (" + labor + ") AND POP_SQMILE < (" + popden + ")";
            IFeatureClass pCountyFClass;

            pCountyFClass = pCountyLayer.FeatureClass;

            IFeatureCursor pFCursor;

            pFCursor = pCountyFClass.Search(pQueryFilter, true);


            // Move to the next feature
            IFeature pFeature;

            pFeature = pFCursor.NextFeature();

            // Merge the selected geometries

            IEnumGeometry pEnumGeom;

            pEnumGeom = new EnumFeatureGeometry();

            // Bind the selected county geometries based on the Query Filter
            IEnumGeometryBind pEnumGeomBind;

            pEnumGeomBind = (IEnumGeometryBind)pEnumGeom;
            pEnumGeomBind.BindGeometrySource(pQueryFilter, pCountyFClass);

            IGeometryFactory pGeomFactory;

            pGeomFactory = (IGeometryFactory) new GeometryEnvironment();

            // Create the new geometry
            IGeometry pGeom;

            pGeom = pGeomFactory.CreateGeometryFromEnumerator(pEnumGeom);

            // Spatial Filter
            ISpatialFilter pSpatialFilter;

            pSpatialFilter = new SpatialFilter();

            pSpatialFilter.Geometry      = pGeom;                                       // Setting equal to new geometry
            pSpatialFilter.GeometryField = "SHAPE";
            pSpatialFilter.SpatialRel    = esriSpatialRelEnum.esriSpatialRelIntersects; // Intersect new geometry


            // Cities Query
            IQueryFilter pQueryFilter2;

            pQueryFilter2             = new QueryFilter();
            pQueryFilter2             = (IQueryFilter)pSpatialFilter; // Cast the spatial filter to the IQueryFilter Interface
            pQueryFilter2.WhereClause = "UNIVERSITY = (" + uni + ") AND CRIME_INDE <= (" + crime + ")";

            IFeatureClass pCityFClass;

            pCityFClass = pCityLayer.FeatureClass;

            IFeatureCursor pFCursor2;

            pFCursor2 = pCityFClass.Search(pQueryFilter2, true);


            // Move to the next feature
            IFeature pFeature2;

            pFeature2 = pFCursor2.NextFeature();

            // Feature Selection
            IFeatureSelection pFSel;

            pFSel = (IFeatureSelection)pCityLayer;  //** QI
            pFSel.SelectFeatures(pSpatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false);

            // Message Box
            string strList = null;

            strList = "";

            int intNameField = 0;

            intNameField = pCityFClass.FindField("NAME");

            while (pFeature2 != null)
            {
                strList   = strList + pFeature2.Value[intNameField] + Environment.NewLine;
                pFeature2 = pFCursor2.NextFeature();
            }

            MessageBox.Show("The following cities fit the criteria: \n" + Environment.NewLine + strList);

            // Refresh View
            IActiveView pActiveView;

            pActiveView = (IActiveView)pMap;
            pActiveView.Refresh();
        }
        void activeViewEvents_SelectionChanged()
        {

            ///loop through all feature layer and do a partial refresh if the layer is polygon
            ///This important as selection change only does a partial refresh at geoselection level and since we are drawing polygon at geography phase, this step is essential.
                IMap m_Map = m_MxDoc.FocusMap;
                ESRI.ArcGIS.esriSystem.UID m_UID = new ESRI.ArcGIS.esriSystem.UID();
                m_UID.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}";
                IEnumLayer m_EnumLayer = m_Map.Layers[m_UID];
                ILayer m_Layer = m_EnumLayer.Next();

           
                IActiveView m_activeview = (IActiveView)m_MxDoc.ActivatedView;  

                do
                {
                    if (m_Layer is IFeatureLayer)
                    {
                         if (m_Layer != null)
                         {
                             if (m_Layer.Visible == true)
                             {
                                 IFeatureSelection m_FeatureSelection = (IFeatureSelection)m_Layer;
                                 ISelectionSet m_SelSet = m_FeatureSelection.SelectionSet;



                                 if (m_SelSet.Count > 0)
                                 {
                                     IEnumGeometry m_EnumGeo;
                                     IEnumGeometryBind m_EnumGeoBind;

                                     m_EnumGeo = new EnumFeatureGeometry();
                                     m_EnumGeoBind = (IEnumGeometryBind)m_EnumGeo;
                                     m_EnumGeoBind.BindGeometrySource(null, m_SelSet);

                                     IGeometryFactory m_GeoFactory = new GeometryEnvironmentClass();
                                     IGeometry m_GeoEnvelop = m_GeoFactory.CreateGeometryFromEnumerator(m_EnumGeo);
                                     m_activeview.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, m_GeoEnvelop.Envelope);

                                 }
                                 else
                                 {
                                     m_activeview.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                                 }

                             }
                    }
                    }
                   m_Layer = m_EnumLayer.Next();
                } while (m_Layer != null);


            
        }