ArcSDE关联查询时ArcMap与REST查询结果不一致的问题解决
2014-06-03 09:13
399 查看
先描述一下问题:
环境: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中就可以看到空间数据的三条记录
但是我在REST接口Query中WHERE输入“1=1”查出来的结果是5条记录
从上图分析可以看出,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:通过空间索引进行过滤
那么ArcMap又做了一层过滤,通过空间索引,而且有一个非常关键的SQL关键字(“distinct”),所以通过这个,ArcMap结果已经从5条变成了3条。
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 那么问题的原因基本上明白了,ArcMap内部做了一个过滤重复的操作,但是REST的Query页面中,由于基本没有对SELECT选项的操作(Distinct一般都输入在Select关键字后),所以无法获得正确的结果。
那么用户可以使用QueryLayer的方式在进行操作。
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 通过QueryLayer,我们可以添加Distinct关键字,过滤重复记录,那么我们就可以在REST的Query里面获得正确的结果了。
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 其他参考:
ArcGIS表关联方式介绍(一)-Join、Relate
/article/1426590.html
ArcGIS表关联方式介绍(二)-ArcSDE视图、QueryLayer、RelationshipClass
/article/1426589.html
ArcSDE性能分析——跟踪Oracle的Trace文件
/article/1426443.html
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------
环境: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中就可以看到空间数据的三条记录
但是我在REST接口Query中WHERE输入“1=1”查出来的结果是5条记录
从上图分析可以看出,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:通过空间索引进行过滤
那么ArcMap又做了一层过滤,通过空间索引,而且有一个非常关键的SQL关键字(“distinct”),所以通过这个,ArcMap结果已经从5条变成了3条。
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 那么问题的原因基本上明白了,ArcMap内部做了一个过滤重复的操作,但是REST的Query页面中,由于基本没有对SELECT选项的操作(Distinct一般都输入在Select关键字后),所以无法获得正确的结果。
那么用户可以使用QueryLayer的方式在进行操作。
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 通过QueryLayer,我们可以添加Distinct关键字,过滤重复记录,那么我们就可以在REST的Query里面获得正确的结果了。
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 其他参考:
ArcGIS表关联方式介绍(一)-Join、Relate
/article/1426590.html
ArcGIS表关联方式介绍(二)-ArcSDE视图、QueryLayer、RelationshipClass
/article/1426589.html
ArcSDE性能分析——跟踪Oracle的Trace文件
/article/1426443.html
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------
相关文章推荐
- ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决
- MySQL查询全部数据集结果不一致问题解决方案
- Linq to Sql 或linq to entities 与SQL 查询结果不一致,返回重复结果问题解决方法
- Mybatis事务下解决多次select语句查询结果一致的问题+案列(获取全局序列ID)
- MySQL查询全部数据集结果不一致问题解决方案
- 数据值为NULL,导致条件查询不到正确结果,ISNULL函数的使用解决问题
- 解决模糊查询的结果记录排序问题
- 多个表联合查询的一些问题解决,用一个表里面的查询结果来排除另外一个表的查询结果
- HQL和SQL查询的结果不一致问题!!!
- 开发日志:HQL关联查询出现语句正确,但一直查询不出结果的问题
- 解决hibernate 查询包含中文参数查不到结果的问题
- 关于eclipse和javac编译结果不一致的问题的分析与解决 (转)
- 解决ASP.NET MD5加密中文结果和ASP不一致的问题
- 解决MySql Command Line Client查询结果乱码问题
- 通用解决方案:解决NHibernate SELECT 多表查询结果List绑定控件显示问题。
- 【转】关于eclipse和javac编译结果不一致的问题的分析与解决
- 彻底解决ASP.NET MD5加密中文结果和ASP不一致的问题
- 利用冗余字段解决查询结果排序慢的问题
- top 和order by导致查询结果不一致的问题