Skip to content

Commit a48f765

Browse files
committed
Add support for exporting SLDs with NamedLayer.
1 parent 7125dd6 commit a48f765

2 files changed

Lines changed: 46 additions & 4 deletions

File tree

src/main/groovy/geoscript/style/io/SLDWriter.groovy

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package geoscript.style.io
22

33
import geoscript.style.Style
44
import org.geotools.factory.CommonFactoryFinder
5+
import org.geotools.styling.NamedLayer
56
import org.geotools.xml.styling.SLDTransformer
67
import org.geotools.styling.StyleFactory
78
import org.geotools.styling.StyledLayerDescriptor
@@ -27,6 +28,7 @@ class SLDWriter implements Writer {
2728
* Write the Style to the OutputStream
2829
* @param options Optional named parameters
2930
* <ol>
31+
* <li>type = Whether to export UserLayer (default) or NamedLayer </li>
3032
* <li>exportDefaultValues = Whether to export default values or not (defaults to false) </li>
3133
* <li>indentation = The number of spaces to use when indenting (defaults to 2) </li>
3234
* </ol>
@@ -35,10 +37,16 @@ class SLDWriter implements Writer {
3537
*/
3638
void write(Map options = [:], Style style, OutputStream out) {
3739
StyleFactory sf = CommonFactoryFinder.getStyleFactory(null)
38-
UserLayer userLayer = sf.createUserLayer()
39-
userLayer.addUserStyle(style.gtStyle)
4040
StyledLayerDescriptor sld = sf.createStyledLayerDescriptor()
41-
sld.addStyledLayer(userLayer)
41+
if (options.get("type", "UserLayer").equalsIgnoreCase("UserLayer")) {
42+
UserLayer userLayer = sf.createUserLayer()
43+
userLayer.addUserStyle(style.gtStyle)
44+
sld.addStyledLayer(userLayer)
45+
} else {
46+
NamedLayer namedLayer = sf.createNamedLayer()
47+
namedLayer.addStyle(style.gtStyle)
48+
sld.addStyledLayer(namedLayer)
49+
}
4250
def transformer = new SLDTransformer()
4351
transformer.exportDefaultValues = options.get("exportDefaultValues", false)
4452
if (format) {

src/test/groovy/geoscript/style/io/SLDWriterTestCase.groovy

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class SLDWriterTestCase {
1616

1717
@Rule
1818
public TemporaryFolder folder = new TemporaryFolder()
19-
19+
2020
private String NEW_LINE = System.getProperty("line.separator")
2121

2222
private String expectedSld = """<?xml version="1.0" encoding="UTF-8"?><sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
@@ -115,4 +115,38 @@ class SLDWriterTestCase {
115115
</sld:StyledLayerDescriptor>"""
116116
AssertUtil.assertStringsEqual expected, sld, removeXmlNS: true, trim: true
117117
}
118+
119+
120+
@Test void writeNamedLayerToOutputStream() {
121+
Symbolizer sym = new Fill("wheat") + new Stroke("brown")
122+
SLDWriter writer = new SLDWriter();
123+
ByteArrayOutputStream out = new ByteArrayOutputStream()
124+
writer.write(sym, out, type: "NamedLayer")
125+
String sld = out.toString().trim()
126+
assertNotNull sld
127+
assertTrue sld.length() > 0
128+
AssertUtil.assertStringsEqual """<?xml version="1.0" encoding="UTF-8"?><sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0">
129+
<sld:NamedLayer>
130+
<sld:Name/>
131+
<sld:UserStyle>
132+
<sld:Name>Default Styler</sld:Name>
133+
<sld:FeatureTypeStyle>
134+
<sld:Name>name</sld:Name>
135+
<sld:Rule>
136+
<sld:PolygonSymbolizer>
137+
<sld:Fill>
138+
<sld:CssParameter name="fill">#f5deb3</sld:CssParameter>
139+
</sld:Fill>
140+
</sld:PolygonSymbolizer>
141+
<sld:LineSymbolizer>
142+
<sld:Stroke>
143+
<sld:CssParameter name="stroke">#a52a2a</sld:CssParameter>
144+
</sld:Stroke>
145+
</sld:LineSymbolizer>
146+
</sld:Rule>
147+
</sld:FeatureTypeStyle>
148+
</sld:UserStyle>
149+
</sld:NamedLayer>
150+
</sld:StyledLayerDescriptor>""", sld, removeXmlNS: true, trim: true
151+
}
118152
}

0 commit comments

Comments
 (0)