From 0fa68065fee5bcf92569cf6503d413bcfad45562 Mon Sep 17 00:00:00 2001 From: Michael Cohen Date: Sat, 13 May 2023 13:33:03 +0200 Subject: [PATCH 1/2] feat: support symbolizer visibility --- src/OlStyleParser.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/OlStyleParser.ts b/src/OlStyleParser.ts index 9a8cd5ed..62f21d37 100644 --- a/src/OlStyleParser.ts +++ b/src/OlStyleParser.ts @@ -5,6 +5,7 @@ import { FillSymbolizer, Filter, IconSymbolizer, + isGeoStylerBooleanFunction, isGeoStylerFunction, isGeoStylerStringFunction, isIconSymbolizer, @@ -71,16 +72,14 @@ export class OlStyleParser implements StyleParser { blur: 'none', offsetAnchor: 'none', pitchAlignment: 'none', - pitchScale: 'none', - visibility: 'none' + pitchScale: 'none' }, FillSymbolizer: { antialias: 'none', fillOpacity: { support: 'none', info: 'Use opacity instead.' - }, - visibility: 'none' + } }, IconSymbolizer: { allowOverlap: 'none', @@ -101,8 +100,7 @@ export class OlStyleParser implements StyleParser { pitchAlignment: 'none', rotationAlignment: 'none', textFit: 'none', - textFitPadding: 'none', - visibility: 'none' + textFitPadding: 'none' }, LineSymbolizer: { blur: 'none', @@ -111,7 +109,6 @@ export class OlStyleParser implements StyleParser { miterLimit: 'none', roundLimit: 'none', spacing: 'none', - visibility: 'none', graphicFill: 'none', graphicStroke: 'none', perpendicularOffset: 'none' @@ -763,6 +760,17 @@ export class OlStyleParser implements StyleParser { rule.symbolizers.forEach((symb: Symbolizer) => { const olSymbolizer: any = this.getOlSymbolizerFromSymbolizer(symb, feature); + if (symb.visibility === false) { + return; + } + + if (isGeoStylerBooleanFunction(symb.visibility)) { + const visibility = OlStyleUtil.evaluateBooleanFunction(symb.visibility); + if (!visibility) { + return; + } + } + // either an OlStyle or an ol.StyleFunction. OpenLayers only accepts an array // of OlStyles, not ol.StyleFunctions. // So we have to check it and in case of an ol.StyleFunction call that function From c4d95355904b6e8c6c37fef021a85e92aef6f622 Mon Sep 17 00:00:00 2001 From: Michael Cohen <36225227+miccoh1994@users.noreply.github.com> Date: Tue, 6 Jun 2023 09:45:05 +0200 Subject: [PATCH 2/2] only get symbolizer after checking visibility, return null instead of undefined Co-authored-by: Kai Volland --- src/OlStyleParser.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/OlStyleParser.ts b/src/OlStyleParser.ts index 62f21d37..87ef9b64 100644 --- a/src/OlStyleParser.ts +++ b/src/OlStyleParser.ts @@ -758,19 +758,18 @@ export class OlStyleParser implements StyleParser { if (isWithinScale && matchesFilter) { rule.symbolizers.forEach((symb: Symbolizer) => { - const olSymbolizer: any = this.getOlSymbolizerFromSymbolizer(symb, feature); - if (symb.visibility === false) { - return; + return null; } if (isGeoStylerBooleanFunction(symb.visibility)) { const visibility = OlStyleUtil.evaluateBooleanFunction(symb.visibility); if (!visibility) { - return; + return null; } } + const olSymbolizer: any = this.getOlSymbolizerFromSymbolizer(symb, feature); // either an OlStyle or an ol.StyleFunction. OpenLayers only accepts an array // of OlStyles, not ol.StyleFunctions. // So we have to check it and in case of an ol.StyleFunction call that function