• Oracle Spatial图层元数据坐标范围影响R-TREE索引的ROOT MBR吗?


           Oracle Spatial的空间索引R-TREE,其实现原理为一级级的MBR(最小定界矩形)。我突然想到一个问题,它的ROOT MBR是怎么确定的?是根据元数据表user_sdo_geom_metadata中的diminfo来确定的吗?

        我们知道,diminfo字段记录了坐标系各个维度的范围,那么,R-TREE中的ROOT MBR会参考这里的信息来生成吗?还是实时计算要素集的真实边界范围?带着这个疑问,我做了个小实验。

        实验数据的情况如下:

                表名

    XZQ130802双桥区20131205

    矢量字段类型

    SDO_GEOMETRY

    空间索引类型

    R-TREE

    要素个数

    103

    坐标系

    NULL(图层的实际坐标系为4610(西安80地理坐标系),但由于使用地理坐标系时(即user_sdo_geom_metadata.srid=4610),R-TREE的ROOT MBR其类型为3008,即SOLID,是三维立方体。因此将该字段设为NULL,使ROOT MBR为2003,二维矩形。

    X 坐标真实范围

    117.838376577036 118.135164523345

    Y 坐标真实范围

    40.7245342149613 41.1363642171938

        

        第一个实验:

        将diminfo中的坐标范围改为(-180,180)(-90,90),然后创建空间索引。查看user_sdo_index_metadata中的SDO_ROOT_MBR:

        可见ROOT MBR为矩形,左下坐标为117.838377,40.724534,右上坐标为118.135165,41.136364。

        第二个实验:

        将diminfo中的坐标范围改为(117.838376577036 118.135164523345)(40.7245342149613 41.1363642171938),然后创建空间索引。查看user_sdo_index_metadata中的SDO_ROOT_MBR:

        

        结果与第一个实验完全一致。

    结论:在创建R-TREE时,ROOT MBR是根据实时计算要素集的真实范围确定的。与元数据表中记录的范围无关。

        然而,实验到此就结束了吗?好像这样轻易得出结论显得不严谨。我也认为不严谨,所以我决定打开会话跟踪,看看create spatial index到底做了些什么。经过整理,发现在确定MBR时,其过程大致是这样的。

    1)在SDO_INDEX_METADATA_TABLE中插入记录,此时插入两条

     

     

     

     

     

    2)创建一个游标,从刚刚插入的记录中查询相关数据,此时仅查询了其中一条

         

     

     

     

     

     

     

    3)在SDO_INDEX_METADATA_TABLE删除刚刚插入的记录,仅删除其中一条

     

     

     

     

     

    4)创建MDRT~索引表,以及M2~、M1~中间表

    在后面的过程中,可知M2~表用于记录第个要素的ROWID和要素MBR、M1~表用于在M2~表的基础上生成统计值,例如图层的MBR、某个坐标维度的合计值、标准差等。

    5)将每个要素的ROWID和要素MBR插入到M2~表中

     

     

     

     

     

    6)在M2~的基础上得到统计值,并插入到M1~中

    各绑定变量值为:

        

      

    X与Y坐标,其范围值和上文实验一、二中得到的已经一致了。

      7)用M1~中的范围构建SDO_GEOMETRY,并更新到SDO_INDEX_METADATA_TABLE表中去

    至此,分析结束。在创建R-TREE时,ROOT MBR确实是根据实时计算要素集的真实范围确定的。

    欢迎转载,但本着尊重原创的精神,请标明出处
  • 相关阅读:
    Java内部类与异常类
    Java 继承和接口
    134. 加油站
    P1567 统计天数
    P2141 珠心算测验
    P1428 小鱼比可爱
    P1427 小鱼的数字游戏
    python中使用xlrd、xlwt操作excel表格详解
    同步机制
    CSS学习
  • 原文地址:https://www.cnblogs.com/6yuhang/p/5889053.html
Copyright © 2020-2023  润新知