Merge pull request #1130 from bartvde/sld3

Add Styled Layer Descriptor (SLD) version 1.0.0 parser (read/write) (r=@ahocevar)
This commit is contained in:
Bart van den Eijnden
2013-11-25 01:56:16 -08:00
14 changed files with 1420 additions and 1 deletions

View File

@@ -0,0 +1,90 @@
goog.provide('ol.test.parser.ogc.SLD_v1_0_0');
describe('ol.parser.ogc.SLD_v1_0_0', function() {
var parser = new ol.parser.ogc.SLD();
var obj;
describe('reading and writing', function() {
it('Handles reading', function(done) {
var url = 'spec/ol/parser/ogc/xml/sld_v1_0_0.xml';
afterLoadXml(url, function(xml) {
obj = parser.read(xml);
expect(obj.version).to.equal('1.0.0');
var style = obj.namedLayers['AAA161'].userStyles[0];
expect(style).to.be.a(ol.style.Style);
expect(style.rules_.length).to.equal(2);
var first = style.rules_[0];
expect(first).to.be.a(ol.style.Rule);
expect(first.filter_).to.be.a(ol.expr.Comparison);
expect(first.filter_.getLeft()).to.be.a(ol.expr.Identifier);
expect(first.filter_.getLeft().getName()).to.equal('CTE');
expect(first.filter_.getOperator()).to.equal(ol.expr.ComparisonOp.EQ);
expect(first.filter_.getRight()).to.be.a(ol.expr.Literal);
expect(first.filter_.getRight().getValue()).to.equal('V0305');
expect(first.getSymbolizers().length).to.equal(3);
expect(first.getSymbolizers()[0]).to.be.a(ol.style.Fill);
expect(first.getSymbolizers()[0].getColor().getValue()).to.equal(
'#ffffff');
expect(first.getSymbolizers()[0].getOpacity().getValue()).to.equal(1);
expect(first.getSymbolizers()[1]).to.be.a(ol.style.Stroke);
expect(first.getSymbolizers()[1].getColor().getValue()).to.equal(
'#000000');
expect(first.getSymbolizers()[2]).to.be.a(ol.style.Text);
expect(first.getSymbolizers()[2].getText()).to.be.a(ol.expr.Call);
expect(first.getSymbolizers()[2].getText().getArgs().length).to.equal(
3);
expect(first.getSymbolizers()[2].getText().getArgs()[0]).to.be.a(
ol.expr.Literal);
expect(first.getSymbolizers()[2].getText().getArgs()[0].getValue()).
to.equal('A');
expect(first.getSymbolizers()[2].getText().getArgs()[1]).to.be.a(
ol.expr.Identifier);
expect(first.getSymbolizers()[2].getText().getArgs()[1].getName()).
to.equal('FOO');
expect(first.getSymbolizers()[2].getText().getArgs()[2]).to.be.a(
ol.expr.Literal);
expect(first.getSymbolizers()[2].getText().getArgs()[2].getValue()).
to.equal('label');
expect(first.getSymbolizers()[2].getColor().getValue()).to.equal(
'#000000');
expect(first.getSymbolizers()[2].getFontFamily().getValue()).to.equal(
'Arial');
expect(first.getSymbolizers()[2].getStroke()).to.be.a(ol.style.Stroke);
expect(first.getSymbolizers()[2].getStroke().getColor().getValue())
.to.equal('#ffffff');
expect(first.getSymbolizers()[2].getStroke().getWidth().getValue())
.to.equal(6);
var second = style.rules_[1];
expect(second.filter_).to.be.a(ol.expr.Comparison);
expect(second.getSymbolizers().length).to.equal(2);
expect(second.getSymbolizers()[0]).to.be.a(ol.style.Fill);
expect(second.getSymbolizers()[1]).to.be.a(ol.style.Stroke);
done();
});
});
it('Handles write', function(done) {
var url = 'spec/ol/parser/ogc/xml/sld_v1_0_0_write.xml';
afterLoadXml(url, function(xml) {
expect(goog.dom.xml.loadXml(parser.write(obj))).to.xmleql(xml);
done();
});
});
});
});
goog.require('goog.dom.xml');
goog.require('ol.parser.ogc.SLD_v1_0_0');
goog.require('ol.parser.ogc.SLD');
goog.require('ol.expr.Call');
goog.require('ol.expr.Comparison');
goog.require('ol.expr.ComparisonOp');
goog.require('ol.expr.Identifier');
goog.require('ol.expr.Literal');
goog.require('ol.style.Fill');
goog.require('ol.style.Rule');
goog.require('ol.style.Stroke');
goog.require('ol.style.Style');
goog.require('ol.style.Text');

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld"
xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
<NamedLayer>
<Name>AAA161</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<Name>stortsteen</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>CTE</ogc:PropertyName>
<ogc:Literal>V0305</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<MaxScaleDenominator>50000</MaxScaleDenominator>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#ffffff</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
</Stroke>
</PolygonSymbolizer>
<TextSymbolizer>
<Label> A <ogc:PropertyName>FOO</ogc:PropertyName> label </Label>
<Font>
<CssParameter name="font-family">Arial</CssParameter>
<CssParameter name="font-size">14</CssParameter>
<CssParameter name="font-weight">bold</CssParameter>
<CssParameter name="font-style">normal</CssParameter>
</Font>
<LabelPlacement>
<PointPlacement>
<AnchorPoint>
<AnchorPointX>0.5</AnchorPointX>
<AnchorPointY>0.5</AnchorPointY>
</AnchorPoint>
<Displacement>
<DisplacementX>5</DisplacementX>
<DisplacementY>5</DisplacementY>
</Displacement>
<Rotation>45</Rotation>
</PointPlacement>
</LabelPlacement>
<Halo>
<Radius>3</Radius>
<Fill>
<CssParameter name="fill">#ffffff</CssParameter>
</Fill>
</Halo>
<Fill>
<CssParameter name="fill">#000000</CssParameter>
</Fill>
</TextSymbolizer>
</Rule>
<Rule>
<Name>betonbekleding</Name>
<ogc:Filter>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>CTE</ogc:PropertyName>
<ogc:Literal>1000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<MaxScaleDenominator>50000</MaxScaleDenominator>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#ffff00</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#0000ff</CssParameter>
</Stroke>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
<NamedLayer>
<Name>Second Layer</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<Name>first rule second layer</Name>
<ogc:Filter>
<ogc:Or>
<ogc:PropertyIsBetween>
<ogc:PropertyName>number</ogc:PropertyName>
<ogc:LowerBoundary>
<ogc:Literal>1064866676</ogc:Literal>
</ogc:LowerBoundary>
<ogc:UpperBoundary>
<ogc:Literal>1065512599</ogc:Literal>
</ogc:UpperBoundary>
</ogc:PropertyIsBetween>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>cat</ogc:PropertyName>
<ogc:Literal>*dog.food!*good</ogc:Literal>
</ogc:PropertyIsLike>
<ogc:Not>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName>FOO</ogc:PropertyName>
<ogc:Literal>5000</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:Not>
</ogc:Or>
</ogc:Filter>
<MaxScaleDenominator>10000</MaxScaleDenominator>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>star</WellKnownName>
<Fill>
<CssParameter name="fill">lime</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">olive</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</Mark>
<Size><ogc:PropertyName>SIZE</ogc:PropertyName></Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>

