gpt4 book ai didi

java - GeoTools 中的编码器不适用于 SLD

转载 作者:行者123 更新时间:2023-11-30 05:53:40 28 4
gpt4 key购买 nike

我正在尝试使用 GeoTools 为我正在开发的应用程序即时编写 SLD。但尽我所能,我无法输出 SLD。

从如下所示的 SLD 开始:

<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>named_layer</Name>
<UserStyle>
<Name>style</Name>
<IsDefault>true</IsDefault>
<FeatureTypeStyle>
<Rule>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#00aa00</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">0.15</CssParameter>
</Stroke>
</Mark>
<Size>8</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>

我使用以下代码:

package com.example.sld;

import org.geotools.sld.SLDConfiguration;
import org.geotools.sld.bindings.SLD;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.xml.Configuration;
import org.geotools.xml.Encoder;
import org.geotools.xml.Parser;
import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;

public class TestStyle {

private String style;

public TestStyle() {

Configuration config = new SLDConfiguration();
Parser parser = new Parser(config);

InputStream is = getClass().getResourceAsStream("test-sld.xml");

StyledLayerDescriptor sld = null;
try {
sld = (StyledLayerDescriptor) parser.parse(is);
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

Configuration configuration = new SLDConfiguration();
Encoder encoder = new Encoder(configuration);
encoder.setOmitXMLDeclaration(true);
try {
this.style = encoder.encodeAsString(sld, SLD.STYLEDLAYERDESCRIPTOR);
} catch (IOException e) {
e.printStackTrace();
}

this.style = new String();

}
}

SLD 解析正常。我可以在调试器中检查它的结构并且它被正确读取。但在编码时,生成的 SLD 是空的:

<sld:StyledLayerDescriptor xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ogc="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld" xmlns:xlink="http://www.w3.org/1999/xlink"/>

我做错了什么?

(GeoTools 版本为 20.1,请按照此处的指南操作:http://docs.geotools.org/latest/userguide/library/xml/style.html#encoder)

提前致谢

最佳答案

如果您有版本 1.1.0 SLD(或更准确地说是 SE)文档,并且使用 import org.geotools.sld.v1_1.SLD 对象来传递,则您的方法将有效到编码器。但是您有 1.0.0 版本的 SLD 文档,因此您需要使用 SLDTransformer类来输出您的样式对象。所以类似:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(sld, bos);
String style = bos.toString();
System.out.println(style);

关于java - GeoTools 中的编码器不适用于 SLD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53513177/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com