全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
上文中我们已经提到了FeatueClass对象,这是ArcGIS Engine常用的对象之一,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 ();
}
}
}
当 recycling 为 true 的时候,我们会看到程序执行到 MessageBox.Show("Recycling 参数是 true"),如 下图:
等号成立,说明了当为 true,程序返回的是同一个 Feature 的引用,查询后的要素共享同一内存,说名 Next 之后前一个游标所占的内存被回收了,当为 false 的时候,等号不成立。说明系统给每一个要素分配了一 个游标。
Search和 Select方法的比较
Search 返回游标,Select 返回选择集;
游标:必须遍历游标才能得到所有的结果,不必太关注内存;
选择集: 查询后既可得到,但是通常只保留 OID 字段,数据量打的时候要考虑内存压力。
Cursor和FeatureCursor对象
Cursor 中文‘游标“,它本质上是一个指向数据的指针,自身并不包含数据。游标有三类,查询游标, 插入游标和更新游标,每一游标都是又其相应的方法得到,如查询游标是由 ITable.Search 方法得到。游 标是 GIS 中使用频率很高的,凡是和数据的查询,更新,删除等都跟他有关。ICursor 定义了对游标的操 作。当我们通过 ITable.Search 对数据进行查询,要获取具体 Row 的信息的时候,要通过 ICursor.NextRow 方法向前遍历,游标是不能后退的。游标是和 Table 相对应的。IFeatureCursor 继承了 ICursor, IFeatureCursor 是和要素类相对应。
QueryFilter与SpatialFilter对象
在 ArcGIS Engine 中进行查询或者选择,都需要传给一个查找条件,或者过滤条件,这个条件就相当 于一般的 SQL 语句中的 Where 语句,如 Select * from 用户 where 性别=’女’;我们知道 GIS 不仅仅有 属性查询,还有一般关系型数据库不具有的空间查询。而 QueryFilter 对象和 SpatialFilter 对象分别对 应了 ArcGIS Engine 中的属性查询和空间查询。
IQueryFilter 被两个类实现 QueryFilterClass 和 SpatialFilterClass,前者是针对属性查询的,后 者是针对空间查询的。在介绍下这些对象后,我们现在来做一个高亮显示的查询操作。