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
Binary file added msautotest/sld/expected/sld_else_fallback.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added msautotest/sld/expected/sld_else_from_sld.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added msautotest/sld/expected/sld_else_nofallback.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
71 changes: 71 additions & 0 deletions msautotest/sld/set_else.sld
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:se="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<se:Name>set</se:Name>
<UserStyle>
<se:Name>set</se:Name>
<se:FeatureTypeStyle>
<se:Rule>
<se:Name></se:Name>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:PropertyIsGreaterThan>
<ogc:PropertyName>N_EDGES</ogc:PropertyName>
<ogc:Literal>4</ogc:Literal>
</ogc:PropertyIsGreaterThan>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#2214a4</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:Name></se:Name>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:Or>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Hauts-de-France</ogc:Literal>
</ogc:PropertyIsEqualTo>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>NAME</ogc:PropertyName>
<ogc:Literal>Bretagne</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Or>
</ogc:Filter>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#b60205</se:SvgParameter>
<se:SvgParameter name="fill-opacity">0.36</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-opacity">0.4</se:SvgParameter>
<se:SvgParameter name="stroke-width">7</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:Name></se:Name>
<se:ElseFilter xmlns:se="http://www.opengis.net/se"/>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#7d8b8f</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#232323</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
</se:FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
112 changes: 112 additions & 0 deletions msautotest/sld/sld_else_filter_vector.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# RUN_PARMS: sld_else_nofallback.png [MAP2IMG] -m [MAPFILE] -l multipolygon -o [RESULT]
# RUN_PARMS: sld_else_fallback.png [MAP2IMG] -m [MAPFILE] -l mapscript_output -o [RESULT]
# RUN_PARMS: sld_else_from_sld.png [MAP2IMG] -m [MAPFILE] -l set -o [RESULT]

# Test that we get the SLD else-filter behavior when FALLBACK is used together with RENDERMODE=ALL_MATCHING_CLASSES
# FALLBACK should only be rendered if no other class is matching
MAP
SIZE 500 500
EXTENT -5 42 9 52
INCLUDE "data/general.map.include"

LAYER
NAME multipolygon
TYPE POLYGON
CONNECTIONTYPE OGR
CONNECTION data/set.json
STATUS ON
SIZEUNITS PIXELS
PROCESSING "RENDERMODE=ALL_MATCHING_CLASSES"
CLASS
NAME "set#0"
GROUP "set"
EXPRESSION (([N_EDGES] > 4))
STYLE
COLOR 34 20 164
END # STYLE
STYLE
OUTLINECOLOR 35 35 35
END # STYLE
END # CLASS
CLASS
NAME "set#1"
GROUP "set"
EXPRESSION ((("[NAME]" = "Hauts-de-France") Or ("[NAME]" = "Bretagne")))
STYLE
COLOR "#b602055c"
OPACITY 36
END # STYLE
STYLE
OPACITY 40
OUTLINECOLOR "#23232366"
WIDTH 7
END # STYLE
END # CLASS
CLASS
NAME "set#2"
GROUP "set"
STYLE
COLOR 125 139 143
END # STYLE
STYLE
OUTLINECOLOR 35 35 35
END # STYLE
END # CLASS
END

LAYER
NAME mapscript_output
TYPE POLYGON
CONNECTIONTYPE OGR
CONNECTION data/set.json
STATUS ON
SIZEUNITS PIXELS
PROCESSING "RENDERMODE=ALL_MATCHING_CLASSES"
CLASS
NAME "set#0"
GROUP "set"
EXPRESSION (([N_EDGES] > 4))
STYLE
COLOR 34 20 164
END # STYLE
STYLE
OUTLINECOLOR 35 35 35
END # STYLE
END # CLASS
CLASS
NAME "set#1"
GROUP "set"
EXPRESSION ((("[NAME]" = "Hauts-de-France") Or ("[NAME]" = "Bretagne")))
STYLE
COLOR "#b602055c"
OPACITY 36
END # STYLE
STYLE
OPACITY 40
OUTLINECOLOR "#23232366"
WIDTH 7
END # STYLE
END # CLASS
CLASS
NAME "set#2"
GROUP "set"
STYLE
COLOR 125 139 143
END # STYLE
STYLE
OUTLINECOLOR 35 35 35
END # STYLE
FALLBACK TRUE
END # CLASS
END

LAYER
NAME set
TYPE POLYGON
CONNECTIONTYPE OGR
CONNECTION data/set.json
STATUS ON
SIZEUNITS PIXELS
STYLEITEM "sld://set_else.sld"
END
END
8 changes: 8 additions & 0 deletions src/mapfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -3704,6 +3704,10 @@ int loadClass(classObj *class, layerObj *layer) {
if (loadHashTable(&(class->validation)) != MS_SUCCESS)
return (-1);
break;
case (FALLBACK):
if ((class->isfallback = getSymbol(2, MS_TRUE, MS_FALSE)) == -1)
return (-1);
break;
default:
if (strlen(msyystring_buffer) > 0) {
msSetError(MS_IDENTERR, "Parsing error near (%s):(line %d)",
Expand Down Expand Up @@ -3813,6 +3817,8 @@ static void writeClass(FILE *stream, int indent, classObj *class) {
writeExpression(stream, indent, "TEXT", &(class->text));
writeString(stream, indent, "TITLE", NULL, class->title);
writeHashTable(stream, indent, "VALIDATION", &(class->validation));
writeKeyword(stream, indent, "FALLBACK", class->isfallback, 1, MS_TRUE,
"TRUE");
writeBlockEnd(stream, indent, "CLASS");
}

Expand Down Expand Up @@ -4946,6 +4952,8 @@ static void writeLayer(FILE *stream, int indent, layerObj *layer) {
MS_TRUE, "TRUE");
for (i = 0; layer->processing && layer->processing[i]; i++)
writeString(stream, indent, "PROCESSING", NULL, layer->processing[i]);
writeKeyword(stream, indent, "PROCESSING", layer->rendermode, 1,
MS_ALL_MATCHING_CLASSES, "\"RENDERMODE=ALL_MATCHING_CLASSES\"");
writeProjection(stream, indent, &(layer->projection));
writeString(stream, indent, "REQUIRES", NULL, layer->requires);
writeKeyword(stream, indent, "SIZEUNITS", layer->sizeunits, 7, MS_INCHES,
Expand Down
2 changes: 2 additions & 0 deletions src/mapfile.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,8 @@ enum MS_TOKEN_SOURCES { MS_FILE_TOKENS = 0, MS_STRING_TOKENS };

#define STYLEITEM 1124

#define FALLBACK 1125

#define TITLE 1126

#define LINECAP 1127
Expand Down
Loading
Loading