GDAL C++ API 学习之路 (1)OGRFeature Style 要素样式类 OGRStyleTable

枚举ogr_style_type

OGR 样式类型

值:

enumerator  OGRSTypeUnused

enumerator  OGRSTypeString

enumerator  OGRSTypeDouble

enumerator  OGRSTypeInteger

enumerator  OGRSTypeBoolean

class OGRStyleTable        #include <ogr_featurestyle.h>

此类表示样式表

OGRStyleTable 是一个用于管理样式的类,它可以包含多个样式。每个样式都有一个唯一的名称,通过这个名称可以在样式表中进行索引和引用。

样式表可以包含多个样式的原因是为了方便管理和应用不同的样式。在地理信息系统(GIS)中,不同的要素或要素类可能需要使用不同的样式来进行显示和渲染。通过将这些样式集中在一个样式表中,可以更好地组织和管理样式,便于在需要时进行选择和应用

Public Functions:

OGRStyleTable()  构造函数

~OGRStyleTable() 析构函数

AddStyle

GBool AddStyle(const char *pszName, const char *pszStyleString)

在表格中添加新样式

参数:

  • pszName -- 要添加的样式的名称。

  • pszStyleString -- 要添加的样式字符串。

返回: 成功时为TRUE,错误时为TRUE

OGRStyleTable* styleTable = new OGRStyleTable();

// 添加样式到样式表
const char* styleName = "Style1";
const char* styleString = "PEN(c:#FF0000,w:2px)";
GBool success = styleTable->AddStyle(styleName, styleString);

if (success) {
    std::cout << "Style added successfully." << std::endl;
} else {
    std::cout << "Failed to add style." << std::endl;
}

RemoveStyle

GBool RemoveStyle(const char *pszName)

按名称删除表中的样式

参数:

pszName -- 要删除的样式的名称。

返回: 成功时为TRUE,错误时为TRUE

// 创建一个 OGR 样式表对象
OGRStyleTable* styleTable = new OGRStyleTable();

// 添加一些样式到样式表
const char* styleName1 = "Style1";
const char* styleString1 = "PEN(c:#FF0000,w:2px)";
styleTable->AddStyle(styleName1, styleString1);

const char* styleName2 = "Style2";
const char* styleString2 = "BRUSH(fc:#00FF00)";
styleTable->AddStyle(styleName2, styleString2);

// 移除样式
const char* styleToRemove = "Style1";
GBool success = styleTable->RemoveStyle(styleToRemove);

ModifyStyle

GBool ModifyStyle(const char *pszName, const char *pszStyleString)

按名称修改表中的样式 如果样式不存在,则将添加该样式

参数:

  • pszName -- 要修改的样式的名称。

  • pszStyleString -- 样式字符串。

返回:成功时为TRUE,错误时为TRUE

// 添加样式到样式表
const char* styleName = "Style1";
const char* styleString = "PEN(c:#FF0000,w:2px)";
styleTable->AddStyle(styleName, styleString);

// 修改样式
const char* styleToModify = "Style1";
const char* modifiedStyleString = "PEN(c:#00FF00,w:1px)";
GBool success = styleTable->ModifyStyle(styleToModify, modifiedStyleString);

SaveStyleTable

GBool SaveStyleTable(const char *pszFilename)

将样式表保存到文件

参数:

pszFilename -- 要保存到的文件的名称。

返回:成功时为TRUE,错误时为TRUE

// 创建一个 OGR 样式表对象
OGRStyleTable* styleTable = new OGRStyleTable();

// 添加样式到样式表
const char* styleName = "Style1";
const char* styleString = "PEN(c:#FF0000,w:2px)";
styleTable->AddStyle(styleName, styleString);

// 保存样式表到文件
const char* filename = "styles.txt";
GBool success = styleTable->SaveStyleTable(filename);

LoadStyleTable

GBool LoadStyleTable(const char *pszFilename)

从文件加载样式表

参数:

pszFilename -- 要从中加载的文件的名称。

返回: 成功时为TRUE,错误时为TRUE

// 创建一个 OGR 样式表对象
OGRStyleTable* styleTable = new OGRStyleTable();

// 加载样式表文件
const char* filename = "styles.txt";
GBool success = styleTable->LoadStyleTable(filename);

Find

