使用Java基于Geotools的SLD文件编程式创建与磁盘生成实战

news2025/4/20 5:49:37

前言

        在地理信息系统(GIS)领域,地图的可视化呈现至关重要,而样式定义语言(SLD)文件为地图元素的样式配置提供了强大的支持。SLD 能够精确地定义地图图层中各类要素(如点、线、面、文本等)的颜色、大小、填充图案、边框样式等外观特征,使得地图不仅能够传递空间数据信息,还能以符合用户需求和业务场景的美观、直观形式展示出来。

        Java 作为一种广泛应用于企业级开发的编程语言,在 GIS 软件开发中也占据着重要地位。Geotools 作为开源的 Java GIS 工具库,为地理数据处理、地图渲染等提供了丰富的功能组件。借助 Geotools,开发者可以便捷地操作空间数据,并基于其丰富的 API 进行地图应用的定制开发。在实际项目中,常常需要根据不同的业务逻辑、数据状态或用户配置动态生成 SLD 文件,以实现地图样式的灵活调整与个性化定制。例如,一个环境监测系统可能需要根据实时监测数据的污染程度动态改变地图上对应区域的填充颜色,或者一个交通规划应用需要依据交通流量状况动态调整道路线条的宽度和颜色深浅等。

        本文将深入探讨如何使用 Java 语言基于 Geotools 库,通过编程的方式创建 SLD 文件,并将其生成到磁盘上,以便后续地图渲染引擎能够加载并应用这些样式配置。我们将详细阐述 SLD 文件的结构组成,解析 Geotools 中与 SLD 操作相关的类和接口,通过代码示例展示如何构建点、线、面等不同几何类型的样式规则,以及如何将这些规则组合成完整的 SLD 文件内容,并最终实现在磁盘上的存储,为 GIS 应用实现灵活多变的地图样式配置提供实战技术指导,帮助开发者掌握这一关键技能,提升地理信息系统的可视化质量和用户体验,满足复杂多样的业务需求,在快速变化的应用场景中高效地调整地图展示效果,增强系统对数据动态变化的响应能力,拓展基于 Java 和 Geotools 的 GIS 开发技术边界,为相关领域的项目实践提供有力的技术支撑和参考范例。

一、样式生成相关类

        为了让大家在Java中使用Geotools来创建SLD文件有一个比较全面的了解,这里我们将采用OOP的方法来进行讲解,分别从相关的类图和程序调用的时序图两个方面来讲解。

1、相关类图

        为了实现从PostGIS数据库中查询空间数据,将空间数据中解析Geometry信息,并且使用程序根据属性信息提取出相应的SLD文件,在程序中可能需要依赖的相关类如下:

序号类名作用
1org.geotools.styling.StyleFactory样式工厂
2org.geotools.styling.FilterFactory2升级版样式工厂
3org.geotools.xml.styling.SLDTransformersld转换器
4org.geotools.data.DataStoreFinder数据源查找器
5org.geotools.data.FeatureSource要素资源
6org.geotools.data.QueryCQL查询对象
7org.geotools.styling.Stylestyle样式对象
8org.geotools.styling.PolygonSymbolizer面状标注

        以上是本实例中可能涉及的相关类,仅将关键的类对象在此展示,其它对象暂不列出,感兴趣的朋友可以在代码中看到。

2、程序时序图

        与类图相似,这里仅描述关键的SLD样式文件的生成步骤,更完整的类信息,可以在评论区留言交流。 以上就是相关的类图和时序图示意。

二、编程式生成SLD实战

        在了解了SLD的类图和时序图之后,下面我们来深入讲解如何使用编程的方法来实现SLD的生成与保存到本地磁盘中。

1、SLD生成

        根据Style信息生成SLD的关键方法如下,这是标准的代码生成:

/**
* - 将生成的Style转换成sld文件进行磁盘输出
* @param style
* @throws TransformerException
* @throws IOException
*/
public static void generateSld(Style style) throws TransformerException, IOException {
	SLDTransformer transformer = new SLDTransformer();
    transformer.setIndentation(4);
    transformer.setNamespaceDeclarationEnabled(true);
    transformer.setOmitXMLDeclaration(false);
    String sldXml = transformer.transform(style);
    System.out.println(sldXml);
}

        这里主要使用的类就是SLDTransformer对象,通过这个类就可以实现SLD的生成,在设置好相应的模板和属性之后,调用transform方法就可以实现将SLD文件进行字符串的格式化输出,在程序的控制台中可以看到以下信息:

