这里我们首先看一下ArcSDE的索引类型ST_SPATIAL_INDEX的定义:
CREATE OR REPLACE INDEXTYPE "SDE"."ST_SPATIAL_INDEX" FOR
"SDE"."ST_CONTAINS" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_CROSSES" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_ENVINTERSECTS" ("SDE"."ST_GEOMETRY", NUMBER, NUMBER, NUMBER, NUMBER),
"SDE"."ST_ENVINTERSECTS" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_EQUALS" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_INTERSECTS" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_ORDERINGEQUALS" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_OVERLAPS" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_RELATE" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY", VARCHAR2),
"SDE"."ST_TOUCHES" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY"),
"SDE"."ST_WITHIN" ("SDE"."ST_GEOMETRY", "SDE"."ST_GEOMETRY")
USING "SDE"."ST_DOMAIN_METHODS"
WITH LOCAL RANGE PARTITION
我们知道ESRI的ST_GEOMETRY类型是符合OGC规范的几何类型,上述定义中所有基于ST_GEOMETRY的空间关系操作也都符合OGC规范;除了OGC规范,ArcSDE中还包括诸如ST_ENVINTERSECTS这样非常有用的操作。数据库在执行所有这些操作的时候,都会判断是否应该使用索引来加快查询。
ArcSDE在不同的数据库中使用不同的索引算法,比如在PostgreSQL和Informix中使用的是R树索引;而Oracle和DB2中使用的是格网索引。我们现在的环境是Oracle,因此这里的空间索引就是格网索引。
如果打开ArcCatalog,打开一个Feature Class的属性对话框可以看到这样的内容:
图 8 ArcCatalog中Feature Class的空间索引属性
这里的3个“Grid ”属性对应的就是不同级别的网格的尺寸。在ArcSDE中最多可以对空间数据创建3级格网索引,每一级索引都有相应的网格尺寸:第1级索引的网格最小,第2级的网格必须是第1级大小的3倍以上,第3级网格也必须是第2级大小的三倍以上。当然,不少情况下使用1级索引就够了,那这时2级索引和3级索引的网格大小就是0。
比如上面在ArcCatalog中查看过的名为“CITIES”的Feature Class,如果查看一下它的空间索引定义是这样的:
CREATE INDEX "SDE"."A3_IX1" ON "SDE"."CITIES" ("SHAPE")
INDEXTYPE IS "SDE"."ST_SPATIAL_INDEX" PARAMETERS ('ST_GRIDS = 4.314434698311 ST_SRID = 2 ST_COMMIT_ROWS = 10000 PCTFREE 0 INITRANS 4')
从这个定义可以知道,我们在这个空间表上创建了1级空间索引A3_IX1,空间索引的网格大小约为4.3,因为这是一个世界城市的分布,其数据分布在X方向约-180到180、Y方向约-60到80的范围内,因此这个数据集大概会被分为80×30的格网。
这个索引对应的索引组织表名叫S3_IDX$,在这个表里存放了所有几何对象的索引数据,查看一下相关的信息:
SQL> desc S3_IDX$
名称 是否为空? 类型
----------------------------------------------------------------- -------- --------------------------------------------
GX NOT NULL NUMBER(38)
GY NOT NULL NUMBER(38)
MINX NOT NULL NUMBER(38)
MINY NOT NULL NUMBER(38)
MAXX NOT NULL NUMBER(38)
MAXY NOT NULL NUMBER(38)
SP_ID NOT NULL ROWID
SQL> select count(*) from S3_IDX$;
COUNT(*)
----------
2539
已用时间: 00: 00: 00.01
SQL> select * from S3_IDX$ where rownum<10;
GX GY MINX MINY MAXX MAXY SP_ID
---------- ---------- ---------- ---------- ---------- ---------- ------------------
75 103 3.2435E+11 4.4537E+11 3.2435E+11 4.4537E+11 AAASkyAAFAAAB7SAAM
75 103 3.2635E+11 4.4554E+11 3.2635E+11 4.4554E+11 AAASkyAAFAAAB7SAAL
76 80 3.2907E+11 3.4683E+11 3.2907E+11 3.4683E+11 AAASkyAAFAAAB7KAAb
76 80 3.3077E+11 3.4838E+11 3.3077E+11 3.4838E+11 AAASkyAAFAAAB7KAAZ
76 80 3.3170E+11 3.4521E+11 3.3170E+11 3.4521E+11 AAASkyAAFAAAB7KAAc
76 83 3.3172E+11 3.6106E+11 3.3172E+11 3.6106E+11 AAASkyAAFAAAB7LAAE
76 84 3.2834E+11 3.6458E+11 3.2834E+11 3.6458E+11 AAASkyAAFAAAB7LAAB
76 84 3.2902E+11 3.6541E+11 3.2902E+11 3.6541E+11 AAASkyAAFAAAB7LAAA
76 84 3.2935E+11 3.6652E+11 3.2935E+11 3.6652E+11 AAASkyAAFAAAB7LAAM
SQL> select min(GX),max(GX),min(GY),max(GY) from S3_IDX$;
MIN(GX) MAX(GX) MIN(GY) MAX(GY)
---------- ---------- ---------- ----------
51 134 80 110
从上面可以看到,在S3_IDX$表中存放了与CITIES表相同数量的记录,因为CITIES表是一个点层,因此每个几何对象(点)仅出现在一个空间索引中,如果是线层或者面层会出现比几何对象多的索引记录。S3_IDX$表的SP_ID字段存放了该索引对应的空间数据记录的ROWID;GX、GY字段分别对应了X和Y方向的网格序号,在这里我也把GX和GY的最大最小值打印了出来,你可以发现Max(GX)-Min(GX)约为80、Max(GY)-Min(GY)约为30,和我们上面估算的网格数量相符。同时,你可能也注意到Min(GX)和Min(GY)并不是0,因为这个Feature Class的Domain最小为X、Y均为-400,网格的序号是以此为原点进行计算的。
另外,ArcSDE对这个索引组织表S3_IDX$还创建有索引,这涉及到另外两个索引S3$_IX1、S3$_IX2:
CREATE UNIQUE INDEX "SDE"."S3$_IX1" ON "SDE"."S3_IDX$" ("GX", "GY", "MAXX", "MAXY", "MINX", "MINY", "SP_ID")
PCTFREE 0 INITRANS 4 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 524288 NEXT 524288 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SDE"
CREATE INDEX "SDE"."S3$_IX2" ON "SDE"."S3_IDX$" ("SP_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 524288 NEXT 524288 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "SDE"
总的来说,ArcSDE中格网索引的结构如图 9所示,btw,图中的名称实际有可能有变化,比如A_IX1就可以是自己取的任何名字,具体以ArcSDE中的ST_GEOMETRY_INDEX表中的记录为准。
图
9 ArcSDE格网索引在数据库中的组织结构
分享到:
相关推荐
### ArcSDE 与 Oracle Spatial 的空间数据存储比较与分析 #### 一、几何对象 ##### Oracle Spatial **1. SDO_GEOMETRY** Oracle Spatial 在 MDSYS 模式下定义了一系列几何类型和函数来支持空间数据的存储与使用...
ArcSDE和Oracle Spatial的定位不同
"使用Oracle Spatial对ArcSDE中的SDO_GEOMETRY类型数据进行空间操作" Oracle Spatial 是 Oracle 数据库中的一个空间数据处理组件,用于存储、管理和操作空间数据。ArcSDE 是一个空间数据引擎,用于存储和管理大规模...
直接连接(Direct Connect)是指ArcGIS直接访问Oracle Spatial数据库的一种方式,无需通过中间层如ArcSDE等工具进行数据传输。这种方式可以提高查询效率,简化系统架构,并减少维护成本。 **2.2 主要优点** - **...
【ArcSDE与Oracle9i Spatial简介】 ArcSDE是一种用于访问和管理存储在关系数据库管理系统(RDBMS)中的大型多用户地理数据库的服务器软件。它是Esri的ArcGIS平台的一部分,也是企业级解决方案的核心组件。ArcSDE的...
### Oracle Spatial与ArcSDE空间数据上载及应用比较 #### 引言 在地理信息系统(GIS)领域,Oracle Spatial与ArcSDE是目前较为流行的两种利用关系型数据库存储和管理空间数据的商用软件。随着GIS技术的发展,空间...
ArcSDE(Arc Spatial Data Engine)是Esri公司开发的一款强大的地理空间数据管理软件,它为Oracle 10g这样的大型数据库系统提供了全面的地理空间数据支持。在本篇中,我们将深入探讨ArcSDE 9.2 for Oracle 10g的授权...
"Oracle Spatial和ArcSDE的应用比较研究" Oracle Spatial和ArcSDE是当前较为流行的利用关系型数据库存储和管理空间数据的商用软件。本文首先分析Oracle Spatial和ArcSDE的存储机制,然后对二者进行比较研究,最后...
【Oracle Spatial与ArcSDE简介】 Oracle Spatial是Oracle数据库的一个扩展模块,专门用于处理和管理地理空间数据。它提供了一套全面的空间数据管理和分析功能,包括几何对象的存储、空间索引、空间查询以及复杂的...
【ArcSDE与Oracle10i Spatial数据转换】 在地理信息系统(GIS)的应用中,空间数据的管理和转换是至关重要的。ArcSDE是由Esri公司开发的一种空间数据库引擎,它允许用户将空间数据集成到关系数据库管理系统(RDBMS)中...
总的来说,Oracle Spatial与ArcSDE的结合使用,为管理和操作空间数据提供了一种强大而灵活的解决方案。无论是通过Query Layer还是ArcSDE注册图层,都能够帮助用户在ArcGIS环境中有效地利用和分析Oracle Spatial数据...
### Oracle Spatial 与 ArcSDE 的对比分析 #### 一、引言 随着地理信息系统(GIS)技术的发展,对空间数据存储与管理的需求日益增长。Oracle Spatial 与 ArcSDE 成为当前主流的空间数据存储解决方案之一。本研究...
《ArcSDE与Oracle Spatial:空间数据库的深度解析》 ArcSDE和Oracle Spatial,两者都是业界领先的空间数据管理解决方案,但它们各自有着独特的特性和优势。本文将深入探讨这两个系统在存储空间数据、建立空间索引、...
ArcSDE,全称为Arc Spatial Data Engine,是ESRI(Environmental Systems Research Institute)公司开发的一款用于管理和分发地理空间数据的软件产品。它提供了一种高效、可靠的解决方案,使用户能够在关系数据库...
- 在Oracle数据库中,不同的表空间可以被分配给特定类型的数据,例如FEATURE、ATTRIBUTE、SPATIAL_INDEX、ORACLE_INDEX等。 - 每个表空间都有其独特的用途,例如,FEATURE表空间用于存储特征数据;ATTRIBUTE表空间...
7. **集成ArcSDE**:ArcSDE是Esri公司的产品,用于将GIS数据与关系数据库管理系统(RDBMS)集成,Oracle Spatial与ArcSDE的结合提供了更全面的GIS解决方案。 8. **查询优化**:Oracle Spatial提供了高级的空间查询...
《实现ArcSDE向Oracle9i Spatial空间数据的转换》 空间数据是地理信息系统(GIS)的核心组成部分,而ArcSDE和Oracle Spatial是两种广泛使用的空间数据库引擎。这两种引擎分别由ESRI公司和Oracle公司开发,它们各自...
本文研究了基于Oracle Spatial组件实现多源异构空间数据一体化存储及管理的方法。Oracle Spatial是甲骨文公司提供的用于GIS数据存储的空间数据处理系统,它通过扩展的SDO_GEOMETRY和SDO_GEORASTER数据类型实现了矢量...
ArcSDE(Spatial Database Engine)是Esri公司开发的空间数据库引擎,它为ArcGIS(一款流行的地理信息系统软件)与Oracle数据库之间提供了桥梁,使得用户可以在Oracle数据库中存储、管理和操作空间数据。 【ArcSDE...
【对比其他产品】虽然有多个GIS和数据库厂商提供类似解决方案,如ESRI的ArcSDE和Informix的Spatial Data Blade,但Oracle Spatial凭借其先进的技术和高性能,在市场上占据主导地位,尤其适用于大型GIS系统和工程CAD...