• PIE-SDK For C++矢量数据的修改


    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);//删除FID0的要素

        //修改要素

        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 示例截图

    修改前:

    修改后:

  • 相关阅读:
    题解 P3071 【[USACO13JAN]座位Seating】
    [luogu]P3398 仓鼠找sugar
    快速输入输出
    Luogu P3939 数颜色
    HEOI2016/TJOI2016 排序
    POI2011 DYN-Dynamite
    USACO17JAN Promotion Counting
    AHOI2008 聚会
    Luogu P4907 A换B problem
    网络流24题 骑士共存问题
  • 原文地址:https://www.cnblogs.com/PIESat/p/12372203.html
Copyright © 2020-2023  润新知