2、SLD回写磁盘结果

        在生成了SLD的信息之后,如何将字符串保存到本地磁盘呢?将生成好的文件发给别人就可以实现样式文件的共享,可以有效的提高制图的效率。实现将文本的SLD回写磁盘的方法很简单,在上面的生成方法中加入以下代码:

/**
* - 将生成的Style转换成sld文件进行磁盘输出
* @param style
* @throws TransformerException
* @throws IOException
*/
public static void generateSld(Style style) throws TransformerException, IOException {
	SLDTransformer transformer = new SLDTransformer();
    transformer.setIndentation(4);
    transformer.setNamespaceDeclarationEnabled(true);
    transformer.setOmitXMLDeclaration(false);
    String sldXml = transformer.transform(style);
    System.out.println(sldXml);
    // 保存到文件
    Files.write(Paths.get("D:/hubei_style.sld"), sldXml.getBytes());
    System.out.println("SLD文件已成功生成!");
}

        接下来,我们在本地磁盘中来看一下是否成功的生成sld文件,到电脑的磁盘中看一下,

        在本次的磁盘中可以看到,预期的sld文件已经成功的生成,在文本编辑器中看一下它的主要内容,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<sld:UserStyle 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">
    <sld:Name>Default Styler</sld:Name>
    <sld:FeatureTypeStyle>
        <sld:Name>name</sld:Name>
        <sld:Rule>
            <sld:Name>仙桃市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>仙桃市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#E62E2E</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>十堰市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>十堰市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#2E63E6</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>咸宁市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>咸宁市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#99E62E</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>天门市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>天门市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#E62ECF</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>孝感市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>孝感市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#2EE6C7</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>宜昌市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>宜昌市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#E6912E</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>恩施土家族苗族自治州</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>恩施土家族苗族自治州</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#5C2EE6</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>武汉市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>武汉市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#36E62E</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>潜江市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>潜江市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#E62E6B</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>神农架林区</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>神农架林区</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#2EA1E6</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>荆州市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>荆州市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#D6E62E</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>荆门市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>荆门市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#BF2EE6</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>襄阳市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>襄阳市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#2EE689</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>鄂州市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>鄂州市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#E6542E</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>随州市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>随州市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#2E3EE6</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>黄冈市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>黄冈市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#73E62E</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
        <sld:Rule>
            <sld:Name>黄石市</sld:Name>
            <ogc:Filter>
                <ogc:PropertyIsEqualTo>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                    <ogc:Literal>黄石市</ogc:Literal>
                </ogc:PropertyIsEqualTo>
            </ogc:Filter>
            <sld:PolygonSymbolizer>
                <sld:Fill>
                    <sld:CssParameter name="fill">#E62EA9</sld:CssParameter>
                    <sld:CssParameter name="fill-opacity">0.8</sld:CssParameter>
                </sld:Fill>
                <sld:Stroke>
                    <sld:CssParameter name="stroke">#404040</sld:CssParameter>
                    <sld:CssParameter name="stroke-width">0.8</sld:CssParameter>
                </sld:Stroke>
            </sld:PolygonSymbolizer>
            <sld:TextSymbolizer>
                <sld:Label>
                    <ogc:PropertyName>city_name</ogc:PropertyName>
                </sld:Label>
                <sld:Font>
                    <sld:CssParameter name="font-family">楷体</sld:CssParameter>
                    <sld:CssParameter name="font-size">22</sld:CssParameter>
                    <sld:CssParameter name="font-style">Regular</sld:CssParameter>
                    <sld:CssParameter name="font-weight">normal</sld:CssParameter>
                </sld:Font>
                <sld:LabelPlacement>
                    <sld:PointPlacement>
                        <sld:AnchorPoint>
                            <sld:AnchorPointX>0.5</sld:AnchorPointX>
                            <sld:AnchorPointY>0.5</sld:AnchorPointY>
                        </sld:AnchorPoint>
                    </sld:PointPlacement>
                </sld:LabelPlacement>
                <sld:Fill>
                    <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
                </sld:Fill>
            </sld:TextSymbolizer>
        </sld:Rule>
    </sld:FeatureTypeStyle>
