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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GDAL开发手册API详细说明,内含详细示例代码,适合初学者使用,非常棒的入门书!In pythe Import go from gdalconst import s datasct-gdal. Open( filename, GA ReadOnly if dataset is none 如果 GDALOpen(函数返回NUL则表示打开失败,同时 CPLError(函数产生 相应的错误信息。如果您需要对错误迂行处理可以参考 CPLError相关文档 通常情况下,所有的GDAL函数都通过 CPLError(报告错误。另外需要注意的 是 pszFilename并不一定对应一个实际的文件名(当然也可以就是一个文件 名)。它的具休解释由相应的驱动程序负责。它可能是一个URL,或者是文件 名以后后面带有许多用于控制打开方式的参数。通常建议,不要在打开文件的 选择对话框中对文件的类型做太多的限制。 1.2.获取 Dataset信息 如果GL数据模型一节所描述的,一个 GDALDataset包含了光栅数据的一系列 的泼段信息。同时它还包含元数据、一个坐标系统、投影类型、光枥的大小以 及其他许多信息。 dfGeotransform[0]/米左上角x*/ dfGeoTrans lori[1]/东西方向一个像素对应的距离*/ adfGeotransform[2]/米旋转,0表示上面为北方 adfGeotransform[3]米左上角y*/ adfGeotrans form[4]/*旋转,0表示上面为北方米/ adfGeoTransform[5]/*南北方向一个像素对应的距离*/ 如果需要输出 dataset的基木信息,可以这样: In c+t adfGcotransform[6] printf( Driver: %s/%s\n poDataset->GetDriver(->GetDescription o poDataset->GetDriver()->GetMetadataltem( GDAL DMD LONGNAME)) printr( Size is %dx%dx%d\n poDataset->GetRasterXSizeo, poDataset->GetRasterYSize( poDataset->GetRasterCounto) if( poDataset->GetProjectionRef(!= NULL printf( Projection is %s'n poDataset->GetProjectionRef() if( poDataset->GetGeoTransform( adfGeoTransform one printf( Origin=(%. 6f, %. 6f)\n adfGeoTransform[01, adfGeoTrans form[3]) printf(Pixel Size=(%. 6f, %. 6f)\n adfGcoTransform[1, adfGco Transform[5 In c GDALDriverh dRiver double adfGeoTransform[6] hDriver- GDALGctDatasctDriver( hDatasct printf( Driver: %s /%s\n GDALGetDriver ShortName( hDriver GDALGetDriverlongName ( dRiver)) printf size is %dx%dx%d\n GDALGetRasterXSize( hDataset GDALGetRasterYSize( dAtaset GDALGetRasterCount( hDataset)) if( GDALGetProjectionRef( hDataset )! -NULL printf( Projection is %s\n GDALGetProjectionRef( dAtaset )) if( GDALGetGeoTransform( hDataset, adfGeoTransform )==CE None printf( Origin =(9%.6f, %.6f)\n adfGeo Transform[01, adfGeo Transform[3]) printf( pixel Size=(%. 6f, %.6f)\n adfGeoTransform[1, adfGeoTrans form[5) In Python print Driver:', dataset GetDriver(. ShortName, /', dataset. Get Driver(. Lon

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值