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