基于C#的ArcEngine二次开发38: 几何关系描述接口- ISpatialFilter 最全解析(一)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 基于C#的ArcEngine二次开发38: 几何关系描述接口- ISpatialFilter 最全解析

1. ISpatialFilter接口简介

ISpatialFilter是一个包含空间和属性限制的QueryFilter,可以使用该过滤器进行要素的空间属性筛选:

使用spatial filter执行空间查询,常作为IFeatureClass::Search、IFeatureClass::Select或feature layers上相似方法的参数

需要Geometry,GeometryField和SpatialRel属性。

Geometry是源图形,根据与其的关系执行空间选择。

GeometryField是图形字段名,将其中的图形与源图形比较。

SpatialRel属性将一个esriSpatialRelEnum传入来指定空间关系。

使用esriSearchOrder指定SearchOrder。当指定属性查询后,该属性将指定先执行那一部分查询,该属性仅对SDE数据源有效。

SaptialRelDescription是个字符串,可代替SpatialRel属性定义额外的空间关系。这种情况下,SpatialRel参数必须设置成esriSpatialRelRelation。

esriGeometry提供其他方式执行空间查询。


2 属性与方法

2.1 概述表

image.png

image.png

2.2 ISpatialFilter.SpatialRelDescription

public stringSpatialRelDescription {get; set;}


用来表述查询要素和对比要素的空间关系的数组,使用9个字符进行空间关系描述,使用该参数要求SpatialRel属性取枚举值esriSpatialRelRelation.它允许比较两个几何图形之间存在的任何空间关系, 空间关系由查询几何图形的边界、内部和外部与对比图形的交点确定。A spatial relationship is defined by the intersections between the boundary, interior, and exterior of the query geometry and the requested geometry.所有被esriSpatialRelEnum定义的关系,都可以由该属性计算得到。


描述空间关系的三个基本概念:


内部:形状的内部定义为整个形状减去其边界,也即其边界内部的所有部分。[Interior:The interior of a shape is defined as the entire shape minus its boundary. All shapes have interior.]

边界:线和面的边界,点没有边界的概念,线的边界包含其所有终点,面的边界包含其多边形的轮廓线。[Boundary: Linear and area shapes have boundaries, but point shapes do not. The boundary of linear shapes consists of the end points of all linear parts. The boundary of area shapes consists of the linear boundary of the polygon shell(s)]

外部:面的形状之外,所有形状都有外部。[Exterior:The area outside a shape. All shapes have an exterior.]

注意两个图形的外部是相交的


Each element for the first shape, the query geometry, may be tested against each element of the second shape, the requested geometry, giving nine possible spatial intersections as listed in the table below:

image.png

说明: in 'FFFTTT***', relationships 1-3 must be false, relationships 4-6 must be true, and relationships 7-9 are not tested.


组合示例:


Shares a boundary: '****T***'

Shares a boundary and interiors intersect: 'T***T****'

Shares a boundary and interiors do not intersect: 'F***T****'

Does not touch the boundary and interiors intersect: 'T***F****'

与esriSpatialRelEnum含义对应的字符串


[Approximate  esriSpatialRelEnum SpatialRelDescription Strings ]


image.png

image.png

image.png

2.3 ISpatialFilter.SpatialRel

[C#]public esriSpatialRelEnumSpatialRel {get; set;}


说明:


大多数空间关系是由边界、内部和外部的交集定义的;

所有形状都有内部,直线和多边形有一个边界;

大多数空间关系在检查两个特征之间的空间关系时使用容差。在大多数情况下,此公差是搜索要素的XY公差。公差范围内的所有几何图形都视为相交。在重叠情况下,公差设置最小重叠。重叠小于公差的几何图形将不会被视为重叠。

Most spatial relationships are defined by the intersection of boundaries, interior and exterior. All shapes have an interior. Lines and polygons have a boundary. Most spatial relations use a tolerance when examining the spatial relationship between two features. In most cases this tolerance is the XY tolerance of the search feature. All geometries within the tolerance are seen as intersecting. In the overlaps case the tolerance sets the minimum overlap. Geometries that overlap less than the tolerance will not be seen as overlapping.

20200504160408109.png

用到XY容差的关系:esriSpatialRelIntersects,esriSpatialRelEnvelopeIntersects,esriSpatialRelTouches, esriSpatialRelOverlaps, esriSpatialRelCrosses, esriSpatialRelWithin,esriSpatialRelContains

esriSpatialRelRelation使用XY分辨率,通常比XY的容差小十倍

esriSpatialRelIndexIntersects不使用容差


相关文章
|
2月前
|
C# Windows
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
这篇文章提供了Visual Studio 2022社区版C#环境的搭建和安装使用指南,包括下载、安装步骤和创建C#窗体应用程序的详细图文解析。
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
|
9天前
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
25 7
C# 9.0 新特性解析
|
8天前
|
C# 开发者
C# 10.0 新特性解析
C# 10.0 在性能、可读性和开发效率方面进行了多项增强。本文介绍了文件范围的命名空间、记录结构体、只读结构体、局部函数的递归优化、改进的模式匹配和 lambda 表达式等新特性,并通过代码示例帮助理解这些特性。
20 2
|
16天前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
36 3
|
1月前
|
自动驾驶 安全 物联网
|
17天前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。
|
2月前
|
网络协议 安全 Linux
网卡接口跃点数:概念与重要性解析
在计算机网络中,跃点数(Hop Count)是指数据包从源设备传输到目标设备时经过的路由器或网关数量,是衡量路径长度的关键指标。本文详细介绍了跃点数的概念、计算方法及其在网络管理中的重要性,包括性能评估、故障排除、网络优化及路由选择等方面的应用。通过使用traceroute或tracert命令,网络管理员可以轻松获取跃点数信息,并据此优化网络结构,提高数据传输效率和安全性。尽管跃点数是重要指标,但仍需与其他因素结合分析以全面评估网络性能。
|
3月前
|
存储 安全 程序员
|
13天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
29 3
|
1月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
101 0

推荐镜像

更多