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;一个画刷,前景色是蓝色,后景色是样式1,id是108,角度是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