今天有个用户咨询,说是使用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