你可以使用CSS解析器,并为你的图层样式生成JSON数据。
JSCSSP是解析CSS的好库。我已经使用JSCSSP编写了一个小包装类来解决你的问题。
在解析器类的构造函数中,使用XMLHttpRequest发起对CSS文件的获取请求,然后使用CSSParser.parse()解析CSS数据。
function Parser(url)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", url, false );
xmlHttp.send();
this.cssData = xmlHttp.responseText;
var cssParser = new CSSParser();
this.sheet = cssParser.parse(this.cssData, false, true);
}
在Parser类中添加一个方法,该方法将在css文件中搜索给定的规则名称,并从该规则生成json数据。
Parser.prototype.parse = function(element)
{
var result = {};
var rules = this.sheet.cssRules;
for (var i = 0; i < rules.length; i++)
{
if (rules[i].mSelectorText == element )
{
for (var j = 0; j < rules[i].declarations.length; j++)
{
var value = rules[i].declarations[j].valueText;
if (isNaN(Number(value)))
result[rules[i].declarations[j].property] = value;
else
result[rules[i].declarations[j].property] = Number(value);
}
}
}
return result;
}
例子用法:
test.css
#layer1{
strokeColor: blue;
strokeWidth: 2;
strokeOpacity: 0.8;
}
JavaScript文件
var parser = new Parser("test.css");
var layer1 = new OpenLayers.Layer.Vector("Layer 1", {
strategies: [new OpenLayers.Strategy.Fixed()],
styleMap: new OpenLayers.StyleMap({
"default": new OpenLayers.Style(parser.parse("#layer1"))
})
});
您可以更改parse方法的返回值为:
return new OpenLayers.Style(result)
为了在构建类似于这样的OpenLayers图层时拥有更清晰的语法
"default": parser.parse("
不要忘记包含 JSCSSP
javascript 文件。