View File

@@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8"?>
<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<sld:NamedLayer>
<sld:Name>AAA161</sld:Name>
<sld:UserStyle>
<sld:FeatureTypeStyle>
<sld:Rule>
<sld:Name>stortsteen</sld:Name>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>CTE</ogc:PropertyName>
<ogc:Literal>V0305</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<sld:MaxScaleDenominator>49999.99999999999</sld:MaxScaleDenominator>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">#ffffff</sld:CssParameter>
<sld:CssParameter name="fill-opacity">1</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">#000000</sld:CssParameter>
<sld:CssParameter name="stroke-opacity">1</sld:CssParameter>
<sld:CssParameter name="stroke-width">1</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
<sld:TextSymbolizer>
<sld:Label><ogc:Literal xmlns:ogc="http://www.opengis.net/ogc"
>A</ogc:Literal><ogc:PropertyName
xmlns:ogc="http://www.opengis.net/ogc"
>FOO</ogc:PropertyName><ogc:Literal
xmlns:ogc="http://www.opengis.net/ogc"
>label</ogc:Literal></sld:Label>
<sld:Font>
<sld:CssParameter name="font-family">Arial</sld:CssParameter>
<sld:CssParameter name="font-size">14</sld:CssParameter>
</sld:Font>
<sld:Halo>
<sld:Radius>3</sld:Radius>
<sld:Fill>
<sld:CssParameter name="fill">#ffffff</sld:CssParameter>
<sld:CssParameter name="fill-opacity">1</sld:CssParameter>
</sld:Fill>
</sld:Halo>
<sld:Fill>
<sld:CssParameter name="fill">#000000</sld:CssParameter>
<sld:CssParameter name="fill-opacity">1</sld:CssParameter>
</sld:Fill>
</sld:TextSymbolizer>
</sld:Rule>
<sld:Rule>
<sld:Name>betonbekleding</sld:Name>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:PropertyIsLessThan>
<ogc:PropertyName>CTE</ogc:PropertyName>
<ogc:Literal>1000</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:Filter>
<sld:MaxScaleDenominator>49999.99999999999</sld:MaxScaleDenominator>
<sld:PolygonSymbolizer>
<sld:Fill>
<sld:CssParameter name="fill">#ffff00</sld:CssParameter>
<sld:CssParameter name="fill-opacity">1</sld:CssParameter>
</sld:Fill>
</sld:PolygonSymbolizer>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">#0000ff</sld:CssParameter>
<sld:CssParameter name="stroke-opacity">1</sld:CssParameter>
<sld:CssParameter name="stroke-width">1</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>
<sld:NamedLayer>
<sld:Name>Second Layer</sld:Name>
<sld:UserStyle>
<sld:FeatureTypeStyle>
<sld:Rule>
<sld:Name>first rule second layer</sld:Name>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:Or>
<ogc:Not>
<ogc:PropertyIsLessThanOrEqualTo>
<ogc:PropertyName>FOO</ogc:PropertyName>
<ogc:Literal>5000</ogc:Literal>
</ogc:PropertyIsLessThanOrEqualTo>
</ogc:Not>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>cat</ogc:PropertyName>
<ogc:Literal>*dog.food!*good</ogc:Literal>
</ogc:PropertyIsLike>
<ogc:PropertyIsBetween>
<ogc:PropertyName>number</ogc:PropertyName>
<ogc:LowerBoundary>
<ogc:Literal>1064866676</ogc:Literal>
</ogc:LowerBoundary>
<ogc:UpperBoundary>
<ogc:Literal>1065512599</ogc:Literal>
</ogc:UpperBoundary>
</ogc:PropertyIsBetween>
</ogc:Or>
</ogc:Filter>
<sld:MaxScaleDenominator>10000</sld:MaxScaleDenominator>
<sld:PointSymbolizer>
<sld:Graphic>
<sld:Mark>
<sld:WellKnownName>star</sld:WellKnownName>
<sld:Fill>
<sld:CssParameter name="fill">lime</sld:CssParameter>
<sld:CssParameter name="fill-opacity">1</sld:CssParameter>
</sld:Fill>
<sld:Stroke>
<sld:CssParameter name="stroke">olive</sld:CssParameter>
<sld:CssParameter name="stroke-opacity">1</sld:CssParameter>
<sld:CssParameter name="stroke-width">2</sld:CssParameter>
</sld:Stroke>
</sld:Mark>
<sld:Size><ogc:PropertyName xmlns:ogc="http://www.opengis.net/ogc"
>SIZE</ogc:PropertyName></sld:Size>
</sld:Graphic>
</sld:PointSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>
</sld:StyledLayerDescriptor>