判断A图层完全包含B图层的要素--(1)空间查询之esriSpatialRelEnum.esriSpatialRelContains(包含)

本文详细介绍了如何在GIS环境中执行空间查询,检查源图层是否包含目标图层。步骤包括连接工作空间、获取图层、定义空间查询过滤器、遍历特征进行查询,并最终输出所有满足条件的Geometry。这个过程对于地理空间数据分析至关重要。
摘要由CSDN通过智能技术生成

查询源图层包含目标图层的整体思路:
1、打开工作空间→
2、获取源featureclass/目标featureclass→
3、定义一个空间查询过滤器,设置查询条件:esriSpatialRelEnum.esriSpatialRelContains→
4、遍历源featureclss的feature,与目标featureclass进行查询,每次查询得到的结果是一个FeatureCursor,将所有的FeatureCursor存储起来(List)
5、通过List得到所有的Geometry记录,然后将这些Geometry记录输出

//1、连接工作空间
...ESRI.ArcGIS.Geodatabase.IWorkspace xWorkspace =...
//2、获取源图层和目标图层
...ESRI.ArcGIS.Geodatabase.IFeatureClass xFeatureClass1 = ...//源图层(FeatureClass)
...ESRI.ArcGIS.Geodatabase.IFeatureClass xFeatureClass2 =...//目标图层(FeatureClass)
//3、定义查询
ESRI.ArcGIS.Geodatabase.ISpatialFilter xSpatialFilter = new SpatialFilterClass
            {
                SpatialRel = ESRI.ArcGIS.Geodatabase.esriSpatialRelEnum.esriSpatialRelContains//查询条件
            };//定义一个空间查询过滤器
            
//4、遍历Feature
List<IFeatureCursor> listFeatureCursor = new List<IFeatureCursor>();//存储每次查询到的结果
IFeatureCursor xFeatureCursor1 = xFeatureClass1.Search(null, false);//xFeatureClass1的cursor
IFeature xFeature1 = xFeatureCursor1.NextFeature();
while (xFeature1 != null)
            {
                //遍历xFeatureClass1的每个Feature,然后和xFeatureClass2进行查询,查询得到两个要素数据集之间满足查询条件的结果
                IFeatureCursor xFeatureCursor = null;//xFeatureClass1和xFeatureClass2查询之后结果的cursor
                IGeometry xGeometry1 = xFeature1.Shape;
                xSpatialFilter.Geometry = xGeometry1;
                xFeatureCursor = xFeatureClass2.Search(xSpatialFilter, false);//在xFeatureClass2中根据查询条件进行查询
                listFeatureCursor.Add(xFeatureCursor);
                xFeature1 = xFeatureCursor1.NextFeature();
            }
//释放游标      System.Runtime.InteropServices.Marshal.ReleaseComObject(xFeatureCursor1);
//5、得到所有的Geomery
List<IGeometry> listGeometry = new List<IGeometry>();//存储查询得到的所有Geometry
for (int i = 0; i < listFeatureCursor.Count; i++)
            {
                IFeatureCursor xFeatureCursor = listFeatureCursor[i];
                IFeature xFeature = xFeatureCursor.NextFeature();
                while(xFeature!=null)
                {
                    IGeometry xGeometry = xFeature.Shape;
                    listGeometry.Add(xGeometry);
                    xFeature = xFeatureCursor.NextFeature();
                }
                
            }
//6、最后可以根据需要将Geometry按照指定格式输出
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值