首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GeoTools中的编码器不适用于SLD

GeoTools中的编码器不适用于SLD
EN

Stack Overflow用户
提问于 2018-11-28 14:10:58
回答 1查看 140关注 0票数 1

我正在尝试使用GeoTools为我正在开发的应用程序动态编写SLD。但是,尽管我可能会尝试,我不能让SLD输出。

从如下所示的SLD开始:

代码语言:javascript
复制
<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>

我使用以下代码:

代码语言:javascript
复制
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是空的:

代码语言:javascript
复制
<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"/>

我做错了什么?

(按照这里的指南:http://docs.geotools.org/latest/userguide/library/xml/style.html#encoder,GeoTools的版本是20.1 )

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2018-11-29 16:48:55

如果您有版本1.1.0SLD(或者更准确地说是SE)文档,并且使用import org.geotools.sld.v1_1.SLD对象传递给编码器,那么您的方法将会起作用。但是,您有一个1.0.0SLD版本的文档,因此需要使用SLDTransformer类来输出样式对象。所以就像这样:

代码语言:javascript
复制
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(sld, bos);
String style = bos.toString();
System.out.println(style);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53513177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档