Пример #1
0
        /// <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();
        }
Пример #2
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);
        }
Пример #3
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();
                            }
                        }
                    }
                }
            }
        }
Пример #4
0
        private void btnOKNextScale_Click(object sender, EventArgs e)
        {
            if (!CheckRequirements())
            {
                return;
            }

            IFeatureLayer buildingslayer = _utilitiesArcMap.FeatureLayer(this.cboBuildingLayer.Text);

            try
            {
                if (buildingslayer != null)
                {
                    int indexField           = _utilitiesArcMap.FindField(buildingslayer, "rsi_index");
                    int inspectionfieldindex = _utilitiesArcMap.FindField(buildingslayer, "rsi");

                    IFeatureClass     buildingsfeatureclass     = buildingslayer.FeatureClass;
                    IFeatureSelection buildingsfeatureselection = buildingslayer as IFeatureSelection;
                    if (buildingsfeatureselection.SelectionSet.Count > 0)
                    {
                        Update(1, buildingslayer);
                    }

                    IFeatureCursor featurecursor = null;
                    IQueryFilter   queryfilter   = new QueryFilterClass();
                    queryfilter.WhereClause = "\"rsi\" IS NULL";


                    if (indexField > -1)
                    {
                        queryfilter.SubFields = "rsi_index";
                        IQueryFilterDefinition queryFilterDef = (IQueryFilterDefinition)queryfilter;
                        queryFilterDef.PostfixClause = "ORDER BY rsi_index";
                    }

                    featurecursor = buildingsfeatureclass.Search(queryfilter, false);

                    IFeature feature = null;

                    while ((feature = featurecursor.NextFeature()) != null)
                    {
                        IPolygon  polygon  = feature.Shape as IPolygon;
                        IPolyline polyline = feature.Shape as IPolyline;

                        if ((polygon != null) || (polyline != null))
                        {
                            buildingsfeatureselection.Clear();
                            buildingsfeatureselection.Add(feature);
                            buildingsfeatureselection.SelectionChanged();
                            IEnumGeometry     enumgeometry     = new EnumFeatureGeometryClass();
                            IEnumGeometryBind enumgeometrybind = enumgeometry as IEnumGeometryBind;
                            enumgeometrybind.BindGeometrySource(null, buildingsfeatureselection.SelectionSet);
                            IGeometryFactory geometryfactory = new GeometryEnvironmentClass();
                            IGeometry        geometry        = geometryfactory.CreateGeometryFromEnumerator(enumgeometry);

                            double    scale    = _map.MapScale;
                            IEnvelope envelope = geometry.Envelope;
                            _activeView.Extent = envelope;
                            _map.MapScale      = scale;
                            _activeView.Refresh();

                            GetStatus();

                            return;
                        }

                        IPoint point = feature.Shape as IPoint;
                        if (point != null)
                        {
                            buildingsfeatureselection.Clear();
                            buildingsfeatureselection.Add(feature);
                            buildingsfeatureselection.SelectionChanged();
                            double    scale    = _map.MapScale;
                            IEnvelope envelope = _activeView.Extent;
                            envelope.CenterAt(point);
                            _activeView.Extent = envelope;
                            _map.MapScale      = scale;
                            _activeView.Refresh();

                            GetStatus();

                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Building Inspector", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            finally
            {
                //_restartreport = false;
            }
        }