const char *Find(const char *pszStyleString)

按名称获取样式字符串

参数:

pszName -- 要查找的样式字符串的名称。

返回:  与名称匹配的样式字符串,如果未找到,则为 NULL,否则为错误

// 创建一个 OGR 样式表对象
OGRStyleTable* styleTable = new OGRStyleTable();

// 添加样式到样式表
const char* styleName1 = "Style1";
const char* styleString1 = "PEN(c:#FF0000,w:2px)";
styleTable->AddStyle(styleName1, styleString1);

const char* styleName2 = "Style2";
const char* styleString2 = "BRUSH(fc:#00FF00)";
styleTable->AddStyle(styleName2, styleString2);

// 查找样式
const char* styleToFind = "PEN(c:#FF0000,w:2px)";
const char* foundStyleName = styleTable->Find(styleToFind);

IsExist

GBool IsExist(const char *pszName)

参数:

pszName -- 要查找的名称。

返回: 样式的索引(如果找到),-1(如果未找到)或错误

// 创建一个 OGR 样式表对象
OGRStyleTable* styleTable = new OGRStyleTable();

// 添加样式到样式表
const char* styleName1 = "Style1";
const char* styleString1 = "PEN(c:#FF0000,w:2px)";
styleTable->AddStyle(styleName1, styleString1);

const char* styleName2 = "Style2";
const char* styleString2 = "BRUSH(fc:#00FF00)";
styleTable->AddStyle(styleName2, styleString2);

// 检查样式是否存在
const char* styleToCheck = "Style1";
GBool exists = styleTable->IsExist(styleToCheck);

GetStyleName

const char *GetStyleName(const char *pszName)

通过样式字符串获取样式名称

参数:

pszStyleString -- 要查找的样式字符串。

返回: 匹配样式字符串的名称或错误时为 NULL

// 创建一个 OGR 样式表对象
OGRStyleTable* styleTable = new OGRStyleTable();

// 添加样式到样式表
const char* styleName1 = "Style1";
const char* styleString1 = "PEN(c:#FF0000,w:2px)";
styleTable->AddStyle(styleName1, styleString1);

const char* styleName2 = "Style2";
const char* styleString2 = "BRUSH(fc:#00FF00)";
styleTable->AddStyle(styleName2, styleString2);

// 获取样式名称
const char* styleToGet = "Style2";
const char* foundStyleName = styleTable->GetStyleName(styleToGet);

Print

void Print(FILE *fpOut)

将样式表打印到FILE指针

参数:

fpOut——要打印到的文件指针

// 创建一个 OGR 样式表对象
OGRStyleTable* styleTable = new OGRStyleTable();

// 添加样式到样式表
const char* styleName1 = "Style1";
const char* styleString1 = "PEN(c:#FF0000,w:2px)";
styleTable->AddStyle(styleName1, styleString1);

const char* styleName2 = "Style2";
const char* styleString2 = "BRUSH(fc:#00FF00)";
styleTable->AddStyle(styleName2, styleString2);

// 打开文件
const char* filename = "style_table.txt";
FILE* fpOut = fopen(filename, "w");
if (fpOut == nullptr) {
    std::cerr << "Failed to open file for writing." << std::endl;
    return;
}

// 将样式表内容打印到文件
styleTable->Print(fpOut);

// 关闭文件
fclose(fpOut);

Clear

void Clear()

清除样式表

Clone

OGRStyleTable *Clone()

重复样式表

返回:  新样式表,克隆后的样式表是一个全新的对象,拥有自己的内存空间和对原始样式表的独立引用


// 创建一个原始样式表对象
OGRStyleTable* originalStyleTable = new OGRStyleTable();
// 添加样式到原始样式表
// ...

// 创建一个克隆样式表对象
OGRStyleTable* clonedStyleTable = originalStyleTable->Clone();

ResetStyleStringReading

void ResetStyleStringReading()

将下一个样式指针重置为 0

GetNextStyle

const char *GetNextStyle()

从表中获取下一个样式字符串

返回:下一个样式字符串或出错时为 NULL

GetLastStyleName

const char *GetLastStyleName()

获取使用 OGR_STBL_GetNextStyle 获取的最后一个样式字符串的样式名称

返回: 最后一个样式字符串的名称或出错时为 NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值