From dc0ebfa35333b0c683c49bf5fd0c765211d5626c Mon Sep 17 00:00:00 2001 From: IIFelix Date: Thu, 22 Aug 2024 21:54:46 +0200 Subject: [PATCH] fix: check if Array instead of number --- data/olStyles/point_simpleoffset.ts | 15 +++++++++++++++ data/styles/point_simpleoffset.ts | 19 +++++++++++++++++++ src/OlStyleParser.spec.ts | 18 ++++++++++++++++++ src/OlStyleParser.ts | 2 +- 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 data/olStyles/point_simpleoffset.ts create mode 100644 data/styles/point_simpleoffset.ts diff --git a/data/olStyles/point_simpleoffset.ts b/data/olStyles/point_simpleoffset.ts new file mode 100644 index 00000000..488daa5f --- /dev/null +++ b/data/olStyles/point_simpleoffset.ts @@ -0,0 +1,15 @@ +import OlStyle from 'ol/style/Style'; +import OlStyleCircle from 'ol/style/Circle'; +import OlStyleFill from 'ol/style/Fill'; + +const olSimplePoint = new OlStyle({ + image: new OlStyleCircle({ + radius: 6, + fill: new OlStyleFill({ + color: '#FF0000' + }), + displacement: [1,1] + }) +}); + +export default olSimplePoint; diff --git a/data/styles/point_simpleoffset.ts b/data/styles/point_simpleoffset.ts new file mode 100644 index 00000000..441e16ce --- /dev/null +++ b/data/styles/point_simpleoffset.ts @@ -0,0 +1,19 @@ +import { Style } from 'geostyler-style'; + +const pointSimpleOffset: Style = { + name: 'OL Style', + rules: [ + { + name: 'OL Style Rule 0', + symbolizers: [{ + kind: 'Mark', + wellKnownName: 'circle', + color: '#FF0000', + radius: 6, + offset: [1, 1] + }] + } + ] +}; + +export default pointSimpleOffset; diff --git a/src/OlStyleParser.spec.ts b/src/OlStyleParser.spec.ts index e6f08fe1..f8d0b6c0 100644 --- a/src/OlStyleParser.spec.ts +++ b/src/OlStyleParser.spec.ts @@ -13,6 +13,7 @@ import OlFeature from 'ol/Feature'; import OlStyleParser, { OlParserStyleFct } from './OlStyleParser'; import point_simplepoint from '../data/styles/point_simplepoint'; +import point_simpleoffset from '../data/styles/point_simpleoffset'; import point_icon from '../data/styles/point_icon'; import point_icon_sprite from '../data/styles/point_icon_sprite'; import point_dynamic_icon from '../data/styles/point_dynamic_icon'; @@ -58,6 +59,7 @@ import filter_comparison_propertyFunction from '../data/styles/filter_comparison import ol_function_marksymbolizer from '../data/olStyles/function_markSymbolizer'; import ol_function_nested_fillsymbolizer from '../data/olStyles/function_nested_fillSymbolizer'; import ol_point_simplepoint from '../data/olStyles/point_simplepoint'; +import ol_point_simpleoffset from '../data/olStyles/point_simpleoffset'; import ol_point_icon from '../data/olStyles/point_icon'; import ol_point_icon_sprite from '../data/olStyles/point_icon_sprite'; import ol_point_simplesquare from '../data/olStyles/point_simplesquare'; @@ -155,6 +157,11 @@ describe('OlStyleParser implements StyleParser', () => { expect(geoStylerStyle).toBeDefined(); expect(geoStylerStyle).toEqual(point_simplepoint); }); + it('can read an OpenLayers PointSymbolizer with displacement', async () => { + const { output: geoStylerStyle } = await styleParser.readStyle(ol_point_simpleoffset); + expect(geoStylerStyle).toBeDefined(); + expect(geoStylerStyle).toEqual(point_simpleoffset); + }); it('can read an OpenLayers IconSymbolizer', async () => { const { output: geoStylerStyle } = await styleParser.readStyle(ol_point_icon); expect(geoStylerStyle).toBeDefined(); @@ -459,6 +466,17 @@ describe('OlStyleParser implements StyleParser', () => { expect(olCircle.getRadius()).toBeCloseTo(expecSymb.radius as number); expect(olCircle.getFill()?.getColor()).toEqual(expecSymb.color); }); + it('can write an OpenLayers PointSymbolizer with displacement', async () => { + let { output: olStyle } = await styleParser.writeStyle(point_simpleoffset); + olStyle = olStyle as OlStyle; + expect(olStyle).toBeDefined(); + + const expecSymb = point_simpleoffset.rules[0].symbolizers[0] as MarkSymbolizer; + const olCircle: OlStyleCircle = olStyle.getImage() as OlStyleCircle; + + expect(olCircle).toBeDefined(); + expect(olCircle.getDisplacement()).toEqual(expecSymb.offset); + }); it('can write an OpenLayers IconSymbolizer', async () => { let { output: olStyle } = await styleParser.writeStyle(point_icon); olStyle = olStyle as OlStyle; diff --git a/src/OlStyleParser.ts b/src/OlStyleParser.ts index 5ba37e7c..ce03b35c 100644 --- a/src/OlStyleParser.ts +++ b/src/OlStyleParser.ts @@ -1046,7 +1046,7 @@ export class OlStyleParser implements StyleParser { radius: radius ?? 5, rotation: typeof(markSymbolizer.rotate) === 'number' ? markSymbolizer.rotate * Math.PI / 180 : undefined, stroke: stroke, - displacement: typeof(markSymbolizer.offset) === 'number' ? markSymbolizer.offset : undefined + displacement: Array.isArray(markSymbolizer.offset) ? markSymbolizer.offset.map(Number) : undefined }; switch (markSymbolizer.wellKnownName) {