RFC18:API中的OGR样式支持

作者:丹尼尔·莫里塞特

联系方式:dmorissette@mappears.com

状态:通过(2007-12-05)

总结

OGR有许多C++类,它们处理样式信息的编码并附加到特征。更多信息请参见 特征样式规范 文件。

对于GDAL/OGR版本1.4.x及更高版本,不可能使用C API处理样式信息。此RFC建议在C API中添加函数,以操作GDAL/OGR 1.5中的样式信息。

实施细节

  • 以下枚举将从ogr_featurestyle.h移到ogr_core.h:

OGRSTClassId;
OGRSTUnitId;
OGRSTPenParam;
OGRSTBrushParam;
OGRSTSymbolParam;
OGRSTLabelParam;
  • OGSTYTMLMEGH(对应于OrgStReMyGrc++类)将被添加到C++ API:

OGRStyleMgrH  OGR_SM_Create()
void          OGR_SM_Destroy(OGRStyleMgrH hSM)

const char   *OGR_SM_InitFromFeature(OGRStyleMgrH hSM)
int           OGR_SM_InitFromStyleString(const char *pszStyleString)
int           OGR_SM_GetPartCount(OGRStyleMgrH hSM)
OGRStyleToolH OGR_SM_GetPart(OGRStyleMgrH hSM)
int           OGR_SM_AddPart(OGRStyleMgrH hSM, OGRStyleTool *sPart)
  • OrgStudiLooLoH(对应于OrgStutlooC+C++类)将被添加到C API:

OGRStyleToolH OGR_ST_Create(OGRSTClassId eClassId)
void          OGR_ST_Destroy(OGRStyleToolH hST)
OGRSTClassId  OGR_ST_GetType(OGRStyleToolH hST)

OGRSTUnitId   OGR_ST_GetUnit(OGRStyleToolH hST)
void          OGR_ST_SetUnit(OGRStyleToolH hST, OGRSTUnitId eUnit, double dfGroundPaperScale)

int           OGR_ST_GetParamIsNull(OGRStyleToolH hST, int eParam)
const char   *OGR_ST_GetParamStr(OGRStyleToolH hST, int eParam)
int           OGR_ST_GetParamNum(OGRStyleToolH hST, int eParam)
double        OGR_ST_GetParamDbl(OGRStyleToolH hST, int eParam)
void          OGR_ST_SetParamStr(OGRStyleToolH hST, int eParam, const char *pszParamString)
void          OGR_ST_SetParamNum(OGRStyleToolH hST, int eParam, int nParam)
void          OGR_ST_SetParamDbl(OGRStyleToolH hST, int eParam, double dfParam)
const char   *OGR_ST_GetStyleString(OGRStyleToolH hST)

int           OGR_ST_GetRGBFromString(OGRStyleToolH hST, const char *pszColor,
                                     int *nRed, int *nGreen, int *nBlue, int *nAlpha);

注意:在实现时,OGR_ST_GetParamIsNull()已被移除并替换为'int * BoValeSISULL参数对所有OGRSTSTGETPARAM…()函数进行参数化,以便更贴近C++方法。

  • 下列OCG\内部处理的C++类不需要包装器 * 上面的包装纸:

class OGRStylePen : public OGRStyleTool
class OGRStyleBrush : public OGRStyleTool
class OGRStyleSymbol : public OGRStyleTool
class OGRStyleLabel : public OGRStyleTool
  • 请注意,ogr_featurestyle.h还包含一个OGRSTVectorParam枚举和一个对应的OGRStyleVector类,但该类当前未使用,最终可能会被删除,因此我们不会在C API中实现对它的支持(OGRSTVectorParam枚举将不会移动到ogr_core.h)。

Python和其他语言绑定

最初的实现将仅用于C API,不会使用Python和其他脚本语言绑定进行移植/测试。这将不得不等待稍后的发布。

实施

Daniel Morissette将为GDAL/OGR 1.5.0版本实现本RFC中描述的对C API的更改。

新的C API函数的第一个测试是将MapServer的mapogr.cpp转换为使用它们。

投票历史

+所有PSC成员(FrankW、DanielM、HowardB、TamasS、AndreyK)各1名