全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
什么是查询图层?
查询图层是通过 SQL 查询定义的图层或独立表。通过查询图层可将空间信息和非空间信息都存储在 DBMS 中,从而使这些信息可以轻松地整合到 ArcMap 中的各 GIS 项目。由于查询图层将通过 SQL 对数据 库表和视图进行直接查询,所以查询图层所使用的空间信息不需要位于地理数据库中。
在 ArcMap 中进行操作时,可以通过定义 SQL 查询来创建查询图层。然后针对数据库中的表和视图运行查 询,并将结果集以图层或独立表的形式(取决于查询本身)添加到 ArcMap 中。
每次在 ArcMap 中显示或使用该图层时都将执行该查询。这样,无需生成数据的副本或快照便可显示最新 信息,这尤其适用于处理频繁更改的动态信息。查询图层功能适用于 ArcGIS 支持的所有 DBMS。 查询图层允许 ArcMap 整合地理数据库和 DBMS 中的数据。因此,无论信息存储的位置和方式如何,查询 图层都可以快速地将空间信息和非空间信息整合到 GIS 项目。
使用查询图层快速浏览
具体步骤如下:
通过对 DBMS 中的表和视图定义查询,ArcMap 用户可将“查询图层”添加到地图。
查询图层类似于任何其他要素图层或单独表,所以这些图层可用于作为地理处理工具的输入来 显示数据,或使用开发人员 API 通过编程方式进行访问。
创建“查询图层”后,它可另存为图层文件 (.lyr) 或用于创建图层包 (.lpk)。这样可以很容易 地与其他应用程序、地图文档和其他用户共享“查询图层”。
ArcMap 中的所有图层都需要唯一标识符。因此,查询图层也必须含有唯一标识符。 通常,唯一标识符 字段属于 ObjectID 属性,地理数据库中所有对象均应具有该属性。但是,由于查询图层也可以使用未存 储在地理数据库中的数据创建,因此各查询图层的字段集中未必都具有 ObjectID 字段。因此,有必要指 定将哪个字段或哪组字段用于在 ArcGIS 中生成唯一标识符。默认情况下,ArcGIS 会在验证时将在结果集 中找到的第一个非空字段设置为唯一标识符字段。该值通常为适宜用作唯一标识符字段的值,但您也可以 通过在唯一标识符字段列表中选择其他字段来更改此属性。仅某些字段类型可用作唯一标识符。这些字段 类型包括整型、字符串、GUID 和日期。如果指定的是单个整型字段,则 ArcGIS 将只会直接使用该字段中 的值识别从查询图层返回的所有要素和行。但是,如果将单个字符串字段或一组字段用作唯一标识符,则 ArcGIS 必须将这些唯一值映射为一个整数。在系统需要使用 ObjectID 属性的任何时候(例如,创建地图选择内容或打开属性表时)均可在 ArcGIS 中完成此操作。
由于唯一标识符字段中的值是识别 ArcGIS 中行或要素对象的唯一值,因此,该字段中的值必须始终唯一 且不可为空。您必须确保此字段中的值满足此要求。ArcGIS 并不强制要求查询图层的唯一标识符字段中的 值必须唯一。但如果遇到不唯一的值,ArcGIS 中某些元素的行为将无法预测。我们可以在唯一标识符列表 中选择和取消选择字段。如果选择了多个字段,则这些字段中的值将作为键用于生成唯一整数值,生成字 段的名称将始终为 ESRI_OID,除非已存在具有该名称的字段。唯一值可以由多个字段组合而成,如下:
使用ISqlWorkspace
在 ArcGIS Engine 中要使用查询图层,我们要了解一个接口 ISqlWorkspace,从这个接口的名称也容 易看出,这个接口可以和 SQL 打交道,这正是 QueryLayer 的一个特点。在帮助文件中我们可以获得 ISqlWorkspace 的详细信息,ISqlWorkspace.GetTables()返回 IStringArray 类型的变量,用这个方法我们可以获取数据库中所 有的表的名称。
ISqlWorkspace.OpenQueryCursor()这个方法通过传入一个过滤语句,返回一个游标; ISqlWorkspace.OpenQueryClass()返回通过过滤条件返回 ITable 类型的对象。
ISqlWorkspace 被 SqlWorkspaceClass 实现,而 SqlWorkspaceClass 同时实现了 IWorkspace 接口。那 也就意味着 ISqlWorkspace 的使用和 IWorksapce 的使用是类似的,我们可以按照以下步骤来执行一个 QueryLayer。
获取 SqlWorkspaceFactory
获取 SqlWorkspace
构造查询语句
执行查询
获取结果
代码如下:
public IFeatureLayer OracleQueryLayer ()
{
// 创建SqlWorkspaceFactory的对象
Type pFactoryType = Type.GetTypeFromProgID ("esriDataSourcesGDB.SqlWorkspaceFactory");
IWorkspaceFactory pWorkspaceFactory = (IWorkspaceFactory) Activator.CreateInstance (pFactoryType);
// 构造连接数据库的参数
IPropertySet pConnectionProps = new PropertySetClass ();
pConnectionProps.SetProperty ("dbclient","Oracle11g");
pConnectionProps.SetProperty ("serverinstance", "esri");
pConnectionProps.SetProperty ("authentication\_mode","DBMS");
pConnectionProps.SetProperty ("user","scott");
pConnectionProps.SetProperty ("password", "arcgis");
// 打开工作空间
IWorkspace workspace = pWorkspaceFactory.Open (pConnectionProps, 0);
ISqlWorkspace pSQLWorkspace = workspace as ISqlWorkspace;
//获取数据库中的所有表的名称
IStringArray pStringArray = pSQLWorkspace.GetTables ();
for (int i = 0; i & lt; pStringArray.Count; i++)
{
MessageBox.Show (pStringArray.get_Element (i));
}
// 构造过滤条件 SELECT \* FROM PointQueryLayer
IQueryDescription queryDescription = pSQLWorkspace.GetQueryDescription ("SELECT \* FROM PointQueryLayer");
ITable pTable = pSQLWorkspace.OpenQueryClass ("QueryLayerTest", queryDescription);
IFeatureLayer pFeatureLayer = new FeatureLayerClass ();
pFeatureLayer.FeatureClass = pTable as IFeatureClass;
return pFeatureLayer;
}
效果如图