</sld:UserStyle>

        以上仅是一个示例的SLD文件,大家可以根据自己的样式编辑需要来动态设置,然后使用Geotools来进行效果的浏览,也可以将结果放在Qgis中进行数据渲染。

三、总结

        以上就是本文的主要内容,本文将深入探讨如何使用 Java 语言基于 Geotools 库,通过编程的方式创建 SLD 文件,并将其生成到磁盘上,以便后续地图渲染引擎能够加载并应用这些样式配置。我们将详细阐述 SLD 文件的结构组成,解析 Geotools 中与 SLD 操作相关的类和接口,通过代码示例展示如何构建点、线、面等不同几何类型的样式规则,以及如何将这些规则组合成完整的 SLD 文件内容,并最终实现在磁盘上的存储,为 GIS 应用实现灵活多变的地图样式配置提供实战技术指导。行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 命令速查手册

听说用美图可以钓读者&#xff1f; 一、基础操作核心命令 1. 仓库初始化与克隆 命令作用示例git init创建新仓库git init my-projectgit clone克隆远程仓库git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add关联远程仓库git re…

网络编程 - 4 ( TCP )

目录 TCP 流套接字编程 API 介绍 SeverSocket Socket 用 TCP 实现一个回显服务器 服务端 客户端 运行调试 第一个问题&#xff1a;PrintWriter 内置的缓冲区 - flush 刷新解决 第二个问题&#xff1a;上述代码中&#xff0c;需要进行 close 操作吗&#xff1f; 第三…

OSPF综合实验(HCIP)

1&#xff0c;R5为ISP&#xff0c;其上只能配置Ip地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过ppp协议获取&#xff0c;并进行chap认证 2&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3&#xff0c;所有设备均可访问R5的环回&…

真实波幅策略思路

该策略是一种基于ATR&#xff08;Average True Range&#xff09;指标的交易策略&#xff0c;主要用于期货市场中的日内交易。策略的核心思想是利用ATR指标来识别市场的波动范围&#xff0c;并结合均线过滤来确定买入和卖出的时机。 交易逻辑思维 1. 数据准备与初始化 - 集合竞…

leetcode 674. Longest Continuous Increasing Subsequence

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析明确并理解递推公式 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这是动态规划解决子序列问题的例子。与第300题的唯一区别就是&#…

STM32 外部中断EXTI

目录 外部中断基础知识 STM32外部中断框架 STM32外部中断机制框架 复用功能 重映射 中断嵌套控制器NVIC 外部中断按键控制LED灯 外部中断基础知识 STM32外部中断框架 中断的概念&#xff1a;在主程序运行过程中&#xff0c;出现了特点的中断触发条件&#xff0c;使得…

Linux:基础IO---动静态库

文章目录 1. 动静态库前置知识1.1 动静态库知识回顾1.2 什么是动静态库 2. 动静态库2.1 站在库的制作者的角度2.2 站在库的使用者的角度2.3 动态库是怎么被加载的&#xff08;原理&#xff09; 序&#xff1a;上一篇文章我们从认识到理解&#xff0c;从理解到实现场景&#xff…

深度学习-torch,全连接神经网路

3. 数据集加载案例 通过一些数据集的加载案例&#xff0c;真正了解数据类及数据加载器。 3.1 加载csv数据集 代码参考如下 import torch from torch.utils.data import Dataset, DataLoader import pandas as pd ​ ​ class MyCsvDataset(Dataset):def __init__(self, fil…

Codex CLI - 自然语言命令行界面

本文翻译整理自&#xff1a;https://github.com/microsoft/Codex-CLI 文章目录 一、关于 Codex CLI相关链接资源 二、安装系统要求安装步骤 三、基本使用1、基础操作2、多轮模式 四、命令参考五、提示工程与上下文文件自定义上下文 六、故障排查七、FAQ如何查询可用OpenAI引擎&…

实现窗口函数

