许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  ArcGIS空间关系:ArcEngine中的esriSpatialRelEnum枚举详解

ArcGIS空间关系:ArcEngine中的esriSpatialRelEnum枚举详解

阅读数 14
点赞 0
article_banner

本文从ArcGIS空间 查询 接口,本文偏应用,主要介绍ArcEngine枚举esriSpatialRelEnum,从ISpatialFilter的SpatialRel属性来介绍

esriSpatialRelEnum枚举


序号英文描述中文描述
1esriSpatialRelUndefinedNo Defined Spatial Relationship.没有定义的空间关系
2esriSpatialRelIntersectsQuery Geometry Intersects Target Geometry.查询几何体与目标几何体相交
3esriSpatialRelEnvelopeIntersectsEnvelope of Query Geometry Intersects Envelope of Target Geometry.查询几何体的包络线与目标几何体的包络线相交。
4esriSpatialRelIndexIntersectsQuery Geometry Intersects Index entry for Target Geometry (Primary Index Filter).查询几何体与目标几何体的索引项相交(主索引筛选器)
5esriSpatialRelTouchesQuery Geometry Touches Target Geometry.查询几何体接触目标几何体。
6esriSpatialRelOverlapsQuery Geometry Overlaps Target Geometry.查询几何体与目标几何体重叠。
7esriSpatialRelCrossesQuery Geometry Crosses Target Geometry.查询几何体与目标几何体相交。
8esriSpatialRelWithinQuery Geometry is Within Target Geometry.查询几何体在目标几何体中。
9esriSpatialRelContainsQuery Geometry Contains Target Geometry.查询几何体在目标几何体中。
10esriSpatialRelRelationQuery geometry IBE(Interior-Boundary-Exterior) relationship with target geometry.查询几何体IBE(内边界-外部)与目标几何体的关系。

1.组织测试数据以及 案例 Demo

1.1 测试数据 如下

1查询图形

在这里插入图片描述

2目标查询图形

在这里插入图片描述

1.2 为了方便查看最后结论,先贴一下结果图

在这里插入图片描述

1.3 Demo 代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Carto;
using System.Runtime.InteropServices;

namespace GISSpatialFilter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
        }

        private void btnEsriSpatialRelUndefined_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter=new SpatialFilterClass();
            pSpatialFilter.SpatialRel= esriSpatialRelEnum.esriSpatialRelUndefined;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelIntersects_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelEnvelopeIntersects_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelIndexIntersects_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIndexIntersects;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelTouches_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelTouches;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelOverlaps_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelOverlaps;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelCrosses_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelWithin_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelWithin;
            SpatialFilterQuery(pSpatialFilter);
        }

        private void btnEsriSpatialRelContains_Click(object sender, EventArgs e)
        {
            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
            pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
            SpatialFilterQuery(pSpatialFilter);
        }

        public void SpatialFilterQuery(ISpatialFilter pSpatialFilter)
        {
            try
            {
                IFeature pSourceFea = (axMapControl1.get_Layer(0) as IFeatureLayer).FeatureClass.GetFeature(1);
                pSpatialFilter.Geometry = pSourceFea.Shape;
                IFeatureClass pTargetFeaClass = (axMapControl1.get_Layer(1) as IFeatureLayer).FeatureClass;

                IFeatureCursor pFeaCursor = pTargetFeaClass.Search(pSpatialFilter, true);

                IFeature pFea = null;
                List<int> listSearch = new List<int>();
                while ((pFea = pFeaCursor.NextFeature()) != null)
                {
                    listSearch.Add(pFea.OID);
                }
                Console.WriteLine(string.Format("{0}:查询结果[{1}]", pSpatialFilter.SpatialRel, string.Join(",", listSearch)));
                Console.WriteLine();
                Marshal.ReleaseComObject(pFeaCursor);
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("{0}:查询失败[{1}]", pSpatialFilter.SpatialRel, ex.Message));
                Console.WriteLine();
            }
        }
    }
}

2.查询结果

在这里插入图片描述


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空