Query Layer介绍

题记

Query Layer的具体介绍大家在2010年Esri中国北方用户大会分发的ArcGIS中国通讯上已经有《ArcGIS10新特性之Query Layer介绍》,这里面就不做重复的说明了。下面所介绍的就是对文中没有涉及知识的相关补充。

概念

Query Layer是通过 SQL 查询定义的图层或独立表。通过查询图层可将空间信息和非空间信息都存储在 DBMS 中,从而使这些信息可以轻松地整合到 ArcMap 中的各 GIS 项目。

其实就是把我们的空间数据图层的概念看作成后台数据库存储的表的概念,因为我们通常习惯于利用SQL语句来直接操作属性表,但是对空间数据图层来说在ArcGIS10之前是不支持的,鉴于大家对SQL的喜爱,Esri在ArcGIS10就引入了Query Layer,它就可以直接使用SQL语句进行查询或者空间数据与属性数据的联表查询。

使用前

  • 必须采用当前使用的 ArcGIS 版本支持的 DBMS 版本。
  • 查询图层定义中必须包括在查询图层中用作对象 ID 的唯一、非空的列或列组合。
  • 根据所使用的 DBMS 类型,可能需要在 DBMS 中进行一些必要的配置来使用空间类型。
  • 另外,根据 DBMS 类型,可能需要在从中创建查询图层连接的每个客户端计算机上进行一些配置。

特点

保存为文件

通过另存为图层文件 (.lyr)、创建图层包 (.lpk) 或通过地图包 (.mpk) 绑定地图和关联数据,查询图层可在用户之间、应用程序之间和其他地图文档之间轻松地实现共享。

其实这个文件与我们经常使用的MXD文件有异曲同工之妙,该文件并没有存储真正的查询数据信息,而是存储了服务器连接信息、查询过滤条件信息,这样也就保证我们随时可以查询最新的信息。

案例

为了证明新增数据可以同步在Query Layer显示,笔者进行了相关测试。

环境:Oracle数据库、ArcMap10、ArcSDE10

1:新建一个Query Layer图层

2:选择数据连接

3:针对一个图层或者一个图层与普通表进行条件过滤或者联表查询条件过滤

4:参数添加完毕后,Query Layer就可以加载到ArcMap上了,然后也可以另存为上面所说的相关格式文件。假如我们将Query Layer存储为XX.lyr文件,C:\Users\gis\AppData\Roaming\ESRI\Desktop10.0\ArcMap文件夹下会产生一个***.qcf存储Query Layer的连接信息文件。

5:编辑当前源数据文件,修改相关属性,使其在过滤条件之内。

6:重新加载Query Layer文件,发现并没有实时的将最新的数据给加载上去。

这是为什么呢?

解决方式:查看帮助,ArcGIS10有中文帮助,肯定让不少GISer为之疯狂。

如果在 ArcSDE 地理数据库中对版本化的要素类定义了查询,则查询将只返回基表中的数据;而不会返回添加表(Add 表)或删除表(Delete 表)中的任何信息。

看到这个信息就恍然大悟,原来这个Query Layer针对版本数据时这个概念啊!这点相似于版本与历史归档的关系。

感觉这个让用户有点不爽了,编辑完数据,必须实时的进行Compress,才能使数据进行同步了。

扩展

鉴于Query Layer可以保存为一个文件而不用保存数据的特点,我们在使用ArcGIS Engine开发的时候,也可以事先把我们经常要使用的查询语句所对应的数据以Query Layer的文件形式保存,到时候我们直接可以加载该*.lyr文件,然后再进行相关分析。

案例

在国土行业中,我们会使用地类图斑这个面状图层进行相关分析,因为该图层包含一个土地用途的字段(土地用途就是将不同的土地利用以不同的利用代码),因为该土地用途包含了我们使用的所有代码,但是我们有时候针对的数据往往可能是,我专门对耕地(011,012,013)或者建设用地(201等)这些进行分析或者统计,那么我们就可以事先创建不同的Query Layer进行分析,不用每次就进行先查询后分析的过程了。

Query Layer比较

Query Layer VS. Definition Query

Definition Query:单个要素类、动态显示、非保存

