Skip to content

Commit 6dbece4

Browse files
committed
SLD generation: write UserStyle.Name from CLASS.GROUP (one UserStyle per class that share the same CLASS.GROUP) and UserStyle.IsDefault from LAYER.CLASSGROUP
1 parent 2107829 commit 6dbece4

16 files changed

+370
-18
lines changed

mapogcsld.c

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4145,12 +4145,25 @@ static void msSLDAppendName(msStringBuffer* sb, const char* pszName, int nVersio
41454145
msFree(pszEncoded);
41464146
}
41474147

4148-
static void msSLDGenerateUserStyle(msStringBuffer* sb, layerObj *psLayer, int nVersion)
4148+
static void msSLDGenerateUserStyle(msStringBuffer* sb, layerObj *psLayer, int nVersion,
4149+
const char* pszTargetGroup)
41494150
{
41504151
const char* pszWfsFilter;
41514152

41524153
msStringBufferAppend(sb, "<UserStyle>\n");
41534154

4155+
if( pszTargetGroup )
4156+
{
4157+
msSLDAppendName(sb, pszTargetGroup, nVersion);
4158+
if( psLayer->classgroup &&
4159+
strcmp(psLayer->classgroup, pszTargetGroup) == 0 )
4160+
{
4161+
msStringBufferAppend(sb, nVersion > OWS_1_0_0 ?
4162+
"<se:IsDefault>true</se:IsDefault>\n" :
4163+
"<IsDefault>true</IsDefault>\n");
4164+
}
4165+
}
4166+
41544167
msStringBufferAppend(sb, nVersion > OWS_1_0_0 ?
41554168
"<se:FeatureTypeStyle>\n" : "<FeatureTypeStyle>\n");
41564169

@@ -4161,6 +4174,20 @@ static void msSLDGenerateUserStyle(msStringBuffer* sb, layerObj *psLayer, int nV
41614174
char* pszFilter;
41624175
double dfMinScale =-1, dfMaxScale = -1;
41634176

4177+
/* Only write down classes that match the group of interest */
4178+
if( psLayer->class[i]->group )
4179+
{
4180+
if( pszTargetGroup == NULL ||
4181+
strcmp(psLayer->class[i]->group, pszTargetGroup) != 0 )
4182+
{
4183+
continue;
4184+
}
4185+
}
4186+
else if( pszTargetGroup != NULL )
4187+
{
4188+
continue;
4189+
}
4190+
41644191
msStringBufferAppend(sb, nVersion > OWS_1_0_0 ? "<se:Rule>\n" : "<Rule>\n" );
41654192

41664193
/* if class has a name, use it as the RULE name */
@@ -4298,6 +4325,33 @@ char *msSLDGenerateSLDLayer(layerObj *psLayer, int nVersion)
42984325
psLayer->type == MS_LAYER_LINE ||
42994326
psLayer->type == MS_LAYER_POLYGON )) {
43004327

4328+
int i;
4329+
int numClassGroupNames = 0;
4330+
char** papszClassGroupNames =
4331+
(char**) msSmallMalloc(sizeof(char*) * psLayer->numclasses);
4332+
for (i=0; i<psLayer->numclasses; i++) {
4333+
const char* group = psLayer->class[i]->group;
4334+
int j;
4335+
for( j = 0; j < numClassGroupNames; j++ )
4336+
{
4337+
if( group == NULL )
4338+
{
4339+
if( papszClassGroupNames[j] == NULL )
4340+
break;
4341+
}
4342+
else if( papszClassGroupNames[j] != NULL &&
4343+
strcmp(papszClassGroupNames[j], group) == 0 )
4344+
{
4345+
break;
4346+
}
4347+
}
4348+
if( j >= numClassGroupNames )
4349+
{
4350+
papszClassGroupNames[numClassGroupNames] = group ? msStrdup(group) : NULL;
4351+
numClassGroupNames ++;
4352+
}
4353+
}
4354+
43014355
msStringBufferAppend(sb, "<NamedLayer>\n");
43024356

43034357
pszWMSLayerName = msOWSLookupMetadata(&(psLayer->metadata), "MO", "name");
@@ -4307,7 +4361,11 @@ char *msSLDGenerateSLDLayer(layerObj *psLayer, int nVersion)
43074361
"NamedLayer",
43084362
nVersion);
43094363

4310-
msSLDGenerateUserStyle(sb, psLayer, nVersion);
4364+
for (i=0; i<numClassGroupNames; i++) {
4365+
msSLDGenerateUserStyle(sb, psLayer, nVersion, papszClassGroupNames[i]);
4366+
msFree(papszClassGroupNames[i]);
4367+
}
4368+
msFree(papszClassGroupNames);
43114369

