Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions data/slds/1.0/text_displacement.sld
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor
version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<NamedLayer>
<Name>Displaced Text</Name>
<UserStyle>
<Name>Displaced Text</Name>
<FeatureTypeStyle>
<Rule>
<Name/>
<TextSymbolizer>
<Label>Displaced</Label>
<LabelPlacement>
<PointPlacement>
<Displacement>
<DisplacementX>-20</DisplacementX>
<DisplacementY>10</DisplacementY>
</Displacement>
</PointPlacement>
</LabelPlacement>
</TextSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
2 changes: 1 addition & 1 deletion data/styles/geoserver/poi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const style: Style = {
radius: 3.5,
offset: [
5,
10
-10
],
}
]
Expand Down
2 changes: 1 addition & 1 deletion data/styles/point_simplepoint_displacement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const pointSimplePointDisplacement: Style = {
fillOpacity: 0.5,
strokeColor: '#0000FF',
strokeOpacity: 0.7,
offset: [13, 37]
offset: [13, -37]
}]
}]
};
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
},
"dependencies": {
"fast-xml-parser": "^5.2.3",
"geostyler-style": "^11.0.1",
"geostyler-style": "^11.0.2",
"lodash": "^4.17.21"
},
"devDependencies": {
Expand Down
52 changes: 37 additions & 15 deletions src/SldParser.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import { expect, it, describe } from 'vitest';
import point_simplepoint from '../data/styles/point_simplepoint';
// @ts-ignore
import cdata from '../data/styles/cdata';
import { TextSymbolizer } from 'geostyler-style';

describe('SldStyleParser implements StyleParser (reading from one version and writing to another version)', () => {
it('can read and write a SLD PointSymbolizer (from 1.0.0 version to 1.1.0 version)', async () => {
const styleParser = new SldStyleParser({sldVersion: '1.1.0'});
const styleParser = new SldStyleParser({ sldVersion: '1.1.0' });

const sld = fs.readFileSync('./data/slds/1.0/point_simplepoint.sld', 'utf8');
const { output: geoStylerStyle } = await styleParser.readStyle(sld);
Expand All @@ -32,7 +33,7 @@ describe('SldStyleParser implements StyleParser (reading from one version and wr
expect(readStyle).toEqual(point_simplepoint);
});
it('can read and write a SLD PointSymbolizer (from 1.1.0 version to 1.0.0 version)', async () => {
const styleParser = new SldStyleParser({sldVersion: '1.0.0'});
const styleParser = new SldStyleParser({ sldVersion: '1.0.0' });

const sld = fs.readFileSync('./data/slds/1.1/point_simplepoint.sld', 'utf8');
const { output: geoStylerStyle } = await styleParser.readStyle(sld);
Expand Down Expand Up @@ -67,33 +68,54 @@ describe('SldStyleParser implements StyleParser (reading from one version and wr

describe('Test Anchor-Point-Conversions', () => {
it('transforms the sld-Anchorpoint-values to geostyler-anchors', async () => {
const test1 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.0,0.0);
const test1 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.0, 0.0);
expect(test1).toEqual('bottom-left');
const test2 = new SldStyleParser().getAnchorFromSldAnchorPoint(1.0,1.0);
const test2 = new SldStyleParser().getAnchorFromSldAnchorPoint(1.0, 1.0);
expect(test2).toEqual('top-right');
const test3 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.5,1.0);
const test3 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.5, 1.0);
expect(test3).toEqual('top');
const test4 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.45,0.9);
const test4 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.45, 0.9);
expect(test4).toEqual('top');
const test5 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.5,0.5);
const test5 = new SldStyleParser().getAnchorFromSldAnchorPoint(0.5, 0.5);
expect(test5).toBeUndefined();
const test6 = new SldStyleParser().getAnchorFromSldAnchorPoint(undefined,undefined);
const test6 = new SldStyleParser().getAnchorFromSldAnchorPoint(undefined, undefined);
expect(test6).toBeUndefined();
});
it('transformes the geostyler-anchors to sld-Anchopoint-values', async () => {
const test1 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom-left','x');
const test1 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom-left', 'x');
expect(test1).toEqual(0.0);
const test2 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom-left','y');
const test2 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom-left', 'y');
expect(test2).toEqual(0.0);
const test3 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom','x');
const test3 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom', 'x');
expect(test3).toEqual(0.5);
const test4 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom','y');
const test4 = new SldStyleParser().getSldAnchorPointFromAnchor('bottom', 'y');
expect(test4).toEqual(0.0);
const test5 = new SldStyleParser().getSldAnchorPointFromAnchor('center','x');
const test5 = new SldStyleParser().getSldAnchorPointFromAnchor('center', 'x');
expect(test5).toEqual(0.5);
const test6 = new SldStyleParser().getSldAnchorPointFromAnchor('center','y');
const test6 = new SldStyleParser().getSldAnchorPointFromAnchor('center', 'y');
expect(test6).toEqual(0.5);
const test7 = new SldStyleParser().getAnchorFromSldAnchorPoint(undefined,'x');
const test7 = new SldStyleParser().getAnchorFromSldAnchorPoint(undefined, 'x');
expect(test7).toBeUndefined();
});
});

describe('Diplacement parsing works with `pareTagValue: false` option', async () => {
let styleParser: SldStyleParser;
it('parses the displacement values as numbers', async () => {
const sld = fs.readFileSync('./data/slds/1.0/text_displacement.sld', 'utf8');
styleParser = new SldStyleParser({
sldVersion: '1.0.0',
parserOptions: {
parseTagValue: false
}
});
const { output: geoStylerStyle } = await styleParser.readStyle(sld);
expect(geoStylerStyle).toBeDefined();
const symbolizer = geoStylerStyle?.rules?.[0]?.symbolizers?.[0] as TextSymbolizer;
expect(symbolizer).toBeDefined();
// beware that in SLD positive y values mean a displacement to the top,
// whereas in geostyler-style positive y values mean a displacement to the bottom,
// thus the y value is inverted
expect(symbolizer.offset).toEqual([-20, -10]);
});
});
Loading