/// <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(); }
//高亮显示查询到的要素集合 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); }
/// <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(); } } } } } }
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; } }