首先描述来形容什么问题:

周边环境:ArcGIS10.x、Oracle 11g R2,这个问题无关与环境

假设用户使用关联查询(比方一个空间数据与一个属性数据进行关联),在ArcGIS for Desktop中查询的结果(查看属性表)。与进行REST的Query(where条件输入1=1即查询全部数据)查询的结果不一致。普通情况下REST的Query查询比桌面查询的结果要多。

----------------------------------------------------------------------------------

版权全部。文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

測试数据说明:

空间数据place

属性数据 owner

我们能够看出空间数据的place.pid与属性数据的owner.pid是关联字段,那么我们能够看到place有三个要素与owner的5条记录能够关联上。

----------------------------------------------------------------------------------

版权全部,文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

那么假设用户使用ArcGIS for Desktop的Join之后,在ArcMap中就能够看到空间数据的三条记录

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2hlMzAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

可是我在REST接口Query中WHERE输入“1=1”查出来的结果是5条记录

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2hlMzAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

从上图分析能够看出,REST的Query查询结果为5条记录。可是细心的读者能够看出,当中各有两条记录是反复记录,这个联系到我们看到的Owner表记录的信息,事实上这就是一个Oracle的连接关系,假设以属性数据为基准,那么关联起来的数据应该就是5条记录。

----------------------------------------------------------------------------------

版权全部,文章同意转载。但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

我也使用了QueryLayer或者ArcSDE视图分别进行了測试,结果都是一样的,并且。通过Oracle数据库查看创建的视图也能够看出来。数据库中的确存储了5条记录。

那么问题又出来了,为什么ArcGIS for Desktop记录的是3条数据呢?通过跟踪ArcGIS操作的Oracle后台trace文件能够看出:

1:通过空间关系查询语句,以我创建的SDE视图MyVIEW为例

ArcMap首先做了一个空间查询。使用SDE.ST_EnvIntersects过滤。假设输入相关值,能够得到5条记录。

----------------------------------------------------------------------------------

版权全部,文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

2:通过空间索引进行过滤

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2hlMzAx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

那么ArcMap又做了一层过滤。通过空间索引,并且有一个很关键的SQLkeyword(“distinct”),所以通过这个,ArcMap结果已经从5条变成了3条。

----------------------------------------------------------------------------------

版权全部。文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

那么问题的解决办法基本上明确了。ArcMap内部做了一个过滤反复的操作,可是REST的Query页面中。因为基本没有对SELECT选项的操作(Distinct一般都输入在Selectkeyword后),所以无法获得正确的结果。

那么用户能够使用QueryLayer的方式在进行操作。

----------------------------------------------------------------------------------

版权全部。文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

通过QueryLayer,我们能够加入Distinctkeyword,过滤反复记录。那么我们就能够在REST的Query里面获得正确的结果了。

----------------------------------------------------------------------------------

版权全部,文章同意转载。但必须以链接方式注明源地址,否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

其它參考:

ArcGIS表关联方式介绍(一)-Join、Relate
http://blog.csdn.net/linghe301/article/details/6649689

ArcGIS表关联方式介绍(二)-ArcSDE视图、QueryLayer、RelationshipClass
http://blog.csdn.net/linghe301/article/details/6649717

ArcSDE性能分析——跟踪Oracle的Trace文件
http://blog.csdn.net/linghe301/article/details/8640864

----------------------------------------------------------------------------------

版权全部,文章同意转载,但必须以链接方式注明源地址。否则追究法律责任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

版权声明:本文博客原创文章,博客,未经同意,不得转载。

ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决的更多相关文章

  1. Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)

    目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...

  2. Atitit.Hibernate于Criteria 使用汇总and 关系查询 and 按照子对象查询 o9o

    Atitit.Hibernate于Criteria 使用总结and 关联查询 and 依照子对象查询 o9o 1. Criteria,,Criterion ,, 1 <2. 基本的对象黑头配置磊 ...

  3. Elasticsearch使用filter进行匹配关系and,or,not,range查询

    RESTful接口URL的格式: http://localhost:9200/<index>/<type>/[<id>] 其中index.type是必须提供的. i ...

  4. .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)

    阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...

  5. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  6. 数据库基础(子查询练习、链接查询(join on 、union)及其练习)

    子查询练习一:查询销售部里的年龄大于35岁的人的所有信息 练习二:将haha表中部门的所有数字代码转换为bumen表中的字符串显示 练习三:将haha表中部门的所有数字代码转换为bumen表中的字符串 ...

  7. Python数据库查询之组合条件查询-F&Q查询

    F查询(取字段的值) 关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能 ...

  8. django models的点查询/跨表查询/双下划线查询

    django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...

  9. MySQL数据查询之多表查询

    多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...

随机推荐

  1. C++和JNI的数据转换

    链接地址:http://blog.csdn.net/manymore13/article/details/19078713 转载地址:http://www.cnblogs.com/daniel-she ...

  2. 基于visual Studio2013解决面试题之1001去除数字

     题目

  3. wxWidgets帮助文档(1)

    IMPLEMENT_APP IMPLEMENT_APP(className) 这是在应用程序中使用类的实现文件的应用程序类wxWidgets动态建筑.你用这个代替Old form: MyApp myA ...

  4. HDU 472 Hamming Distance (随机数)

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) To ...

  5. iOS技术开发-人机交互指南之UI设计基础:iOS App Anatomy

    第二篇更多的是从技术的角度对iOS界面组成原理进行了简单的解析,篇幅很短,可稍作了解:更多关于iOS开发入门的内容可参考“设计师应该了解的iOS应用开发基础知识”一文.另外,非常感谢各位朋友在微博上的 ...

  6. Eclipse和PyDev搭建完美Python开发环境(Windows篇)(转)

      摘要:本文讲解了用Eclipse和PyDev搭建Python的开发环境. 十一长假在家闲着没事儿,准备花点时间学习一下Python. 今儿花了一个下午搭建Python的开发环境,不禁感叹————开 ...

  7. centOS设为文本启动方式

    centOS图形界面须要点用系统大量的内存和CPU资源,对于server而言,高效率是最重要的,因此将Centos 默认启动改为文本方式. 在终端中输入: vi /etc/inittab 有段说明文字 ...

  8. CSDN改版问题多多

    刚刚上CSDN,发现改版了,推出C币功能. 然后看了2分钟,发现了一个Bug,于是准备提交到论坛.但是--居然提交Bug的论坛也出现Bug.印象中,每次CSDN更新版本号Bug都非常多,这,作为程序猿 ...

  9. linux下nginx负载均衡部署

    nginx负载均衡部署 Nginx("engine x") 是一个高性能的 HTTP 和 反向代理 server,也是一个 IMAP/POP3/SMTP 代理server. Ngi ...

  10. 使用JDBC调用数据库的存储过程

    本篇讲述如何使用JDBC来调用MySQL数据库中的存储过程.建议在学习如何使用JDBC调用存储过程前,请先了解如何在数据库中使用存储过程. 存储过程是指在数据库系统中,一组为了完成特定功能的SQL语句 ...