Skip to content

Commit 5173216

Browse files
committed
Add SLD support for pentagon
1 parent 32116b5 commit 5173216

5 files changed

Lines changed: 103 additions & 10 deletions

File tree

msautotest/sld/data/pentagon.sld

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<StyledLayerDescriptor version="1.1.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:se="http://www.opengis.net/se" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2+
<NamedLayer>
3+
<se:Name>pentagon</se:Name>
4+
<UserStyle>
5+
<se:FeatureTypeStyle>
6+
<se:Rule>
7+
<se:PointSymbolizer>
8+
<se:Graphic>
9+
<se:Mark>
10+
<se:WellKnownName>pentagon</se:WellKnownName>
11+
<se:Fill>
12+
<se:SvgParameter name="fill">#156082</se:SvgParameter>
13+
</se:Fill>
14+
<se:Stroke>
15+
<se:SvgParameter name="stroke">#ff0000</se:SvgParameter>
16+
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
17+
</se:Stroke>
18+
</se:Mark>
19+
<se:Size>16</se:Size>
20+
</se:Graphic>
21+
</se:PointSymbolizer>
22+
</se:Rule>
23+
</se:FeatureTypeStyle>
24+
</UserStyle>
25+
</NamedLayer>
26+
</StyledLayerDescriptor>
27+
1.04 KB
Loading

msautotest/sld/expected/wms_getstyles_pentagon.xml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,19 @@
55
<se:FeatureTypeStyle>
66
<se:Rule>
77
<se:PointSymbolizer>
8-
<!-- unsupported symbol for style -->
8+
<se:Graphic>
9+
<se:Mark>
10+
<se:WellKnownName>pentagon</se:WellKnownName>
11+
<se:Fill>
12+
<se:SvgParameter name="fill">#156082</se:SvgParameter>
13+
</se:Fill>
14+
<se:Stroke>
15+
<se:SvgParameter name="stroke">#ff0000</se:SvgParameter>
16+
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
17+
</se:Stroke>
18+
</se:Mark>
19+
<se:Size>16</se:Size>
20+
</se:Graphic>
921
</se:PointSymbolizer>
1022
</se:Rule>
1123
</se:FeatureTypeStyle>

msautotest/sld/getstyles_complex.map

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
# RUN_PARMS: wms_getstyles_pentagon.xml [MAPSERV] QUERY_STRING="map=[MAPFILE]&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetStyles&layers=pentagon" > [RESULT_DEMIME]
1616

17+
# RUN_PARMS: pentagon.png [MAPSERV] QUERY_STRING="map=[MAPFILE]&SERVICE=WMS&VERSION=1.3&REQUEST=GetMap&CRS=EPSG:4326&BBOX=-10,-10,10,10&FORMAT=image/png&WIDTH=200&HEIGHT=200&LAYERS=pentagon_rendered&STYLES=" > [RESULT_DEMIME]
18+
1719
MAP
1820
NAME TEST_SLD_COMPLEX
1921
SIZE 300 300
@@ -43,12 +45,12 @@ MAP
4345
TYPE VECTOR
4446
FILLED TRUE
4547
POINTS
46-
0.206 0
47-
0.794 0
48-
1 0.588
49-
0.5 1
50-
0 0.588
51-
0.206 0
48+
0.5 0
49+
1 0.38
50+
0.81 1
51+
0.19 1
52+
0 0.38
53+
0.5 0
5254
END
5355
END
5456

@@ -239,4 +241,15 @@ MAP
239241
END
240242
END
241243

244+
LAYER
245+
NAME "pentagon_rendered"
246+
TYPE POINT
247+
FEATURE
248+
POINTS
249+
0 0
250+
END
251+
END
252+
STYLEITEM "sld://data/pentagon.sld"
253+
END
254+
242255
END

