SuperMap iObjects C++之数据集管理

      数据源UGDatasource通过数据集存储同种类型的空间数据,一个数据源中可以包含多个数据集,该数据源中所有数据集通过一个数据集集合(UGDatasets)进行管理,包括:数据集创建、删除。
SuperMap提供了丰富的数据集类型,包括:矢量数据集(UGDatasetVector)、栅格数据集(UGDatasetGrid)、影像数据集(UGDatasetImage)、拓扑数据集(UGDatasetTopology),所有数据集类型都继承自UGDataset,相关类型的关系图如下所示。
在这里插入图片描述

      数据源中的数据集通过UGDatasets 数据集集合管理,而UGDatasets 实质是UGArray<UGDataset*>,的类型定义。 UGDataset是所有类型数据集的基类。

下面就通过两个简单的示例来介绍如何创建、删除一个新的空数据集;
创建数据集关键步骤:
1.打开一个工作空间,通过工作空间获得新数据集所在的数据源。
2.指定新数据集的相关参数:数据集类型、数据集名称。
3.通过接口UGDatasouce->CreateDatasetVector创建新数据集。
void SampleRun::CreatDataset()
{
//打开工作空间
OpenWorkspace();

//获取第一个数据源
UGDataSource *pDataSource = m_pWorkspace->GetDataSource(0);

//数据集信息
UGDatasetVectorInfo datasetVectorInfo;
//类型
datasetVectorInfo.m_nType = UGDataset::Point;
//名称,必须唯一
datasetVectorInfo.m_strName = _U("测试");

UGDataset* pDtaset = pDataSource->CreateDatasetVector(datasetVectorInfo);
m_pWorkspace->Close();

}

删除数据集关键步骤:
1.打开一个工作空间,通过工作空间获得要删除数据集所在的数据源。
2.通过接口UGDatasouce-> DeleteDataset删除指定名称的数据集。
void SampleRun::DeleteDataset()
{
//打开工作空间
OpenWorkspace();

//获取第一个数据源
UGDataSource *pDataSource = m_pWorkspace->GetDataSource(0);
if (NULL == pDataSource)
{
    qDebug()<<QString::fromLocal8Bit("工作空间不存在数据源!");
    return;
}
//获取名为“测试”的数据集

UGDataset* pDtaset = pDataSource->GetDataset(_U(“测试”));
UGbool isDeleted = pDataSource->DeleteDataset(_U(“测试”));

m_pWorkspace->Close();

}

数据集创建空间索引
      SuperMap SDX + 目前提供了四叉树索引、R 树索引、图库索引和动态索引。四叉树采用改良的希尔伯特编码,对空间数据进行编码,采用数据和索引的一体存储方式。R树索引的数据结构是B树在多维空间的扩展,索引查询效率较高,索引数据和空间数据分开存储。图库索引针对分幅数据效果很好。动态索引是SuperMap GIS新开发的索引,只支持数据库引擎,尽量使用了数据库的查询能力。
一个数据集在一种时刻只能使用一种索引,但是索引可以切换,即当对数据集创建完一种索引之后,必须删除旧的索引才能创建新的。数据集处于编辑状态时,系统自动维护当前的索引。
      备注 1.数据库中的点数据集不支持四叉树(QTree)索引和R树索引(RTree);
2.网络数据集不支持任何类型的空间索引;
3.复合数据集不支持动态索引;
4.路由数据集不支持图库索引(Tile);
5.属性数据集不支持任何类型的空间索引;
6.对于数据库类型的数据源,数据库记录要大于1000条时才可以建索引。
下面示例如何为矢量数据集创建空间索引。
关键步骤:
1.获得工作空间中要创建空间索引的数据集所在的数据源。
2.从数据源中取出目标数据集,得到一个UGDataset对象,并转换为UGDatasetVector矢量数据集对象。
3.通过接口UGDatasetVector->IsOpen判断要创建空间索引的数据集是否为打开状态,因为数据集打开的状态,不能创建空间索引。
4.通过UGSpatialIndexInfo对象设置空间索引创建参数,包括所创建空间索引的类型。
5.通过UGDatasetVector->BuildSpatialIndex接口为矢量数据集创建空间索引。
void SampleRun::CreatSpatialIndex()
{
//打开工作空间
OpenWorkspace();

//获取第一个数据源
UGDataSource *pDataSource = m_pWorkspace->GetDataSource(0);

//获取名称为“Countries”的矢量数据集用于查询
UGDataset *pDataset = pDataSource->GetDataset(_U("Countries"));
//强制类型转换
UGDatasetVector *pDatasetVector = dynamic_cast<UGDatasetVector*>( pDataset);

//数据集打开不能创建空间索引
if (pDatasetVector->IsOpen())
{
    qDebug()<<QString::fromLocal8Bit("数据集已打开,不能创建空间索引!");
    return;
}
//空间索引类型
UGSpatialIndexInfo info;
info.nIndexType = UGC::IdxRTree;
pDatasetVector->BuildSpatialIndex(info);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值