和查询相关的对象和接口
2013-08-08 10:31
232 查看
查询在GIS领域应该是一个很频繁的操作,在GIS中除了具有属性查询(和其他关系型数据库的查询类似),还提供了空间查询。在介绍查询的时候,让我们先了解下面的对象。
Table对象
Table是不含有空间信息的一张二维表,它主要实现了ITable接口。在这张二维表中,每一行称之为Row
(IRow),ITable接口 定义了对这张二维表行的插入,更新,查询,以及删除等操作。
独立表(standalone table):就是一个单独的不含空间信息的表也就是只能在ArcMap中Table of Contents
的Source选项卡中看到的。
对象类
对象类是在Table的基础上扩展起来的,因此在外观上来看,它也是一个二维表,也是用来存储非空间数
据,它与Table的区别在于它的一行是一个Object(对象),尽管在形式上也是一条记录,但它是具有属
性和行为的一个对象,而非简单的记录了。
FeatureClass对象
要素类是存储在工作空间中的一种数据组织方式,要素类是在对象类的基础上的进一步扩展,包含了现实
世界中的空间实体。要素类由要素组成(Feature),要素对应要素类中的一行,要素相当于空间对象
(Geometry )+相应的属性信息。IFeatureClass定义了对要素的查询,更新,删除等操作。关于ROW,Table,
对象类,Feature,要素类,我们可以从下面的图上得到启示:
FeatureClass对象实现了IFeatureClass接口,IFeatureClass对查询定义了两个方法
IFeatureClass.Search和IFeatureClass.Select。
Search方法需要传入两个参数,一个是过滤器;另外一个是布尔值,用于说明放回的要素游标是否被回收,
一般的,如果仅仅是为了读取数据,那么这个参数应该是true,如果要对选择出来的要素更新,那么这个
参数应该设置为false。那么这两个参数到底有什么意义,我们从下面的代码中看一下。
false 和true参数的差别
我们定义一个Search函数,通过传false和true来对这两个参数进行说明,代码如下:
void Search(IFeatureClass _pFeatureClass,bool _Bool)
{
IFeature pFt1, pFt2;
IFeatureCursor pFtCursor;
if (_Bool == false)
{
pFtCursor = _pFeatureClass.Search(null, _Bool);
pFt1 = pFtCursor.NextFeature();
while (pFt1 != null)
{
pFt2 = pFtCursor.NextFeature();
if (pFt1 == pFt2)
{
MessageBox.Show("Recycling 参数是 false");
}
pFt1 = pFtCursor.NextFeature();
}
}
else
{
pFtCursor = _pFeatureClass.Search(null, _Bool);
pFt1 = pFtCursor.NextFeature();
while (pFt1 != null)
{
pFt2 = pFtCursor.NextFeature();
if (pFt1 == pFt2)
{
MessageBox.Show("Recycling 参数是true");
}
pFt1 = pFtCursor.NextFeature();
}
}
}
Search和 Select方法的比较
Search返回游标,Select返回选择集
Table对象
Table是不含有空间信息的一张二维表,它主要实现了ITable接口。在这张二维表中,每一行称之为Row
(IRow),ITable接口 定义了对这张二维表行的插入,更新,查询,以及删除等操作。
独立表(standalone table):就是一个单独的不含空间信息的表也就是只能在ArcMap中Table of Contents
的Source选项卡中看到的。
对象类
对象类是在Table的基础上扩展起来的,因此在外观上来看,它也是一个二维表,也是用来存储非空间数
据,它与Table的区别在于它的一行是一个Object(对象),尽管在形式上也是一条记录,但它是具有属
性和行为的一个对象,而非简单的记录了。
FeatureClass对象
要素类是存储在工作空间中的一种数据组织方式,要素类是在对象类的基础上的进一步扩展,包含了现实
世界中的空间实体。要素类由要素组成(Feature),要素对应要素类中的一行,要素相当于空间对象
(Geometry )+相应的属性信息。IFeatureClass定义了对要素的查询,更新,删除等操作。关于ROW,Table,
对象类,Feature,要素类,我们可以从下面的图上得到启示:
FeatureClass对象实现了IFeatureClass接口,IFeatureClass对查询定义了两个方法
IFeatureClass.Search和IFeatureClass.Select。
Search方法需要传入两个参数,一个是过滤器;另外一个是布尔值,用于说明放回的要素游标是否被回收,
一般的,如果仅仅是为了读取数据,那么这个参数应该是true,如果要对选择出来的要素更新,那么这个
参数应该设置为false。那么这两个参数到底有什么意义,我们从下面的代码中看一下。
false 和true参数的差别
我们定义一个Search函数,通过传false和true来对这两个参数进行说明,代码如下:
void Search(IFeatureClass _pFeatureClass,bool _Bool)
{
IFeature pFt1, pFt2;
IFeatureCursor pFtCursor;
if (_Bool == false)
{
pFtCursor = _pFeatureClass.Search(null, _Bool);
pFt1 = pFtCursor.NextFeature();
while (pFt1 != null)
{
pFt2 = pFtCursor.NextFeature();
if (pFt1 == pFt2)
{
MessageBox.Show("Recycling 参数是 false");
}
pFt1 = pFtCursor.NextFeature();
}
}
else
{
pFtCursor = _pFeatureClass.Search(null, _Bool);
pFt1 = pFtCursor.NextFeature();
while (pFt1 != null)
{
pFt2 = pFtCursor.NextFeature();
if (pFt1 == pFt2)
{
MessageBox.Show("Recycling 参数是true");
}
pFt1 = pFtCursor.NextFeature();
}
}
}
Search和 Select方法的比较
Search返回游标,Select返回选择集
相关文章推荐
- ArcGIS Engine开发之旅08--和查询相关的对象和接口
- ArcGIS Engine开发之旅08--和查询相关的对象和接口
- ArcGIS Engine开发之旅08--和查询相关的对象和接口
- Django------(Related objects)相关对象查询
- CISCO交换机常见接口查询相关命令
- .NET/C#中对对象集合进行查询的方法 以及相关的 Predicate<T> 及 Action<T> 的用法
- Orcale:子查询、集合运算、随堂练习相关子查询、创建和管理表、其他数据库对象
- VS2013开发asmx接口根据ID查询对象
- 让JPA的Query查询接口返回Map对象的方法
- arcEngine开发之查询相关接口
- .NET/C#中对对象集合进行查询的方法 以及相关的 Predicate<T> 及 Action<T> 的用法
- 接口、抽象、委托 --------面向对象相关的一些概念
- 使用XStream实现Java对象转XML 以微信查询退款接口为例
- 如何查询锁表的相关对象
- C#基础系列(9)-- 第三部分 面向对象相关 -- 抽象类与接口(2)
- 接口、抽象、委托 --------面向对象相关的一些概念
- loopup第二篇:在salesforce中实现跨对象查询过滤与父查询相关的子对象的值
- 车辆报价查询接口,通过车系名称查询相关信息
- .NET/C#中对对象集合进行查询的方法 以及相关的 Predicate<T> 及 Action<T> 的用法
- oracle数据库管理--对象、角色相关查询