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

周边环境: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. ios上禁止输入表情

    ios上禁止输入表情 + (BOOL)isContainsEmoji:(NSString *)string { __block BOOL isEomji = NO; [string enumerate ...

  2. android获取View上某点的颜色

    //根据坐标获取 ImageView imageView = ((ImageView)v); Bitmap bitmap = ((BitmapDrawable)imageView.getDrawabl ...

  3. HDU1058 Humble Numbers 【数论】

    Humble Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  4. [置顶] 浅谈Android的资源编译过程

    Android APK 一.APK的结构以及生成 APK是Android Package的缩写,即Android application package文件或Android安装包.每个要安装到Andr ...

  5. Java面试题精选(三) JSP/Servlet Java面试逻辑题

    --   JSP/Servlet  Java面试逻辑题   --     很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...

  6. C#加密与解密

    密码加密之类的用处,直接复制黏贴,可用 1.加密的代码: /// <summary> /// DEC 加密过程 /// </summary> /// <param nam ...

  7. PHP学习之-1.4 计算表达式

    计算表达式 不同于HTML和CSS,在PHP中做计算,比如我们写 echo 12*3 计算结果是36.代码如下 <?php echo 12*3;?> 实例 <!DOCTYPE HTM ...

  8. 两个栈实现队列+两个队列实现栈----java

                                               两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...

  9. EasyUI - 使用一般处理程序 HttpHandler (.ashx)

    以easyui中的panel中,使用url加载数据为列. 效果: html代码: <div id="p" style="padding: 10px;"&g ...

  10. poj 3082多边形相交 'Roid Rage

    题意是判断多边形是否相交 主要的思路就是判断每一个点是否在另外的多变形内 判断一个点是否在另一个多边形内主要思路是: 判断的那个点向左边做射线,如果射线与多边形的交点为奇数个则在多边形内,偶数个则不在 ...