java 实现窗口函数 public class SlidingWin {public static void main(String[] args) {SlidingWin slidingWin new SlidingWin();double v slidingWin.SlidWin(2);System.out.println(v);}public double SlidWin(int k){int [] array new int[]{2,4,5,6,9,10,12,23,1,3,8…

清华《数据挖掘算法与应用》K-means聚类算法

使用k均值聚类算法对表4.1中的数据进行聚类。代码参考P281。 创建一个名为 testSet.txt 的文本文件&#xff0c;将以下内容复制粘贴进去保存即可&#xff1a; 0 0 1 2 3 1 8 8 9 10 10 7 表4.1 # -*- coding: utf-8 -*- """ Created on Thu Apr 17 16:59:58 …

MATLAB - 小车倒立摆的非线性模型预测控制(NMPC)

系列文章目录 目录 系列文章目录 前言 一、摆锤/小车组件 二、系统方程 三、控制目标 四、控制结构 五、创建非线性 MPC 控制器 六、指定非线性设备模型 七、定义成本和约束 八、验证非线性 MPC 控制器 九、状态估计 十、MATLAB 中的闭环仿真 十一、使用 MATLAB 中…

HAL库配置RS485+DMA+空闲中断收发数据

前言&#xff1a; &#xff08;1&#xff09;DMA是单片机集成在芯片内部的一个数据搬运工&#xff0c;它可以代替单片机对数据进行传输、存储&#xff0c;节约CPU资源。一般应用场景&#xff0c;ADC多通道采集&#xff0c;串口收发&#xff08;频繁进入接收中断&#xff09;&a…

【java实现+4种变体完整例子】排序算法中【计数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是计数排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、计数排序基础实现 原理 通过统计每个元素的出现次数&#xff0c;按顺序累加得到每个元素的最终位置&#xff0c;并填充到结果数组中。 代码示…

嵌入式单片机开发 - Keil MDK 编译与烧录程序

Keil MDK 编译程序 1、Keil MDK 编译按钮 Build 按钮&#xff1a;重新编译整个工程的所有源文件&#xff0c;无论它们是否被修改过 Rebuild 按钮&#xff1a;仅编译修改过的文件及其依赖项&#xff0c;未修改的文件直接使用之前的编译结果 2、Keil MDK 编译结果 linking... …

裂项法、分式分解法——复杂分式的拆解

目录 一、裂项法 1. 核心思想 2. 适用场景 3. 步骤 4. 例题 二、分式分解 1. 核心思想 2. 适用场景 3. 步骤 4.例题 一、裂项法 1. 核心思想 将一项拆解为多项之差&#xff0c;使得在求和时中间项相互抵消&#xff0c;最终仅剩首尾少数项。 2. 适用场景 级数求和…

黑马点评秒杀优化

异步优化秒杀业务 回顾之前的内容黑马点评 秒杀优惠券集群下一人一单超卖问题-CSDN博客&#xff0c;为了处理并发情况下的线程安全和数据一致性的问题&#xff0c;我们已经完成了查询优惠券信息、判断秒杀是否开始和结束、检查库存、用户ID加锁、创建订单和扣减库存。 尽管之前…

JavaScript 的演变:2023-2025 年的新特性解析

随着Web技术的飞速发展&#xff0c;ECMAScript&#xff08;简称ES&#xff09;作为JavaScript的语言标准&#xff0c;也在不断进化。 本文将带你学习 ECMAScript 2023-2025 的新特性。 一、ECMAScript 2023 新特性 1.1 数组的扩展 Array.prototype.findLast()/Array.protot…

[Java · 初窥门径] Java 注释符

&#x1f31f; 想系统化学习 Java 编程&#xff1f;看看这个&#xff1a;[编程基础] Java 学习手册 0x01&#xff1a;Java 注释符简介 在编写程序时&#xff0c;为了使代码易于理解&#xff0c;通常会为代码加一些注释。Java 注释就是用通俗易懂的语言对代码进行描述或解释&a…

Docker环境下SpringBoot程序内存溢出(OOM)问题深度解析与实战调优

文章目录 一、问题背景与现象还原**1. 业务背景****2. 故障特征****3. 核心痛点****4. 解决目标** 二、核心矛盾点分析**1. JVM 与容器内存协同失效****2. 非堆内存泄漏****3. 容器内存分配策略缺陷** 三、系统性解决方案**1. Docker 容器配置**2. JVM参数优化&#xff08;容器…