43124370
msStringBufferAppend(sb, "</NamedLayer>\n");
43134371
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
Content-Type: application/vnd.ogc.sld+xml; charset=UTF-8
2+
3+
<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">
4+
<NamedLayer>
5+
<Name>lline</Name>
6+
<UserStyle>
7+
<Name>red_and_blue</Name>
8+
<IsDefault>true<IsDefault>
9+
<FeatureTypeStyle>
10+
<Rule>
11+
<LineSymbolizer>
12+
<Stroke>
13+
<CssParameter name="stroke">#ff0000</CssParameter>
14+
<CssParameter name="stroke-opacity">0.50</CssParameter>
15+
<CssParameter name="stroke-width">5.00</CssParameter>
16+
</Stroke>
17+
</LineSymbolizer>
18+
</Rule>
19+
<Rule>
20+
<LineSymbolizer>
21+
<Stroke>
22+
<CssParameter name="stroke">#0000ff</CssParameter>
23+
<CssParameter name="stroke-opacity">0.50</CssParameter>
24+
<CssParameter name="stroke-width">3.00</CssParameter>
25+
</Stroke>
26+
</LineSymbolizer>
27+
</Rule>
28+
</FeatureTypeStyle>
29+
</UserStyle>
30+
<UserStyle>
31+
<Name>green</Name>
32+
<FeatureTypeStyle>
33+
<Rule>
34+
<LineSymbolizer>
35+
<Stroke>
36+
<CssParameter name="stroke">#00ff00</CssParameter>
37+
<CssParameter name="stroke-opacity">0.50</CssParameter>
38+
<CssParameter name="stroke-width">5.00</CssParameter>
39+
</Stroke>
40+
</LineSymbolizer>
41+
</Rule>
42+
</FeatureTypeStyle>
43+
</UserStyle>
44+
</NamedLayer>
45+
</StyledLayerDescriptor>
46+
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#
2+
# REQUIRES: INPUT=GDAL OUTPUT=PNG SUPPORTS=WMS
3+
4+
# GetStyles
5+
# RUN_PARMS: sld_named_userstyle_get_styles.xml [MAPSERV] QUERY_STRING="map=[MAPFILE]&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetStyles&LAYERS=lline" > [RESULT]
6+
7+
MAP
8+
9+
NAME TEST
10+
SHAPEPATH ./data
11+
SIZE 300 300
12+
IMAGECOLOR 100 100 100
13+
FONTSET "data/fonts.lst"
14+
PROJECTION
15+
"init=epsg:4326"
16+
END
17+
WEB
18+
IMAGEPATH "/tmp/ms_tmp/"
19+
IMAGEURL "/ms_tmp/"
20+
METADATA
21+
"wms_title" "Test SLD"
22+
"wms_onlineresource" "http://localhost/path/to/wms_simple?"
23+
"wms_srs" "EPSG:4326"
24+
"ows_schemas_location" "http://schemas.opengis.net"
25+
"ows_enable_request" "*"
26+
"ows_sld_enabled" "true"
27+
END
28+
END
29+
30+
LAYER
31+
NAME lline
32+
DATA hexagon
33+
TYPE LINE
34+
STATUS ON
35+
SIZEUNITS pixels
36+
CLASSGROUP "red_and_blue"
37+
CLASS
38+
GROUP "red_and_blue"
39+
STYLE
40+
WIDTH 5
41+
OPACITY 50
42+
COLOR 255 0 0
43+
END
44+
END
45+
CLASS
46+
GROUP "red_and_blue"
47+
STYLE
48+
WIDTH 3
49+
OPACITY 50
50+
COLOR 0 0 255
51+
END
52+
END
53+
CLASS
54+
GROUP "green"
55+
STYLE
56+
WIDTH 5
57+
OPACITY 50
58+
COLOR 0 255 0
59+
END
60+
END
61+
END
62+
63+
END

msautotest/wxs/expected/wms_inspire_scenario1_styles130_airlink.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<NamedLayer>
33
<se:Name>TN.AirTransportNetwork.AirLink</se:Name>
44
<UserStyle>
5+
<se:Name>inspire_common:DEFAULT</se:Name>
6+
<se:IsDefault>true</se:IsDefault>
57
<se:FeatureTypeStyle>
68
<se:Rule>
79
<se:Name>myclass4</se:Name>

