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

命名空间:  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)CAD数据集不支持动态索引(Dynamic);

(3)路由数据集不支持图幅索引(Tile);

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

(5)对于数据库类型的数据源,数据库记录要大于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("该数据集不支持动态索引");
        }
    }
}

版本信息

SuperMap iObjects .NET


请参见