public enum SpatialIndexType extends java.lang.Enum<SpatialIndexType>
空间索引类型枚举
空间索引用于提高数据空间查询效率的数据结构。在 SuperMap 中提供了 R 树索引,四叉树索引,图幅索引和多级网格索引。以上几种索引只适用于矢量数据集。
一个数据集在一种时刻只能使用一种索引,但是索引可以切换,即当对数据集创建完一种索引之后,必须删除旧的索引才能创建新的。数据集处于编辑状态时,系统自动维护当前的索引。特别地,当数据被多次编辑后,索引的效率将会受到不同程度的影响,通过系统的判断得知是否要求重新建立空间索引。
SDB 数据源对索引的支持情况如下:UDB 数据源对索引的支持情况跟 SDB 一致。
枚举常量和说明 |
---|
MULTI_LEVEL_GRID
多级网格索引。
|
NONE
没有索引。
|
QTREE
四叉树索引。
|
RTREE
R 树索引。
|
TILE
图幅索引。
|
限定符和类型 | 方法和说明 |
---|---|
static SpatialIndexType |
valueOf(java.lang.String name)
返回带有指定名称的该类型的枚举常量。
|
static SpatialIndexType[] |
values()
按照声明该枚举类型的常量的顺序, 返回 包含这些常量的数组。
|
public static final SpatialIndexType MULTI_LEVEL_GRID
采用划分多层网格的方式来组织管理数据。网格索引的基本方法是将数据集按照一定的规则划分成相等或不相等的网格,记录每一个地理对象所占的网格位置。在 GIS 中常用的是规则网格。当用户进行空间查询时,首先计算出用户查询对象所在的网格,通过该网格快速查询所选地理对象,可以优化查询操作。如图所示:
当前版本中,定义网格的索引为一级,二级和三级,每一级都有各自的划分规则,第一级的网格最小,第二级和第三级的网格要相应得比前面的大。在建立多级网格索引时,根据具体数据及其分布的情况,网格的大小和网格索引的级数由系统自动给出,不需要用户进行设置。
优点:当数据集在进行浏览操作的时候,多级网格索引方式的速度略微快些。
注意:此索引类型支持数据集的动态并发编辑。
public static final SpatialIndexType NONE
public static final SpatialIndexType QTREE
四叉树是一种重要的层次化数据集结构,主要用来表达二维坐标下空间层次关系,实际上它是一维二叉树在二维空间的扩展。那么,四叉树索引就是将一张地图四等分,然后再每一个格子中再四等分,逐层细分,直至不能再分。现在在 SuperMap 中四叉树最多允许分成13层。基于希尔伯特(Hilbert)编码的排序规则,从四叉树中可确定索引类中每个对象实例的被索引属性值是属于哪个最小范围。从而提高了检索效率。如图所示为四叉树索引的简单示例图:
public static final SpatialIndexType RTREE
R 树是基于磁盘的索引结构,是 B 树(一维)在高维空间的自然扩展,易于与现有数据库系统集成,能够支持各种类型的空间查询处理操作,在实践中得到了广泛的应用,是目前最流行的空间索引方法之一。R 树空间索引方法是设计一些包含空间对象的矩形,将一些空间位置相近的目标对象,包含在这个矩形内,把这些矩形作为空间索引,它含有所包含的空间对象的指针。例如,A 中包含空间对象 D、E、F、G,B 中包含空间对象 H、I、J、K,C 中包含空间对象 L、M、N。如图所示为 R 树索引的例子。
在进行空间检索的时候,首先判断哪些矩形落在检索窗口内,再进一步判断哪些目标是被检索的内容。这样可以提高检索速度。
注:
public static final SpatialIndexType TILE
在 SuperMap 中根据数据集的某一属性字段或根据给定的一个范围,将空间对象进行分类,通过索引进行管理已分类的空间对象,以此提高查询检索速度。如下图所示为根据给定范围进行图幅索引的示例:
特别地,图幅索引可以被缓存到本地(以二进制文件形式体现),这样可更进一步提高查询检索的速度。图幅索引适用于海量数据(即对象数超过百万个的数据)。
public static SpatialIndexType[] values()
for (SpatialIndexType c : SpatialIndexType.values()) System.out.println(c);
public static SpatialIndexType valueOf(java.lang.String name)
name
- 要返回的枚举常量的名称。