msautotest/wxs/expected/wms_inspire_scenario1_styles130_roadarea.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<NamedLayer>
33
<se:Name>TN.RoadTransportNetwork.RoadLink</se:Name>
44
<UserStyle>
5+
<se:Name>inspire_common:DEFAULT</se:Name>
6+
<se:IsDefault>true</se:IsDefault>
57
<se:FeatureTypeStyle>
68
<se:Rule>
79
<se:Name>myclass1</se:Name>
@@ -29,6 +31,8 @@
2931
<NamedLayer>
3032
<se:Name>TN.RailTransportNetwork.RailwayLink</se:Name>
3133
<UserStyle>
34+
<se:Name>inspire_common:DEFAULT</se:Name>
35+
<se:IsDefault>true</se:IsDefault>
3236
<se:FeatureTypeStyle>
3337
<se:Rule>
3438
<se:Name>myclass3</se:Name>
@@ -46,6 +50,8 @@
4650
<NamedLayer>
4751
<se:Name>TN.AirTransportNetwork.AirLink</se:Name>
4852
<UserStyle>
53+
<se:Name>inspire_common:DEFAULT</se:Name>
54+
<se:IsDefault>true</se:IsDefault>
4955
<se:FeatureTypeStyle>
5056
<se:Rule>
5157
<se:Name>myclass4</se:Name>

msautotest/wxs/expected/wms_inspire_scenario1_styles130_roadlink.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<NamedLayer>
33
<se:Name>TN.RoadTransportNetwork.RoadLink</se:Name>
44
<UserStyle>
5+
<se:Name>inspire_common:DEFAULT</se:Name>
6+
<se:IsDefault>true</se:IsDefault>
57
<se:FeatureTypeStyle>
68
<se:Rule>
79
<se:Name>myclass1</se:Name>

msautotest/wxs/expected/wms_inspire_scenario1_styles130_transportlink.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<NamedLayer>
33
<se:Name>TN.RailTransportNetwork.RailwayLink</se:Name>
44
<UserStyle>
5+
<se:Name>inspire_common:DEFAULT</se:Name>
6+
<se:IsDefault>true</se:IsDefault>
57
<se:FeatureTypeStyle>
68
<se:Rule>
79
<se:Name>myclass3</se:Name>
@@ -19,6 +21,8 @@
1921
<NamedLayer>
2022
<se:Name>TN.AirTransportNetwork.AirLink</se:Name>
2123
<UserStyle>
24+
<se:Name>inspire_common:DEFAULT</se:Name>
25+
<se:IsDefault>true</se:IsDefault>
2226
<se:FeatureTypeStyle>
2327
<se:Rule>
2428
<se:Name>myclass4</se:Name>

msautotest/wxs/expected/wms_inspire_scenario2_styles130_airlink.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<NamedLayer>
33
<se:Name>TN.AirTransportNetwork.AirLink</se:Name>
44
<UserStyle>
5+
<se:Name>inspire_common:DEFAULT</se:Name>
6+
<se:IsDefault>true</se:IsDefault>
57
<se:FeatureTypeStyle>
68
<se:Rule>
79
<se:Name>myclass4</se:Name>

msautotest/wxs/expected/wms_inspire_scenario2_styles130_roadarea.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<NamedLayer>
33
<se:Name>TN.RoadTransportNetwork.RoadLink</se:Name>
44
<UserStyle>
5+
<se:Name>inspire_common:DEFAULT</se:Name>
6+
<se:IsDefault>true</se:IsDefault>
57
<se:FeatureTypeStyle>
68
<se:Rule>
79
<se:Name>myclass1</se:Name>
@@ -29,6 +31,8 @@
2931
<NamedLayer>
3032
<se:Name>TN.RailTransportNetwork.RailwayLink</se:Name>
3133
<UserStyle>
34+
<se:Name>inspire_common:DEFAULT</se:Name>
35+
<se:IsDefault>true</se:IsDefault>
3236
<se:FeatureTypeStyle>
3337
<se:Rule>
3438
<se:Name>myclass3</se:Name>
@@ -46,6 +50,8 @@
4650
<NamedLayer>
4751
<se:Name>TN.AirTransportNetwork.AirLink</se:Name>
4852
<UserStyle>
53+
<se:Name>inspire_common:DEFAULT</se:Name>
54+
<se:IsDefault>true</se:IsDefault>
4955
<se:FeatureTypeStyle>
5056
<se:Rule>
5157
<se:Name>myclass4</se:Name>

msautotest/wxs/expected/wms_inspire_scenario2_styles130_roadlink.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<NamedLayer>
33
<se:Name>TN.RoadTransportNetwork.RoadLink</se:Name>
44
<UserStyle>
5+
<se:Name>inspire_common:DEFAULT</se:Name>
6+
<se:IsDefault>true</se:IsDefault>
57
<se:FeatureTypeStyle>
68
<se:Rule>
79
<se:Name>myclass1</se:Name>

0 commit comments

Comments
 (0)