src/mapogcsld.cpp

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ static inline void IGUR_sizet(size_t ignored) {
5656
#define SLD_MARK_SYMBOL_X "sld_mark_symbol_x"
5757
#define SLD_MARK_SYMBOL_X_FILLED "sld_mark_symbol_x_filled"
5858

59-
// extended WellKnownNames
59+
// extended WellKnownNames not part of SLD 1.1.0
60+
#define SLD_MARK_SYMBOL_PENTAGON "sld_mark_symbol_pentagon"
61+
#define SLD_MARK_SYMBOL_PENTAGON_FILLED "sld_mark_symbol_pentagon_filled"
6062

6163
/************************************************************************/
6264
/* msSLDApplySLDURL */
@@ -2141,6 +2143,13 @@ int msSLDGetMarkSymbol(mapObj *map, char *pszSymbolName, int bFilled) {
21412143
else
21422144
nSymbolId =
21432145
msGetSymbolIndex(&map->symbolset, SLD_MARK_SYMBOL_X, MS_FALSE);
2146+
} else if (strcasecmp(pszSymbolName, "pentagon") == 0) {
2147+
if (bFilled)
2148+
nSymbolId = msGetSymbolIndex(&map->symbolset,
2149+
SLD_MARK_SYMBOL_PENTAGON_FILLED, MS_FALSE);
2150+
else
2151+
nSymbolId =
2152+
msGetSymbolIndex(&map->symbolset, SLD_MARK_SYMBOL_PENTAGON, MS_FALSE);
21442153
} else {
21452154
nSymbolId = msGetSymbolIndex(&map->symbolset, pszSymbolName, MS_FALSE);
21462155
}
@@ -2312,6 +2321,34 @@ int msSLDGetMarkSymbol(mapObj *map, char *pszSymbolName, int bFilled) {
23122321
psSymbol->points[psSymbol->numpoints].y = 0;
23132322
psSymbol->numpoints++;
23142323
}
2324+
// extended WellKnownNames
2325+
else if (strcasecmp(pszSymbolName, "pentagon") == 0) {
2326+
if (bFilled)
2327+
psSymbol->name = msStrdup(SLD_MARK_SYMBOL_PENTAGON_FILLED);
2328+
else
2329+
psSymbol->name = msStrdup(SLD_MARK_SYMBOL_PENTAGON);
2330+
psSymbol->type = MS_SYMBOL_VECTOR;
2331+
if (bFilled)
2332+
psSymbol->filled = MS_TRUE;
2333+
psSymbol->points[psSymbol->numpoints].x = 0.5;
2334+
psSymbol->points[psSymbol->numpoints].y = 0;
2335+
psSymbol->numpoints++;
2336+
psSymbol->points[psSymbol->numpoints].x = 1;
2337+
psSymbol->points[psSymbol->numpoints].y = 0.38;
2338+
psSymbol->numpoints++;
2339+
psSymbol->points[psSymbol->numpoints].x = 0.81;
2340+
psSymbol->points[psSymbol->numpoints].y = 1;
2341+
psSymbol->numpoints++;
2342+
psSymbol->points[psSymbol->numpoints].x = 0.19;
2343+
psSymbol->points[psSymbol->numpoints].y = 1;
2344+
psSymbol->numpoints++;
2345+
psSymbol->points[psSymbol->numpoints].x = 0;
2346+
psSymbol->points[psSymbol->numpoints].y = 0.38;
2347+
psSymbol->numpoints++;
2348+
psSymbol->points[psSymbol->numpoints].x = 0.5;
2349+
psSymbol->points[psSymbol->numpoints].y = 0;
2350+
psSymbol->numpoints++;
2351+
}
23152352
}
23162353

23172354
return nSymbolId;
@@ -3545,7 +3582,8 @@ char *msSLDGetGraphicSLD(styleObj *psStyle, layerObj *psLayer,
35453582
strcasecmp(psSymbol->name, "triangle") == 0 ||
35463583
strcasecmp(psSymbol->name, "star") == 0 ||
35473584
strcasecmp(psSymbol->name, "cross") == 0 ||
3548-
strcasecmp(psSymbol->name, "x") == 0)
3585+
strcasecmp(psSymbol->name, "x") == 0 ||
3586+
strcasecmp(psSymbol->name, "pentagon") == 0)
35493587
pszSymbolName = msStrdup(psSymbol->name);
35503588
else if (strncasecmp(psSymbol->name, "sld_mark_symbol_square", 22) ==
35513589
0)
@@ -3562,7 +3600,10 @@ char *msSLDGetGraphicSLD(styleObj *psStyle, layerObj *psLayer,
35623600
0)
35633601
pszSymbolName = msStrdup("cross");
35643602
else if (strncasecmp(psSymbol->name, "sld_mark_symbol_x", 17) == 0)
3565-
pszSymbolName = msStrdup("X");
3603+
pszSymbolName = msStrdup("x");
3604+
else if (strncasecmp(psSymbol->name, "sld_mark_symbol_pentagon",
3605+
24) == 0)
3606+
pszSymbolName = msStrdup("pentagon");
35663607

35673608
if (pszSymbolName) {
35683609
colorObj sTmpFillColor = {128, 128, 128, 255};

0 commit comments

Comments
 (0)