PIE-SDK For C++矢量数据读取
1.功能简介
GIS将地理空间数据表示为矢量数据和栅格数据。矢量数据模型使用点、线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点、河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联。栅格数据模型使用一个格网和格网元胞(像元)代表空间要素,元胞值表示该元胞位置的空间要素属性。栅格数据模型适用于表示连续的要素,如海拔和降水量。
[矢量数据模型] [栅格数据模型]
目前PIE SDK支持多种数据格式的数据读取,下面对矢量数据格式的数据读取功能进行介绍。
2.功能实现说明
2.1 实现思路及原理说明
第一步 |
获取要读取数据的数据集 |
第二步 |
从数据集里面读取需要读取的信息 |
2.2 核心接口与方法
接口/类 |
方法/属性 |
说明 |
SysDataSource::FeatureDataset |
SpatialReference |
空间参考 |
SysDataSource::FeatureClass |
GetFeatureCount() |
得到要素数量 |
GetFields() |
获取所有字段 |
|
GetFeatureDataset () |
获取挂载的矢量数据集 |
|
GetName() |
数据名称 |
|
SysDataSource::FeatureCursorPtr |
NextFeature |
获取下一个要素 |
2.3 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/04数据操作/03矢量数据集的读取 |
数据路径 |
百度云盘地址下/PIE示例数据/矢量数据/Shape/省级行政区.shp |
视频路径 |
百度云盘地址下/ PIE视频教程/04数据操作/03矢量数据集的读取.avi |
示例代码 |
|
void PIEMainWindow::On_ActionReadDataSetInfo_Triggered(bool checked) { SysCarto::LayerPtr currentLayer = m_pCurrentControl->GetActiveView()->GetCurrentLayer(); if (currentLayer == nullptr) return; SysCarto::FeatureLayerPtr featureLayer = currentLayer; if (featureLayer == nullptr) return;
SysDataSource::FeatureClassPtr fcPtr = featureLayer->GetFeatureClass();
QString fileName = fcPtr->GetName(); qlonglong featureCount = fcPtr->GetFeatureCount(); QString spatialReference = fcPtr->GetFeatureDataset()->GetSpatialReference()->GetName(); QString message = QString("数据名称:%1;\r\n要素的数量:%2;\r\n数据空间参考:%3").arg(fileName).arg(featureCount).arg(spatialReference); QMessageBox::information(this, "图层信息", message, QMessageBox::StandardButton::Ok);
//要素遍历,读取字段信息,并提示 int Index = fcPtr->GetFields()->GetFieldIndex("NAME");//获取NAME字段索引 SysDataSource::FeatureCursorPtr pCursor = fcPtr->Search(nullptr); SysDataSource::FeaturePtr pFeature = pCursor->NextFeature(); while (pFeature!=nullptr) { QString value = pFeature->GetValue(Index).toString(); QMessageBox::information(this, "字段值", value, QMessageBox::StandardButton::Ok);
pFeature = nullptr; } } |
2.4 示例截图