`
izuoyan
  • 浏览: 9129567 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ArcSDE vs. Oracle Spatial 11

阅读更多
1. 格网索引的创建和调整

ArcSDE提供了最多3级的空间索引,如何选择空间索引的层级、格网的网格大小设置多少合适等都关系到空间数据的性能。这里我们通过一个简单的Polygon图层入手,探讨一些格网空间索引的性能影响因素。

首先我们在ArcSDE中准备一个WGS84的面层,名为“TESTGRID”。在这个面层上我们添加2个要素,一个较小,一个较大,如图 10所示。为了提供一些参考信息,图中还将WGS84坐标范围按照30度的尺寸进行了分割,显示在这2个要素之下。

image

10 ArcSDE中有2个要素的面层

上述的数据如果我们创建3级索引,为了直观起见,我们可以把最小的网格尺寸定位30,也就是图 10中方格的大小。因此网格最大的第3级可以选择尺寸为270×270,那么第2级可以设置为90×90,第1级设置为30×30。我们如下创建空间索引:

SQL> CREATE INDEX A141_IX1 on TESTGRID(shape)

INDEXTYPE is ST_SPATIAL_INDEX

PARAMETERS ('ST_GRIDS=30,90,270 ST_SRID=2');

odciindexcreate

CREATE TABLE SDE.S141_IDX$ (gx integer, gy integer, minx integer,miny integer, maxx integer, maxy integer, sp_id

rowid,constraint S141$_IX1 primary key(gx,gy,maxx,maxy,minx,miny,sp_id)) organization index pctthreshold 5 pctfree 0

initrans 4

索引已创建。

让我们看看这个数据集中的2个要素是如何被索引的:

SQL> select * from S141_IDX$;

GX GY MINX MINY MAXX MAXY SP_ID

---------- ---------- ---------- ---------- ---------- ---------- ------------------

33554432 33554433 2.3376E+11 3.3580E+11 3.8784E+11 4.8211E+11 AAATb9AAFAAAEJIAAA

33554433 33554433 2.3376E+11 3.3580E+11 3.8784E+11 4.8211E+11 AAATb9AAFAAAEJIAAA

15 14 4.6386E+11 4.3176E+11 4.7062E+11 4.3886E+11 AAATb9AAFAAAEJIAAB

SQL> select * from testgrid where rowid='AAATb9AAFAAAEJIAAA';

OBJECTID

----------

SHAPE(ENTITY, NUMPTS, MINX, MINY, MAXX, MAXY, MINZ, MAXZ, MINM, MAXM, AREA, LEN, SRID, POINTS)

------------------------------------------------------------------------------------------------------------------------

1

ST_GEOMETRY(8, 8, -166.23891, -64.197952, -12.163823, 82.105802, NULL, NULL, NULL, NULL, 12078.8885, 439.10602, 2, 'A001

000001000000BEE79CA1B50FB1D3C6A0C819C89FA3CDE701DA85E8C8E2019FEDA487A902F8E9B481920185D4FDCDB002F9EFC4E08D03A8A697A4A204

99F1A8D8CC03E683F0859701BDBDB2CFC203C4BDF6ED9C0384D1B5DEB201DA88B0B8E002CFA1AFDBBF02')

SQL> select * from testgrid where rowid='AAATb9AAFAAAEJIAAB';

OBJECTID

----------

SHAPE(ENTITY, NUMPTS, MINX, MINY, MAXX, MAXY, MINZ, MAXZ, MINM, MAXM, AREA, LEN, SRID, POINTS)

------------------------------------------------------------------------------------------------------------------------

2

ST_GEOMETRY(8, 4, 63.8600683, 31.7610922, 70.6177474, 38.8566553, NULL, NULL, NULL, NULL, 22.6047828, 21.6768769, 2, '2A

00000001000000B0BF87B0B21BBA86A9DEC519CD81D0AC32F8E6EC9114A89AF7E52ACCE780DD20A5E6D8C60784CEEDEE34')

从节点数目可以判断,'AAATb9AAFAAAEJIAAA'对应的是大的多边形,'AAATb9AAFAAAEJIAAB'对应的是小的多边形。先看小的多边形,GX、GY分别为15、14,可见小多边形是在网格尺寸为30的第1级上被索引的;而大多边形被索引了2次,应该是在其它级别上被索引的,但是GX、GY的值却不能用前面的简单的算法来解释,这是为什么呢?

事实上,这个大的多边形是在第3级上进行的索引,也就是说ArcSDE自己会判断一个几何对象到底应该在第几级上进行索引,关于这个算法,可以从ArcSDE的SPX_UTIL包里找到:

Procedure compute_feat_grid_envp (gsize1 IN integer,

gsize2 IN integer,

gsize3 IN integer,

e_minx IN integer,

e_miny IN integer,

e_maxx IN integer,

e_maxy IN integer,

g_minx Out integer,

g_miny Out integer,

g_maxx Out integer,

g_maxy Out integer)

IS

Begin

g_minx := trunc(e_minx / gsize1);

g_miny := trunc(e_miny / gsize1);

g_maxx := trunc(e_maxx / gsize1);

g_maxy := trunc(e_maxy / gsize1);

If ((g_maxx - g_minx + 1) * (g_maxy - g_miny + 1) > max_grids_per_level

AND gsize2 > 0) THEN

g_minx := trunc(e_minx / gsize2);

g_miny := trunc(e_miny / gsize2);

g_maxx := trunc(e_maxx / gsize2);

g_maxy := trunc(e_maxy / gsize2);

If ((g_maxx - g_minx + 1) * (g_maxy - g_miny + 1) > max_grids_per_level

AND gsize3 > 0) THEN

g_minx := trunc(e_minx / gsize3);

g_miny := trunc(e_miny / gsize3);

g_maxx := trunc(e_maxx / gsize3);

g_maxy := trunc(e_maxy / gsize3);

g_minx := g_minx + grid_level_mask_2;

g_miny := g_miny + grid_level_mask_2;

g_maxx := g_maxx + grid_level_mask_2;

g_maxy := g_maxy + grid_level_mask_2;

ELSE

g_minx := g_minx + grid_level_mask_1;

g_miny := g_miny + grid_level_mask_1;

g_maxx := g_maxx + grid_level_mask_1;

g_maxy := g_maxy + grid_level_mask_1;

End If;

End If;

End compute_feat_grid_envp;

其中有几个常量,在SPX_UTIL的包头里可以找到:

max_grids_per_level Constant pls_integer := 4;

grid_level_mask_1 Constant pls_integer := 16777216;

grid_level_mask_2 Constant pls_integer := 33554432;

也就是说ArcSDE索引一个几何对象的时候是从第1级格网开始判断,如果某个几何对象跨越的网格数大于1个(或者说1个网格不能包含某个几何对象)、同时第2级的网格尺寸大于0的时候, ArcSDE就会在第2级网格上再进行类似的计算;同理,如果还有第3级网格可用,ArcSDE还有可能把该几何对象索引到第3级网格上去。总的来说,ArcSDE试图用最少的网格来索引几何对象。

另外,为了区分不同级别的网格,这里还有grid_level_mask_1=16777216和grid_level_mask_2=33554432两个常量,分别用于第2级和第3级网格序号的标识,不同级别的网格会根据当前格网的等级分别加上0(第1级)或grid_level_mask_1(第2级)或grid_level_mask_2(第3级)。由此可见,上面那个大的多边形被索引的两个网格的GX、GY应该减去33554432,也就是分别是GX=0,GY=1和GX=1,GY=1,这是个第3级的索引。

基于上面的原则,我们可以对如何选取空间索引的网格尺寸应该有一些原则性的判断:

l 如果没有特别的需要,可以使用一级索引的话用一级索引会比较好,因为如果有多级索引,查询的时候会扫描所有的索引级别

l 对于几何对象大小变化较大,并且各个量级的对象数量相当的数据才可能需要设置多级索引

l 对于点数据,只需要设置一级索引(几何对象大小没有变化),并且设置网格到较大的尺寸(避免一个网格中只有几个点的情况)

l 如果数据量有了很大的变化以后,可能需要重新计算并调整网格的尺寸

对于网格的尺寸,可以通过数据的范围平均值进行一个估算,一般可以取该值的3~4倍,比如对于刚才的那个面层,通过这样的命令可以进行一个大概的估算:

SQL> select 4*( avg(t.shape.maxx-t.shape.minx) + avg(t.shape.maxy-t.shape.maxy) )/2 from testgrid t;

4*(AVG(T.SHAPE.MAXX-T.SHAPE.MINX)+AVG(T.SHAPE.MAXY-T.SHAPE.MAXY))/2

-------------------------------------------------------------------

160.832765

当然,更简单的方法就是通过ArcCatalog来计算,如图 11。

image

11 通过ArcCatalog来重新计算适合的网格尺寸

分享到:
评论

相关推荐

    ArcSDE vs Oracle Spatial

    ### ArcSDE 与 Oracle Spatial 的空间数据存储比较与分析 #### 一、几何对象 ##### Oracle Spatial **1. SDO_GEOMETRY** Oracle Spatial 在 MDSYS 模式下定义了一系列几何类型和函数来支持空间数据的存储与使用...

    ArcSDE和Oracle Spatial的定位不同

    ArcSDE和Oracle Spatial的定位不同

    使用Oracle Spatial对ArcSDE中的SDO_GEOMETRY类型数据进行空间操作

    "使用Oracle Spatial对ArcSDE中的SDO_GEOMETRY类型数据进行空间操作" Oracle Spatial 是 Oracle 数据库中的一个空间数据处理组件,用于存储、管理和操作空间数据。ArcSDE 是一个空间数据引擎,用于存储和管理大规模...

    Oracle Spatial与ArcGIS连接

    直接连接(Direct Connect)是指ArcGIS直接访问Oracle Spatial数据库的一种方式,无需通过中间层如ArcSDE等工具进行数据传输。这种方式可以提高查询效率,简化系统架构,并减少维护成本。 **2.2 主要优点** - **...

    基于ArcSDE与Oracle9i Spatial的空间数据转换及备份.pdf

    【ArcSDE与Oracle9i Spatial简介】 ArcSDE是一种用于访问和管理存储在关系数据库管理系统(RDBMS)中的大型多用户地理数据库的服务器软件。它是Esri的ArcGIS平台的一部分,也是企业级解决方案的核心组件。ArcSDE的...

    Oracle+Spatial与ArcSDE空间数据上载及应用比较.

    ### Oracle Spatial与ArcSDE空间数据上载及应用比较 #### 引言 在地理信息系统(GIS)领域,Oracle Spatial与ArcSDE是目前较为流行的两种利用关系型数据库存储和管理空间数据的商用软件。随着GIS技术的发展,空间...

    Oracle Spatial和ArcSDE的应用比较研究.pdf

    "Oracle Spatial和ArcSDE的应用比较研究" Oracle Spatial和ArcSDE是当前较为流行的利用关系型数据库存储和管理空间数据的商用软件。本文首先分析Oracle Spatial和ArcSDE的存储机制,然后对二者进行比较研究,最后...

    arcsde_9.2_oracle_10g+配套的授权文件ArcGIS.ArcSDE.9.2授权许可.ecp

    ArcSDE(Arc Spatial Data Engine)是Esri公司开发的一款强大的地理空间数据管理软件,它为Oracle 10g这样的大型数据库系统提供了全面的地理空间数据支持。在本篇中,我们将深入探讨ArcSDE 9.2 for Oracle 10g的授权...

    Oracle Spatial与ArcSDE空间数据上载及应用比较.pdf

    【Oracle Spatial与ArcSDE简介】 Oracle Spatial是Oracle数据库的一个扩展模块,专门用于处理和管理地理空间数据。它提供了一套全面的空间数据管理和分析功能,包括几何对象的存储、空间索引、空间查询以及复杂的...

    Oracle Spatial空间数据在ArcSDE中的图层注册.pdf

    总的来说,Oracle Spatial与ArcSDE的结合使用,为管理和操作空间数据提供了一种强大而灵活的解决方案。无论是通过Query Layer还是ArcSDE注册图层,都能够帮助用户在ArcGIS环境中有效地利用和分析Oracle Spatial数据...

    ArcSDE与Oracle10i Spatial数据转换.pdf

    【ArcSDE与Oracle10i Spatial数据转换】 在地理信息系统(GIS)的应用中,空间数据的管理和转换是至关重要的。ArcSDE是由Esri公司开发的一种空间数据库引擎,它允许用户将空间数据集成到关系数据库管理系统(RDBMS)中...

    Oracle spatial VS SDE

    ### Oracle Spatial 与 ArcSDE 的对比分析 #### 一、引言 随着地理信息系统(GIS)技术的发展,对空间数据存储与管理的需求日益增长。Oracle Spatial 与 ArcSDE 成为当前主流的空间数据存储解决方案之一。本研究...

    ArcSDE和Oracle空间数据库探索

    《ArcSDE与Oracle Spatial:空间数据库的深度解析》 ArcSDE和Oracle Spatial,两者都是业界领先的空间数据管理解决方案,但它们各自有着独特的特性和优势。本文将深入探讨这两个系统在存储空间数据、建立空间索引、...

    Arcsde安装包

    ArcSDE,全称为Arc Spatial Data Engine,是ESRI(Environmental Systems Research Institute)公司开发的一款用于管理和分发地理空间数据的软件产品。它提供了一种高效、可靠的解决方案,使用户能够在关系数据库...

    ArcSDE连接Oracle配置

    - 在Oracle数据库中,不同的表空间可以被分配给特定类型的数据,例如FEATURE、ATTRIBUTE、SPATIAL_INDEX、ORACLE_INDEX等。 - 每个表空间都有其独特的用途,例如,FEATURE表空间用于存储特征数据;ATTRIBUTE表空间...

    Oracle Spatial

    11. **培训与资源**:提供的教程和书籍,如“Oracle Spatial 简介 Oracle教程 Oracle函数 Oracle命令 Oracle入门”等,可以帮助初学者快速理解和掌握Oracle Spatial的基本概念和操作。 以上是Oracle Spatial的主要...

    实现Arc S DE向Oracle9i Spatial空间数据的转换.pdf

    《实现ArcSDE向Oracle9i Spatial空间数据的转换》 空间数据是地理信息系统(GIS)的核心组成部分,而ArcSDE和Oracle Spatial是两种广泛使用的空间数据库引擎。这两种引擎分别由ESRI公司和Oracle公司开发,它们各自...

    基于Oracle Spatial多源异构空间数据一体化存储及管理方法研究.pdf

    本文研究了基于Oracle Spatial组件实现多源异构空间数据一体化存储及管理的方法。Oracle Spatial是甲骨文公司提供的用于GIS数据存储的空间数据处理系统,它通过扩展的SDO_GEOMETRY和SDO_GEORASTER数据类型实现了矢量...

    基于Oracle的ArcSDE数据迁移.pdf

    ArcSDE(Spatial Database Engine)是Esri公司开发的空间数据库引擎,它为ArcGIS(一款流行的地理信息系统软件)与Oracle数据库之间提供了桥梁,使得用户可以在Oracle数据库中存储、管理和操作空间数据。 【ArcSDE...

    基于Oracle Spatial的GIS数据一体化存储模型及在城镇地籍调查中的应用.pdf

    【对比其他产品】虽然有多个GIS和数据库厂商提供类似解决方案,如ESRI的ArcSDE和Informix的Spatial Data Blade,但Oracle Spatial凭借其先进的技术和高性能,在市场上占据主导地位,尤其适用于大型GIS系统和工程CAD...

Global site tag (gtag.js) - Google Analytics