GDAL OGR C++ API 学习之路 (5)OGRLayer篇 代码示例

GetStyleTable

virtual OGRStyleTable *GetStyleTable ()

返回图层样式表

返回:  指向不应由调用方修改或释放的样式表的指针

// 假设图层对象为 poLayer
OGRStyleTable* poStyleTable = poLayer->GetStyleTable();
if (poStyleTable != nullptr) {
    // 处理样式表信息
    // ...
} else {
    // 图层没有关联样式表
    // ...
}

SetStyleTableDirect

virtual void SetStyleTableDirectOGRStyleTable *poStyleTable )

设置图层样式表

参数:

poStyleTable -- 指向要设置的样式表的指针

// 假设图层对象为 poLayer,样式表对象为 poStyleTable
poLayer->SetStyleTableDirect(poStyleTable);

StartTransaction

Virtual OGRErr StartTransaction()

对于支持事务的数据源,StartTransaction 会创建一个事务

返回:  OGRERR_NONE成功

// 假设图层对象为 poLayer
if (poLayer->StartTransaction() == OGRERR_NONE) {
    // 在事务中进行一系列操作
    // ...
    
    // 提交事务
    poLayer->CommitTransaction();
} else {
    // 处理事务启动失败的情况
}

在 OGR 中,图层可以支持事务,通过调用 StartTransaction() 可以在图层中开始一个事务。在事务中,可以进行一系列的图层操作,例如添加要素、修改要素、删除要素等。当所有的操作都执行完成后,可以调用 CommitTransaction() 来提交事务,表示所有操作都成功执行。如果在事务过程中出现了错误,可以调用 RollbackTransaction() 来回滚事务,表示撤销之前的所有操作

 

CommitTransaction

virtual OGRErr CommitTransaction()

对于支持事务的数据源,提交事务提交事务

返回:  OGRERR_NONE成功

RollbackTransaction

Virtual OGRErr RollbackTransaction()

对于支持事务的数据源,RollbackTransaction 会将数据源回滚到当前事务开始之前的状态

返回:  OGRERR_NONE成功

    // 获取第一个图层
    OGRLayer* poLayer = poDS->GetLayer(0);

    // 开始事务
    poDS->StartTransaction();

    // 创建新要素
    OGRFeature* poFeature = new OGRFeature(poLayer->GetLayerDefn());

    // 设置要素属性
    poFeature->SetField("name", "New Feature");
    poFeature->SetField("population", 10000);

    // 创建新几何图形并设置为要素的几何图形
    OGRPoint point(100, 200);
    poFeature->SetGeometry(&point);

    // 将新要素添加到图层中
    if (poLayer->CreateFeature(poFeature) != OGRERR_NONE) {
        printf("添加要素失败!\n");

        poDS->RollbackTransaction(); // 回滚事务,撤销之前的操作

        OGRDataSource::DestroyDataSource(poDS);
        delete poFeature;
        exit(1);
    }

    // 提交事务,保存更改
    poDS->CommitTransaction();

​

GetFIDColumn

virtual const char *GetFIDColumn()

此方法返回用作 FID 列的基础数据库列的名称,如果不支持,则返回  ""

返回:  FID 列名称

    // 获取第一个图层
    OGRLayer* poLayer = poDS->GetLayer(0);

    // 获取用于唯一标识要素的字段的名称
    const char* fid_column = poLayer->GetFIDColumn();
    if (fid_column != nullptr) {
        printf("用于唯一标识要素的字段名称:%s\n", fid_column);
    } else {
        printf("图层中没有用于唯一标识要素的字段。\n");
    }

GetGeometryColumn

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

场主不吃鍋巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值