博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SuperMap iObjects C++之SQL查询和空间查询
阅读量:4163 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
SVG 形状学习之——SVG圆形
查看>>
SVG 滤镜学习之——SVG 滤镜
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
进程创建时信号处理函数处理
查看>>
进程创建时信号处理
查看>>
进程创建时内存描述符处理
查看>>
进程创建时命名空间处理
查看>>
进程创建时IO处理
查看>>
进程创建时线程栈处理
查看>>
进程创建时pid分配
查看>>
进程创建时安全计算处理
查看>>