只是对某一个要素类进行过滤条件的查询,而且这些数据不能以文件的形式保存(注意不是将数据导出,而是说,我进行该方式的查询,如果再一次使用同样的条件只能将Where条件重新输入。

Query Layer VS. Join

Join:可以进行单个要素与属性表的连接,动态显示、非保存

这一点其实与上面的Definition Query比较类似。而且Join不能处理1对多的关系。

Query Layer VS. ArcSDE视图

ArcSDE视图:与Query Layer类似,支持单个要素类或者一个要素类与属性表联表、在数据库中以视图的形式存储。

Query Layer可用于作为地理处理工具的输入来显示数据,或使用开发人员 API 通过编程方式进行访问。Query Layer可以修改相关的过滤条件,但是ArcSDE视图都不能做到。

ArcGIS Engine开发Query Layer

获得SQL工作空间

//方式一   

IWorkspaceFactory2 workspaceFactory2 = new SqlWorkspaceFactoryClass();

// Create the connection properties.

IPropertySet connectionProps = new PropertySetClass();

connectionProps.SetProperty("dbclient", "oracle11g");

connectionProps.SetProperty("serverinstance", "lish");

//connectionProps.SetProperty("database", "sde");

connectionProps.SetProperty("authentication_mode", "dbms");

connectionProps.SetProperty("user", "sde");

connectionProps.SetProperty("password", "sde");

// Open the workspace.

IWorkspace workspace = workspaceFactory2.Open(connectionProps, 0);

//方式二

// Create the workspace factory.

Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SqlWorkspaceFactory");

IWorkspaceFactory2 workspaceFactory2 = (IWorkspaceFactory2)Activator.CreateInstance

(factoryType);

// Build a connection string.

String[] connectionProps =

{

"dbclient=SQLServer", "serverinstance=MyMachine\\SqlExpress",

"database=MyDatabase", "authentication_mode=OSA"

};

String connString = String.Join(";", connectionProps);

// Open the workspace.

IWorkspace workspace = workspaceFactory2.OpenFromString(connString, 0);

简单说明一下几个参数的意思:

Ø  Dbclient

根据不同的数据库类型填写不同的值

       SQLServer

       Oracle10g

       Oracle11g

       PostgreSQL

       Informix

       DB2

       DB2ZOS

Ø  Serverinstance

该值应该填写数据库服务器的IP或者主机名

对SQL Server Express, 使用 machine_name\instance_name

Ø  Database

连接数据库的名称

Ø  Authentication_mode

DBMS(默认) 和 operating systems authentication (OSA)两种方式.

Creating a query description

IQueryDescription queryDescription = sqlWorkspace.GetQueryDescription(

"SELECT COUNTY, HIGHWAY FROM HIGHWAYS");

queryDescription.OIDFields = "COUNTY, HIGHWAY";

Creating a query class

IQueryDescription queryDescription = sqlWorkspace.GetQueryDescription(

"SELECT * FROM PARCELS");

ITable queryClass = sqlWorkspace.OpenQueryClass("Parcels", queryDescription);

Creating a query cursor

// Construct a SQL query.

StringBuilder queryBuilder = new StringBuilder();

queryBuilder.Append("SELECT CITY_NAME, STATE_NAME, CITYSHAPE ");

queryBuilder.Append("FROM CAPITALS JOIN STATES ");

queryBuilder.Append("ON CAPITALS.FIPS = STATES.FIPS ");

queryBuilder.Append("ORDER BY CITY_NAME");

String query = queryBuilder.ToString();

using(ComReleaser comReleaser = new ComReleaser())

{

// Create the query cursor.

IFeatureCursor featureCursor = (IFeatureCursor)sqlWorkspace.OpenQueryCursor

(query);

comReleaser.ManageLifetime(featureCursor);

// Iterate through the features.

IFeature feature = null;

while ((feature = featureCursor.NextFeature()) != null)

{

// Write the values to the console.

Console.WriteLine("City: {0}", feature.get_Value(0));

Console.WriteLine("State: {0}", feature.get_Value(1));

IPoint point = feature.get_Value(2)as IPoint;

if (point != null)

{

Console.WriteLine("Location: {0}, {1}", point.X, point.Y);

}

}

}

在我们ArcGIS Engine开发中,如果进行属性查询我们通常使用IQueryFilter,联表查询使用IQueryDef,但是如果条件是只读,建议用户考虑使用这种方式,效率比较高。

转载于:https://www.cnblogs.com/sqlite3/archive/2012/06/09/2566683.html

Query Layer介绍相关推荐

  1. jQuery课程介绍、Query的介绍、Query初次体验、jQuery再次体验、jQuery中的顶级对象

    jQuery课程介绍 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  2. SAP C4C,CRM和S4HANA的Saved Query使用介绍

    Saved query is a feature which enables customer to customized query according to their special busin ...

  3. layer介绍与使用

    官方网址:http://layer.layui.com/ layer是一款近年来备受青睐的web弹层组. 获得 layer 文件包后,解压并将 layer 整个文件夹(不要拆分结构) 存放到你项目的任 ...

  4. Power Query介绍

    Power Query介绍 Power Query 是微软提供的工具,Excel 2013 版作为插件加载使用,从 Office 2016 版开始,Power Query 的功能集成到 Excel 中 ...

  5. Power Query 系列 (01) - Power Query 介绍

    Power Query 介绍 Power Query 是微软提供的工具,Excel 2013 版作为插件加载使用,从 Office 2016 版开始,Power Query 的功能集成到 Excel ...

  6. contentProvider中有关query方法的使用

    query()方法介绍  * 方法的声明如下:  * public final Cursor query(Uri uri, String[] projection, String selection, ...

  7. 剖析Caffe源码之Layer

    目录 Layer介绍 Layer分析 LayerParameter Class Layer Layer派生类 Layer源码 Layer构造函数 SetUp函数 Forward函数 Backward函 ...

  8. 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍...

    0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...

  9. 微信和支付宝相关支付业务场景介绍

    支付宝 当面付 条码支付 应用场景:商家使用扫码设备,扫描用户支付宝钱包上的条码/二维码,完成收款. 支付流程: API列表: 接口名称 描述 API地址 alipay.trade.pay 统一收单交 ...

最新文章

  1. [图示]话剧《被结婚时代》将剩女分4级
  2. AOP配置开发入门案例
  3. 【转】asp.net中@page指令的属性Inherits、Src、CodeBehind区别
  4. mysql binlog日志定时删除---计划任务
  5. 【数据结构与算法】【算法思想】 A *搜索算法
  6. centos 等保三级_等保测评三级整改-身份鉴别
  7. mysql 建表sysdate_mysql数据库基本操作练习
  8. 如何在Mac上设置QLab工作区
  9. 动手实现MVC: 4. AOP的设计与实现
  10. paip.c#图片裁剪
  11. 机器人词库 python字典_('python,2017-robot-编程字典',)
  12. linux下blast设计引物,Primer-BLAST:NCBI的引物设计和特异性检验工具
  13. 银联的支付创新产业基地将落户安徽合肥 投资达80亿
  14. 图解通信原理与案例分析-12:无线调幅广播AM案例--模拟幅度调制与点对多点广播通信详解
  15. matlab mosek安装
  16. 服务器同时传回html和图片,【待解决】木疙瘩导出HTML代码后,部署到自己的服务器上,也按照教程解决了微信签名的问题,但是上传图片功能不能用,为何?...
  17. 【Android】spinner下拉框样式修改
  18. idea社区版已经足够强大了
  19. 在SQL Sever中使用form membership认证
  20. 解决Windows PowerShell 乱码

热门文章

  1. Java笔记-非对称加密RSA的使用
  2. TCP/IP学习笔记-Qt中的ReuseAddressHint以及SO_REUSEADDR,以为组播常用场景分析
  3. C/C++ OpenCV五种滤波器综合示例
  4. 讯飞C/C++语音合成基础篇
  5. 计算机软考培训网校,计算机软考培训中心
  6. python socket 发送图片
  7. numpy 删除所有为_用Numpy和Pandas工具分析销售数据
  8. geteditor p 取消自动_自动挡汽车最热问题,N档到底是干什么用的?
  9. 数据结构之选择排序:堆排序
  10. 回溯算法之电话号码的字母组合