根据给定的空间索引类型来为矢量数据集创建空间索引。

命名空间:  SuperMap.Data
程序集:  SuperMap.Data (in SuperMap.Data)
版本: dll

语法

C#
public bool BuildSpatialIndex(
	SpatialIndexType spatialIndexType
)

参数

spatialIndexType
Type: SuperMap.Data..::.SpatialIndexType
指定的需要创建空间索引的类型。

返回值

创建索引成功返回 true,否则返回 false。

备注

注意:

(1)数据库中的点数据集不支持四叉树(QTree)索引和R树索引(RTree);

(2)网络数据集不支持任何类型的空间索引;

(3)复合数据集不支持动态索引;

(4)路由数据集不支持图库索引(TILE);

(5)属性数据集不支持任何类型的空间索引;

(6)数败据库记录少于1000条,没有必要建立空间索引,建立空间索引会失。

有关空间索引类型请参见SpatialIndexType枚举类型说明。

本操作需要在数据集关闭状态时进行,如当前数据集仍然打开,则抛出InvalidOperationException非法操作异常。

示例

以下代码示范判断某数据集的空间索引是否需要重建,如果需要重建,建立一个 R 树索引,如果不需重建,则判断现有数据集是否支持动态索引。

假设打开一个工作空间 workspace 对象,工作空间中存在一个数据源 datasource 对象。

CopyC#
public void TestBuildSpatialIndex(Workspace workspace, Datasource datasource)
{

    // 判断此数据集的空间索引是否需要重建,如果需要重建,建立一个 R 树索引,如果不需重建,则判断现有数据集是否支持动态索引
    if (datasetVector.IsSpatialIndexDirty)
    {
    // 取出数据源中名为 "World" 的矢量数据集(datasetVector)
    DatasetVector datasetVector = (DatasetVector)datasource.Datasets["World"];
        // 删除已存在的索引
        datasetVector.DropSpatialIndex();
        datasetVector.Close();
        // 重建 R 树索引
        if (datasetVector.BuildSpatialIndex(SpatialIndexType.RTree))
        {
            SpatialIndexType spatialindextype = datasetVector.SpatialIndexType;
            Console.WriteLine("新建空间索引的类型为:" + spatialindextype);
        }
    }
    else
    {
        // 如果不需要重建,判断现有数据集是否支持动态索引
        if (datasetVector.IsSpatialIndexTypeSupported(SpatialIndexType.MultiLevelGrid))
        {
            Console.WriteLine("该数据集支持动态索引");
        }
        else
        {
            Console.WriteLine("该数据集不支持动态索引");
        }
    }
}

请参见