今天有个用户咨询,说是使用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 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 |
ST_Intersects function yields different results when using auto-calculated spatial index compared to no spatial index.
Behavior cannot be reproduced using 10.1.
N/A