public bool QueryInter(string srcLayerName, string tgtLayerName, IMap iMap, esriSpatialRelationEnum spatialRel) { DataOperator dataOperator = new DataOperator(iMap); IFeatureLayer iSrcLayer = (IFeatureLayer)dataOperator.GetLayerByName(srcLayerName); IFeatureLayer iTgtLayer = (IFeatureLayer)dataOperator.GetLayerByName(tgtLayerName); IGeometry geom; IFeature feature; IFeatureCursor featureCursor; IFeatureClass srcFeatClass; IQueryFilter queryFilter = new QueryFilter(); queryFilter.WhereClause = "CONTINENT='Asia'"; featureCursor = iTgtLayer.FeatureClass.Search(queryFilter, false); feature = featureCursor.NextFeature(); geom = feature.Shape; srcFeatClass = iSrcLayer.FeatureClass; ISpatialFilter spatialFilter = new SpatialFilter(); spatialFilter.Geometry = geom; spatialFilter.WhereClause = "POPULATION=1060000"; spatialFilter.SpatialRel = (esriSpatialRelEnum)spatialRel; IFeatureSelection featureSelect = (IFeatureSelection)iSrcLayer; featureSelect.SelectFeatures(spatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false); return(true); }
public bool QueryIntersect(string srcLayerName, string tgtLayerName, IMap iMap, esriSpatialRelationEnum spatialRel) { DataOperator dataOperator = new DataOperator(iMap); //Get layer by name IFeatureLayer iSrcLayer = (IFeatureLayer)dataOperator.GetLayerByName(srcLayerName); IFeatureLayer iTgtLayer = (IFeatureLayer)dataOperator.GetLayerByName(tgtLayerName); //using query filter to get geom IGeometry geom; IFeature feature; IFeatureCursor featCursor; IFeatureClass srcFeatClass; IQueryFilter queryFilter = new QueryFilter(); queryFilter.WhereClause = "CONTINENT='Asia'"; //set query clause featCursor = iTgtLayer.FeatureClass.Search(queryFilter, false); feature = featCursor.NextFeature(); geom = feature.Shape; //city attributes filter srcFeatClass = iSrcLayer.FeatureClass; ISpatialFilter spatialFilter = new SpatialFilter(); spatialFilter.Geometry = geom; spatialFilter.WhereClause = "POP_RANK>5"; spatialFilter.SpatialRel = (ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum)spatialRel; //select features IFeatureSelection featureSelection = (IFeatureSelection)iSrcLayer; featureSelection.SelectFeatures(spatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false); ISelectionSet selectionSet = featureSelection.SelectionSet; ICursor cursor; selectionSet.Search(null, true, out cursor); IFeatureCursor featureCursor = cursor as IFeatureCursor; if (selectionSet.Count > 0) { DataBoard dataBoard = new DataBoard(iMap, dataOperator.GetDataTable(featureCursor, iSrcLayer)); dataBoard.cbEnabledFalse(); dataBoard.Show(); } return(true); }
public DataTable GetCitiesName(string srcLayer, string tagLayer, esriSpatialRelationEnum spatialRel) { //获取图层World Cities,通过IFeatureLayer接口来判断有没有获取成功 //如果获取失败,返回NULL ILayer slayer = GetLayerByName(srcLayer); ILayer tlayer = GetLayerByName(tagLayer); IFeatureLayer sfeatureLayer = slayer as IFeatureLayer; IFeatureLayer tfeatureLayer = tlayer as IFeatureLayer; if (sfeatureLayer == null || tfeatureLayer == null) { return(null); } //利用IFeatureLayer接口的Search方法,得到要素指针接口对象,用于遍历图层中的全部要素 //利用featureCursor.NextFeature();来获取要素 //如果获取失败,返回NULL //通过查询过滤从“Continents”图层获取“亚洲”这一几何图形 IGeometry geometry; IFeature feature; IFeatureClass sfeatureClass; IQueryFilter queryFilter = new QueryFilter(); queryFilter.WhereClause = "CONTINENT='Asia'"; IFeatureCursor featureCursor = tfeatureLayer.FeatureClass.Search(queryFilter, false); feature = featureCursor.NextFeature(); geometry = feature.Shape; if (feature == null) { return(null); } //根据“亚洲”的几何图形来对城市图层进行属性和空间过滤 ISpatialFilter spatialFilter = new SpatialFilter(); sfeatureClass = sfeatureLayer.FeatureClass; spatialFilter.Geometry = geometry; spatialFilter.WhereClause = "POP_RANK=5"; spatialFilter.SpatialRel = (ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum)spatialRel; IFeatureSelection selectfeature = (IFeatureSelection)sfeatureLayer; selectfeature.SelectFeatures(spatialFilter, esriSelectionResultEnum.esriSelectionResultNew, false); //用选中的要素生成一个新图层 ISelectionSet selectionSet = selectfeature.SelectionSet; IFeatureLayer newLayer = null; if (selectionSet.Count > 0) { IFeatureLayerDefinition featureLayerDefinition = sfeatureLayer as IFeatureLayerDefinition; newLayer = featureLayerDefinition.CreateSelectionLayer(sfeatureClass.AliasName, true, null, null); } if (newLayer == null) { return(null); } IFeature newFeature; IFeatureCursor newFeatureCursor = newLayer.Search(null, false); newFeature = newFeatureCursor.NextFeature(); if (newFeature == null) { return(null); } //新建属性表 DataTable dataTable = new DataTable(); //新建数据列,用于保存各大洲的序号和名称 //将数据列添加到数据表中 DataColumn dataColumn = new DataColumn(); dataColumn.ColumnName = "序号"; dataColumn.DataType = System.Type.GetType("System.Int32"); dataTable.Columns.Add(dataColumn); dataColumn = new DataColumn(); dataColumn.ColumnName = "名称"; dataColumn.DataType = System.Type.GetType("System.String"); dataTable.Columns.Add(dataColumn); dataColumn = new DataColumn(); dataColumn.ColumnName = "人口"; dataColumn.DataType = System.Type.GetType("System.String"); dataTable.Columns.Add(dataColumn); //生成数据行DataRow //当要素不为空时,将要素在名称和序号字段上的值赋给DataRow的对应列中 //在Continents图层中,序号信息在第0个字段,名称信息在第2个字段 DataRow dataRow; while (newFeature != null) { dataRow = dataTable.NewRow(); dataRow[0] = newFeature.get_Value(0); dataRow[1] = newFeature.get_Value(2); dataRow[2] = newFeature.get_Value(9); dataTable.Rows.Add(dataRow); newFeature = newFeatureCursor.NextFeature(); } //属性表设置完成,返回属性表 return(dataTable); }
public bool QueryIntersect(string srcLayerName, string tgtLayerName, IMap imap, esriSpatialRelationEnum spatialRel) { DataOperator pDo = new DataOperator(imap, null); //定义并根据图层名称获取图层对象 IFeatureLayer iSrcLayer = new FeatureLayerClass(); iSrcLayer = (IFeatureLayer)pDo.GetLayerbyName(srcLayerName); IFeatureLayer iTgtLayer = (IFeatureLayer)pDo.GetLayerbyName(tgtLayerName); //通过查询过滤获取continent层中亚洲几何 IGeometry pGt; IFeature pF; IFeatureCursor pFcs; IFeatureClass pFcl; IQueryFilter pQf = new QueryFilter(); pQf.WhereClause = "CONTINENT='Asia'";//设置查询条件 pFcs = iTgtLayer.FeatureClass.Search(pQf, false); pF = pFcs.NextFeature(); pGt = pF.Shape; try { pFcl = iSrcLayer.FeatureClass; } catch { } ISpatialFilter pSf = new SpatialFilter(); pSf.Geometry = pGt; pSf.WhereClause = "POP_RANK=5";//人口等级低于5的城市 pSf.SpatialRel = (ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum)spatialRel; //定义要素选择对象,以要素搜索图层进行实例化 IFeatureSelection pFs = (IFeatureSelection)iSrcLayer; //以空间过滤器对要素进行选择,并建立新选择集 try { pFs.SelectFeatures(pSf, esriSelectionResultEnum.esriSelectionResultNew, false); } catch { } return(true); }