本文共 2324 字,大约阅读时间需要 7 分钟。
–小诗
条件查询查询矢量数据集中满足给定条件的所有集合对象记录,其中条件使用标准的SQL语句,查询返回的结构为满足要求的记录集。
下面示例如何通过SQL表达式查询出某矢量数据集中满足条件的对象记录集。 SQL查询要点: 1.打开要查询数据所在的工作空间。 2.获得被查询矢量数据集所在的数据源。 3.获得被查询的矢量数据集,并且需要打开该数据集,否则无法进行查询。 4.构建查询参数对象(UGQueryDef),并通过接口UGQueryDef-> strFilter设置查询条件以及其他查询参数。 5.通过接口UGDatasetVector->Query执行查询,满足符合要求的对象记录集。 void SampleRun::SqlQuery() { //打开工作空间 OpenWorkspace();//获取第一个数据源UGDataSource *pDataSource = m_pWorkspace->GetDataSource(0);//获取名称为“Countries”的矢量数据集用于查询UGDataset *pDataset = pDataSource->GetDataset(_U("Countries"));//强制类型转换UGDatasetVector *pDatasetVector = dynamic_cast( pDataset);//判断数据集是否打开,没有打开则打开数据集if (!pDatasetVector->IsOpen()){ pDatasetVector->Open();}//查询条件设置UGQueryDef queryDef;//查询条件queryDef.m_strFilter = _U("SmID<10");//只查属性信息queryDef.m_nOptions = OgdcQueryDef::Attribute;//内部维护,无需释放该对象UGRecordset *pUGRecodrset = pDatasetVector->Query(queryDef);m_pWorkspace->Close();
}
Bounds查询要点
对于数据集的bounds指的是数据集中包含所有对象的最小外接矩形。对于矢量数据集来说,为数据集中所有对象的最小外接矩形;对于栅格,为当前栅格或影像的地理范围。一般获得数据集的bounds后可以用来进行数据在地图中的全幅显示,或者基于数据集的bounds进行空间范围查询。 下面示例使用矢量数据集的bounds最为空间查询范围,查询处于该范围内容的其他数据集中的对象。 要点: 1.打开要查询数据所在的工作空间。 2.获得被查询和作为查询范围的矢量数据集所在的数据源(本例中被查询和作为查询范围的数据集为同一数据集)。 3.获得被查询的矢量数据集,并且需要打开该数据集,否则无法进行查询。 4.获得作为查询条件的数据集的bounds,通过该bounds获得查询空间范围大小。 5.构建查询参数对象(UGQueryDef),并通过接口UGQueryDef::GeneralQuery 设置查询方式为空间查询;通过接口UGQueryDef::Bounds设置查询类型为地理矩形范围;通过接口UGQueryDef。m_rc2Bounds设置空间查询的范围。 6.通过接口UGDatasetVector->Query执行查询,满足符合要求的对象记录集。 void SampleRun::SpatialQuery() { //打开工作空间 OpenWorkspace();//获取第一个数据源UGDataSource *pDataSource = m_pWorkspace->GetDataSource(0);//获取名称为“Countries”的矢量数据集用于查询UGDataset *pDataset = pDataSource->GetDataset(_U("Countries"));//强制类型转换UGDatasetVector *pDatasetVector = dynamic_cast( pDataset);//判断数据集是否打开,没有打开则打开数据集if (!pDatasetVector->IsOpen()){ pDatasetVector->Open();}//获取BoundsUGRect2D bounds = pDatasetVector->GetBounds();//缩小到一半bounds.Deflate(bounds.Width()/4,bounds.Height()/4);//对矩形进行规范化bounds.Normalize();//查询条件设置UGQueryDef queryDef;//查询类型为地理矩形范围queryDef.m_nType = UGQueryDef::Bounds;//查询模式为一般查询queryDef.m_nMode = UGQueryDef::GeneralQuery;//查询几何和属性queryDef.m_nOptions = UGQueryDef::Both;//查询范围queryDef.m_rc2Bounds = bounds;//设置游标类型为动态游标queryDef.m_nCursorType = UGQueryDef::OpenDynamic;//内部维护,无需释放该对象UGRecordset *pUGRecodrset = pDatasetVector->Query(queryDef);m_pWorkspace->Close();
}
转载地址:http://eipxi.baihongyu.com/