1.功能简介
目前PIE SDK支持矢量数据的修改或删除,下面对矢量数据的修改与删除功能进行介绍,并附上示例代码。
2.功能实现说明
2.1 矢量数据的修改
2.2 实现思路及原理说明
第一步 |
获取需要修改的矢量数据 |
第二步 |
根据条件进行设置要素的值进行修改或删除 |
2.3 核心接口与方法
接口/类 |
方法/属性 |
说明 |
SysDataSource::DatasetFactory |
OpenFeatureDataset(QString path) |
创建要素数据集 |
SysDataSource::FeatureDatasetPtr |
GetNextFeature() |
获取下一个要素 |
UpdateFeature() |
更新要素 |
|
DeleteFeature() |
删除要素 |
|
UpdateFeature() |
更新要素 |
|
SysDataSource::FeaturePtr |
SetValue() |
设置字段值 |
2.4 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/04数据操作/05矢量数据的修改 |
数据路径 |
自定义即可 |
视频路径 |
百度云盘地址下/PIE视频教程/04数据操作/05矢量数据的修改.avi |
示例代码 |
|
void PIEMainWindow::On_ActionEditVectorData_Triggered(bool checked) { QString filter = "Shapefiles (*.shp)"; QString inputFile = QFileDialog::getOpenFileName(nullptr, "请选择要编辑的数据", "", filter); if (inputFile.isEmpty()) { return; }
SysDataSource::FeatureDatasetPtr fDataSetPtr = SysDataSource::DatasetFactory::Instance()->OpenFeatureDataset(inputFile); if (fDataSetPtr == nullptr) return;
//删除要素 fDataSetPtr->DeleteFeature(0);//删除FID为0的要素 //修改要素 SysDataSource::FeatureClassPtr pFeatureClass = new SysDataSource::FeatureClass(fDataSetPtr); SysDataSource::FeatureCursorPtr pCursor = pFeatureClass->Search(nullptr); int index = pFeatureClass->GetFields()->GetFieldIndex("Name");//根据实际数据情况进行适配即可 //遍历要素,修改字段Name属性值为B SysDataSource::FeaturePtr pFeature = pCursor->NextFeature(); while (pFeature!=nullptr) { pFeature->SetValue(index, "B"); fDataSetPtr->UpdateFeature(pFeature); pFeature = pCursor->NextFeature(); } bool flag= fDataSetPtr->Save(); pCursor->Release(); SysCarto::LayerPtr fLayer = SysCarto::LayerFactory::Instance()->CreateDefaultLayer(inputFile); m_pCurrentControl->GetMap()->AddLayer(fLayer); m_pCurrentControl->GetActiveView()->Refresh(); } |
2.5 示例截图
修改前:
修改后: