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确实是根据实时计算要素集的真实范围确定的。
Oracle Spatial图层元数据坐标范围影响R-TREE索引的ROOT MBR吗?的更多相关文章
- Oracle Spatial GIS相关研究
1.Oracle Spatial 概念相关 Oracle Spatial 是Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型.栅格数据类型和持续拓扑数据类型的原生数据类型.Oracle ...
- Oracle Spatial 中的弧段及弧相关拓扑错误
1.报告说明 此报告用于验证下列问题: ORACLE SPATIAL 0.05m的最小拓扑容差值是否可以被修改 原始数据通过ARCGIS入库数据精度是否有损失 修改ORACLE SPATIAL图层的最 ...
- SQLite R*Tree 模块测试
目录 SQLite R*Tree 模块测试 1.SQLite R*Tree 模块特性简介 2.SQLite R*Tree 模块简单测试代码 SQLite R*Tree 模块测试 相关参考: MySQL ...
- shp转oracle spatial
2010年12月1日 终于搞定了shp到oracle spatial,说下步骤和感受吧! 1 XP系统:转换工具的下载(shp2sdo.exe ):下载后把此文件复制到PATH变量包含的目录下(E: ...
- Oracle Spatial中的空间索引
转自cryolite原文 Oracle Spatial中的空间索引 Oracle Spatial可对空间数据进行R-tree索引,每个空间图层(Spatial Layer)的空间索引元信息都可以在US ...
- Oracle Spatial操作geometry方法
Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER,--几何类型,如点线面 SDO_ ...
- C#读取Oracle Spatial的sdo_geometry
oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...
- Oracle spatial与arcsde 的关系
有一些同事问过我下面这些问题: 我们用了oracle spatial sdo_geometry,是不是没用arcsde? 我们到底是使用oracle spatial还是arcsde,有点懵! 执行了c ...
- Oracle Spatial中SDO_Geometry详细说明[转]
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...
随机推荐
- 2019-2020-1 20199301《Linux内核原理与分析》第九周作业
第八章 进程的切换和系统的一般执行过程 进程的调度实际与进程的切换 ntel定义的中断类型 硬中断:就是CPU的两根引脚(可屏蔽中断和不可屏蔽中断) 软中断/异常:包括除零错误.系统调用.调试断点等在 ...
- 解决页面初始化vue加载代码问题
<style type="text/css"> /* 解决页面初始化vue加载代码问题 */ [v-cloak] { display: none; } </sty ...
- git添加doc文件维护
原文地址:https://www.cnblogs.com/yezuhui/p/6853271.html 说明: git 一般只能对纯文本文件进行版本控制,但是如果有其他中间转化软件的协助,就可以对任意 ...
- 七牛云——qshell一个神奇的工具
前言 qshell是利用七牛文档上公开的API实现的一个方便开发者测试和使用七牛API服务的命令行工具.该工具设计和开发的主要目的就是帮助开发者快速解决问题.目前该工具融合了七牛存储,CDN,以及其他 ...
- 使用go初步调用etcd
使用go初步調用etcd package main import ( "context" "go.etcd.io/etcd/clientv3" "ti ...
- ArrayList 集合 简单运用
集合 遍历 import java.util.ArrayList; class Demo02 { public static void main(String[] args) { // 创建Arra ...
- 关于redash 自定义可视化以及query runner 开发的几篇文章
以下是几篇关于如如何编码redash 自定义可视化插件以及query runner 的连接,很有借鉴价值 参考连接 https://discuss.redash.io/t/how-to-create- ...
- Noip 2017 题目整理
目录 2017Noip: 小凯的疑惑 时间复杂度 逛公园 奶酪 宝藏(50fen) 列队(QAQ不会,以后再研究吧) 2017Noip: 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正 ...
- Hash算法解决冲突的四种方法
Hash算法解决冲突的方法一般有以下几种常用的解决方法 1, 开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为 ...
- koa post提交数据,koa-bodyparser中间件来获取post提交数据
原生 Nodejs 获取 post 提交数据 首先创建并初始化一个node应用,根路由使用index.ejs模板 var Koa=require('koa') var router = require ...