本文从ArcGIS空间 查询 接口,本文偏应用,主要介绍ArcEngine枚举esriSpatialRelEnum,从ISpatialFilter的SpatialRel属性来介绍
| 序号 | 项 | 英文描述 | 中文描述 |
|---|---|---|---|
| 1 | esriSpatialRelUndefined | No Defined Spatial Relationship. | 没有定义的空间关系 |
| 2 | esriSpatialRelIntersects | Query Geometry Intersects Target Geometry. | 查询几何体与目标几何体相交 |
| 3 | esriSpatialRelEnvelopeIntersects | Envelope of Query Geometry Intersects Envelope of Target Geometry. | 查询几何体的包络线与目标几何体的包络线相交。 |
| 4 | esriSpatialRelIndexIntersects | Query Geometry Intersects Index entry for Target Geometry (Primary Index Filter). | 查询几何体与目标几何体的索引项相交(主索引筛选器) |
| 5 | esriSpatialRelTouches | Query Geometry Touches Target Geometry. | 查询几何体接触目标几何体。 |
| 6 | esriSpatialRelOverlaps | Query Geometry Overlaps Target Geometry. | 查询几何体与目标几何体重叠。 |
| 7 | esriSpatialRelCrosses | Query Geometry Crosses Target Geometry. | 查询几何体与目标几何体相交。 |
| 8 | esriSpatialRelWithin | Query Geometry is Within Target Geometry. | 查询几何体在目标几何体中。 |
| 9 | esriSpatialRelContains | Query Geometry Contains Target Geometry. | 查询几何体在目标几何体中。 |
| 10 | esriSpatialRelRelation | Query geometry IBE(Interior-Boundary-Exterior) relationship with target geometry. | 查询几何体IBE(内边界-外部)与目标几何体的关系。 |



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();
}
}
}
}

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