Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }