您好,iObjects C++ 组件有提供 UGDatasetVector::Query 接口,设置对应的查询类型为空间查询(相交、包含等),空间查询对象设置给 UGQueryDef 的 m_pElement 属性,详细使用方式可参考 iObjects C++ 组件帮助文档以及示例教程 SuperMap iObjects C++之SQL查询和空间查询_supermap空间查询怎么指定搜索对象-CSDN博客
希望可以帮到您。
使用了以下代码进行查询,但是查询到的结果(UGRecordsetPtr)为空。麻烦帮看一下。
int nPntCount=points.length(); UGPoint2D *pUGPoint2d = new UGPoint2D[nPntCount]; if (NULL == pUGPoint2d) { return false; } for (size_t i = 0; i < nPntCount; i++) { pUGPoint2d[i].x = points.at(i).x; pUGPoint2d[i].y = points.at(i).y; } UGGeoRegion *uRegion=new UGGeoRegion; UGbool bAdd = pRegion->Make(pUGPoint2d,nPntCount); if (!bAdd) { delete[] pUGPoint2d; pUGPoint2d = NULL; return; } UGQueryDef queryDef; queryDef.m_nType = UGQueryDef::Contains; pRegion->ToElement(queryDef.m_pElement); UGRecordsetPtr recordset = pDataset->Query(queryDef); if(recordset==NULL) { return false; }
从您的代码中没有看到在查询前有对待查询的数据集进行打开,上面提供您的教程中有明确说明需要先打开数据集后才能进行查询。
iObjects C++ 提供了空间查询接口 UGSpatialQuery,建议参考以下逻辑编码进行空间查询
UGSpatialQuery* spatialQuery = new UGSpatialQuery(); UGRecordset* pRecordset = spatialQuery->Query(pDatasetVector1, pGeometry, UGSpatialQuery::UGSpatialQueryMode::UGIntersects);