OGR样式模型

OGR样式模型

sf2gis@163.com

2013年12月3日

 

1  OGR样式模型

OGR样式模型:OGR使用简单的键值对字符串管理样式。每种样式都可以自定义其名称,每种样式都是由不同的样式属性组成。

如:MyStyle: PEN(c:#FF0000,w:5,p:1);BRUSH(fc:#0000FF,bc:1,id:108,a:45.000000)//#RRGGBB

表示样式名称为MyStyle的样式,包含一个画笔,颜色是红色,宽度是5像素,样式是1;一个画刷,前景色是蓝色,后景色是样式1id108,角度是45度。注意:不同的样式工具,用‘;’分开。最后不能有‘;’,如果有,则会造成空工具的错误。

OGR的样式前期存储在字符串中,后期为方便管理使用了OGRStyleTable类。

OGRStyleTable类是一个用于管理样式字符串的表格类。用于管理多种样式,每个样式都都相应的名称索引。每个样式都由一个字符串组成,字符串使用类似于JSON的键值对表示(JSON使用{},而样式使用())。为了方便管理样式字符串,OGR使用了OGRStyleMgr类。

OGRStyleMgr类是一个用于管理单个样式字符串的类。用于管理和生成每个样式表中的具体的样式,也用于与Feature、OGRStyleTable、OGRStyleTool的交互。由于各种样式太多,而且不同的样式之间可能有重叠(如BRUSH和PEN的Color属性),为了方便管理每一种属性,OGR使用OGRStyleTool类。后来,为了方便管理OGRStyleTable,在OGRStyleMgr也添加了读取OGRStyleTable的操作。再后来,为了方便管理Feature/Dataset中样式,也添加了与其相关的操作。

OGRStyleTool类是一个抽象类,用于管理具体的一种属性(PEN、BRUSH、LABEL、SYMBOL)。

1.1 OGRStyleTable

AddStyle(索引名,样式字符串):添加一种索引名称的样式字符串。

RemoveStyle(索引名):删除指定索引名的样式字符串。

ModifyStyle(索引名,样式字符串):修改已有的样式字符串。

Find(索引名):根据索引名,返回样式字符串。

IsExist(索引名):检查是否存在指定的索引名。

GetStyleName(样式字符串):检查样式字符串对应的索引名。

Clear():清除所有样式。

Clone():复制样式表。

SaveStyleTable(目录):将样式表保存到指定目录。

loadStyleTable(目录):加载指定目录到目前的样式表。

ResetStyleStringReading():设置当前样式游标的位置。

GetNextStyle():获取游标指向的下一个样式。

GetLastStyleName():获取游标指向的当前的样式名称。

1.1.1 示例

        //styletable

        OGRStyleTable *pTable = new OGRStyleTable;

        OGRStylePen *pPen = new OGRStylePen;

        pPen->SetWidth(20);

        pPen->SetColor(“#FF0000”);

        LPCSTR strPen =pPen->GetStyleString();

        //add

        pTable->AddStyle(“20”,strPen);

        pPen->SetWidth(21);

        LPCSTR strPen1 =pPen->GetStyleString();

        pTable->AddStyle(“21”,strPen1);

        pPen->SetWidth(22);

        LPCSTR strPen2 =pPen->GetStyleString();

        pTable->AddStyle(“22”,strPen2);

        //isexist

        GBool bExist =pTable->IsExist(“22”);

        //remove

        pTable->RemoveStyle(“22”);

        bExist = pTable->IsExist(“22”);

        //modify

        pTable->ModifyStyle(“20”,“PEN(c:#FF0011,w:20.000000)”);

        LPCSTR str20 =pTable->Find(“20”);

        //find

        LPCSTR str21 =pTable->Find(“21”);

        //getname

        LPCSTR strName =pTable->GetStyleName(str21);

        //clone

        OGRStyleTable *pClone =pTable->Clone();

        GBool b21 =pClone->IsExist(“21”);

        //clear

        pClone->Clear();

        b21 = pClone->IsExist(“21”);

        //save

        pTable->SaveStyleTable(“D:\\table.txt”);

        //load

        OGRStyleTable *pLoad = new OGRStyleTable;

        pLoad->LoadStyleTable(“D:\\table.txt”);

        LPCSTR strLoad21 =pLoad->Find(“21”);

        //read

        pTable->ResetStyleStringReading();

        LPCSTR pStyle =pTable->GetNextStyle();

        while(pStyle!= NULL)

        {

            LPCSTR strLastName =pTable->GetLastStyleName();

            pStyle =pTable->GetNextStyle();

        }

 

 

1.2 OGRStyleMgr

OGRStyleMgr(OGRStyleTable *):使用样式表生成管理器。

InitFromString(样式字符串):使用样式字符串初始化样式管理器。

InitFromFeature(元素):使用元素的样式表初始化样式管理器。

AddStyle(索引名,样式字符串):添加样式。

GetStyleByName(索引名):根据样式名获取样式字符串。

GetStyleName(样式字符串):根据样式字符串获取样式名。

GetStyleString(OGRFeature * = NULL):获取元素的样式(如果无元素,则返回当前Mgr中存储的样式)。

AddPart(样式字符串/OGRStyleTool*):添加Mgr默认样式。

GetPart(PartID):根据ID获取Part的OGRStyleTool。

GetPartCount():获取part的数量,如果使用NULL参数,则使用Mgr内容的样式数据计算。

GetDataSetStyleTable():获取用于初始化的StyleTable。

CreateStyleToolFromStyleString(样式字符串):使用样式字符串生成OGRStyleTool。???

1.2.1 示例

        //stylemanager

        //构造Table

        OGRStyleTable *pTable = new OGRStyleTable;

        OGRStylePen *pPen = new OGRStylePen;

        pPen->SetWidth(20);

        pPen->SetColor(“#FF0000”);

        LPCSTR strPen =pPen->GetStyleString();

        //add

        pTable->AddStyle(“20”,strPen);

        pPen->SetWidth(21);

        LPCSTR strPen1 =pPen->GetStyleString();

        pTable->AddStyle(“21”,strPen1);

        pPen->SetWidth(22);

        LPCSTR strPen2 = pPen->GetStyleString();

        pTable->AddStyle(“22”,strPen2);

       

        //create

        OGRStyleMgr *pMgr = new OGRStyleMgr(pTable);

        //addstyle

        pMgr->AddStyle(“23”,“PEN(c:#FF0000,w:23.000000)”);

        //getstyle by name

        LPCSTR strStyle =pMgr->GetStyleByName(“21”);

        //getstyle name

        LPCSTR strMgr20 =pMgr->GetStyleName(“PEN(c:#FF0011,w:20.000000)”);

        //addpart

        GBool bAdd =pMgr->AddPart(“PEN(c:#FF0011,w:20.000000)”);

        //getpart count

        intiCount = pMgr->GetPartCount();

        //getpart

        OGRStyleTool *pTool =pMgr->GetPart(0);

        //getstyle table

        OGRStyleTable *pDSStyleTable= pMgr->GetDataSetStyleTable();

        //getstyle string

        LPCSTR strMgr =pMgr->GetStyleString();

        //initstyle string

        OGRStyleMgr *pMgr1 = new OGRStyleMgr;

        pMgr1->InitStyleString(strMgr);

        OGRStyleTool *pTool1 =pMgr->GetPart(0);

        char*pString =
“PEN(c:#FF0011,w:20.000000)”
;

        //createstyle tool from style string

        OGRStyleTool *pTool2 =pMgr1->CreateStyleToolFromStyleString(pString);

        LPCSTR p1 =pTool2->GetStyleString();

        //setfeature style string

        GBool bSet =pMgr1->SetFeatureStyleString(pFeature,strMgr);

        LPCSTR strStyleFeat =pFeature->GetStyleString();

        OGRStyleMgr *pMgr2 = new OGRStyleMgr;

        //initfrom feature

        pMgr2->InitFromFeature(pFeature);

        LPCSTR p2 = pMgr2->GetStyleString();

 

1.3 OGRStyleTool

GetRGBFromString(#12345678,r,g,b,t):返回16进制颜色字符串对应的十进制数。

GetSpecificID():

IsStyleModified():

StyleModified():

IsStyleParsed():

StyleParsed():

GetType():返回当前OGRStyleTool的类型。

SetUnit():设置单位。

GetUnit():获取单位。

SetInternalInputUnifFromParam():

SetStyleString():设置样式字符串。

GetStyleString():读取样式字符串。

SetParamStr():设置参数。

GetParamStr():读取参数。

SetParamNum():设置参数。

GetParamNum():读取参数。

SetParamDbl():设置参数。

GetParamDbl():读取参数。

ComputeWithUnit():单位之间转换。

1.3.1 OGRStylePen

1.3.1.1  字符串

c:Color

w:Width

p:Pattern

id:ID

 

1.3.1.2  属性

Color、Width:颜色、宽度。

Pattern:样式。

ID:ID。

PerOffset:

Cap:尾帽。

Join:连接点。

Priority:优先级。

Last:上一个。

1.3.2 OGRStyleBrush

1.3.2.1  字符串

BRUSH(fc:#0000FF,bc:#FF0000,id:108,a:45.000000)//画刷

fc:ForeColor

bc:BackColor

id:ID

a:Angle

1.3.2.2  属性

ForceColor、BackColor:前景色、后景色(阴影)。

Id:

Angle:

Size:

Dx/Dy:

Priority:

Last:

1.3.3 OGRStyleLabel

FontName:

Size:

TextString:

Angle:

FrontColor/BackColor:

Placement:

Anchor:

Perp:

Bold/Italic/Underline/Strikeout:

Stretch:

AdjHor/AdjVert:

HColor/OColor:

Dx/Dy:

Priority:

Last:

1.3.4 OGRStyleSymbol

Id:

Angle:

Color:

Size:

Dx/Dy:

Step:

Perp:

Offset:

Priority:

FontName:

OColor

Last:

 

1.3.5 示例

        //tool

        char*pString =
“PEN(c:#FF0011,w:20.000000)”
;

        OGRStyleTool *pT1 = new OGRStylePen;

        //set stylestring

        pT1->SetStyleString(pString);

        //get type

        OGRSTClassId idType = pT1->GetType();

        OGRStylePen *pPen = (OGRStylePen *)pT1;

        GBool bDefault;

        //color

        LPCSTR pRed = pPen->Color(bDefault);

        //get rgb fromstring

        intr,g,b,t;

        GBool bColor =pT1->GetRGBFromString(pRed,r,g,b,t);

        LPCSTR strColor = pPen->Color(bColor);

        //get unit

        OGRSTUnitId idUnit = pPen->GetUnit();

        pPen->SetUnit(OGRSTUPixel,1);

        GBool bM = pPen->IsStyleModified();

        GBool bP = pPen->IsStyleParsed();

        //get paramvalue

        GBool bNULL;

        const
char
*pChar =pPen->GetParamStr(OGRSTPenWidth,bNULL);

        //compute unit

        doubledTrans = pPen->ComputeWithUnit(1,OGRSTUCM);

        GBool bDef;

        LPCSTR strID = pPen->Id(bDef);

        LPCSTR strJoin = pPen->Join(bDef);

        LPCSTR strCap = pPen->Cap(bDef);

        int iPri= pPen->Priority(bDef);

        LPCSTR strIPat = pPen->Pattern(bDef);

 

2 参考

OGR帮助文档。

http://blog.csdn.net/zhouschina/article/details/8668667

转载自:https://blog.csdn.net/sf2gis2/article/details/50686782

You may also like...