[Bug]使用ST_Geometry查询结果不准确的解决方法

106 篇文章 0 订阅
99 篇文章 0 订阅

今天有个用户咨询,说是使用ST_Geometry查询,主要是面状图层查询点状图层,当面状图层的面积达到数平方公里时,就会出现不该查询到的信息却查了出来。用户是使用了sde.st_intersects,而且问题出现在为了做前端分页,使用了RowNum,那么我就找了一个数据量特别大的点图层和同投影的面图层进行测试,发现了一个问题,也就是我通过桌面叠加和ST_Geometry查询不一致的情况出现。

相关环境:

ArcSDE10 SP5 64Bit

ArcGIS Desktop 10.1

Oracle 11.2.0.1 64Bit

点状图层:ccc  有93674个点

面状图层:myarea 有3个面

从上图我们可以明显的看出ObjectiD=18的面状要素包含9个点,但是我使用ST_Geometry查询:

SQL> select  ccc.objectid from ccc,myarea where  myarea.objectid=18 and  sde.st_intersects(ccc.shape,myarea.shape)=1 ;

  OBJECTID
----------
     93767
     93766
     93769
     93765
     93768
     93772

已选择6行。

明显有问题,因为投影一样,所以这个因素排除,使用空间SQL查询最大的问题就是索引,将点状要素类的空间索引删除掉

SQL> select index_name from user_indexes where table_name='CCC';

INDEX_NAME
------------------------------
SYS_IL0000075699C00028$$
R93_SDE_ROWID_UK

然后我们再进行空间查询

SQL> select  ccc.objectid from ccc,myarea where  myarea.objectid=18 and  sde.st_intersects(ccc.shape,myarea.shape)=1 ;

  OBJECTID
----------
     93761
     93763
     93765
     93766
     93767
     93768
     93769
     93772
     93773

已选择9行。

可见,空间索引的问题,我测试了将该索引删除重建还是不行,我就将我的数据导出来,删除SDE里面的数据,再导入进去,还不行。

得出的结论:数据有问题,至于什么问题不详!

另外,我又将图上所有点导出一个单独的要素类数据

SQL> select objectid from ccd;

  OBJECTID
----------
     93764
     93769
     93771
     93766
     93768
     93770
     93767
     93772
     93773
     93763
     93761

  OBJECTID
----------
     93765
     93762

已选择13行。
同样的SQL语句

删除空间索引查询出来的结果也是9条

SQL> select index_name from user_indexes where table_name='CCD';

INDEX_NAME
------------------------------
R276_SDE_ROWID_UK
SYS_IL0000080306C00029$$

SQL> select  ccd.objectid from ccd,myarea where myarea.objectid=18  and sde.st_intersects(ccd.shape,myarea.shape)=1
;

  OBJECTID
----------
     93769
     93766
     93768
     93767
     93772
     93773
     93763
     93761
     93765

已选择9行。
如果添加上空间索引
SQL> select index_name from user_indexes where table_name='CCD';

INDEX_NAME
------------------------------
A241_IX1
R276_SDE_ROWID_UK
SYS_IL0000080306C00029$$

SQL> select  ccd.objectid from ccd,myarea where myarea.objectid=18  and sde.st_intersects(ccd.shape,myarea.shape)=1
;

  OBJECTID
----------
     93766
     93767
     93765
     93769
     93768
     93772
     93773
     93761

已选择8行。
我已经晕了,就当是数据的原因吧,我是无语了............

可见ArcSDE的ST_Geometry的问题还是很多的.

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

经过跟美国Esri的工程师的沟通,他们怀疑是一个Bug,不过可以将ArcCatalog自己生成的grid值进行自定义的修改,这样就可以得到正确的结果了。如果用户遇到类似的问题,可以有两种方式

1:重建一下空间索引

2:重新修改一下空间索引的Grid值

感兴趣的用户可以下载测试数据

最后裁定是一个bug

===================================
[#NIM086005  ST_Intersects function yields different results when using auto-calculated spatial index compared to no spatial index. ]
===================================

-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
------------------------------------------------------------------------------------------------------


Bug NIM-086005

Bug Number NIM086005
Submitted Oct 25, 2012 9:34 PM
Severity Low
Applies To ArcSDE/Enterprise Geodatabase
Version Found 10.0 SP5
Prog Language N/A
Server Platform 
Client Platform 
Database Oracle
Locale N/A
Status 
Version Fixed 10.1
SP Fixed N/A

Synopsis

ST_Intersects function yields different results when using auto-calculated spatial index compared to no spatial index.

Additional Status Information

Behavior cannot be reproduced using 10.1.

Alternate Solution

N/A


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值