使用Java基于Geotools的SLD文件編程式創建與磁盤生成實戰

前言

????????在地理信息系統(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.pswp.cn/web/76470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76470.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kubernetes》》k8s》》Service

Kubernetes 中的 Service 是用于暴露應用服務的核心抽象&#xff0c;為 Pod 提供穩定的訪問入口、負載均衡和服務發現機制。Service在Kubernetes中代表了一組Pod的邏輯集合&#xff0c;通過創建一個Service&#xff0c;可以為一組具有相同功能的容器應用提供一個統一的入口地址…

【HDFS】EC重構過程中的校驗功能:DecodingValidator

一、動機 DecodingValidator是在HDFS-15759中引入的一個用于校驗EC數據重構正確性的組件。 先說下引入DecodingValidator的動機,據很多已知的ISSUE(如HDFS-14768, HDFS-15186, HDFS-15240,這些目前都已經fix了)反饋, EC在重構的時候可能會有各種各樣的問題,導致數據錯誤…

現代c++獲取linux系統架構

現代c獲取linux系統架構 前言一、使用命令獲取系統架構二、使用c代碼獲取系統架構三、驗證四、總結 前言 本文介紹一種使用c獲取linux系統架構的方法。 一、使用命令獲取系統架構 linux系統中可以使用arch或者uname -m命令來獲取當前系統架構&#xff0c;如下圖所示 archuna…

didFinishLaunching 與「主線程首次 idle」, 哪個是更優的啟動結束時間點 ?

結論先行 在這兩個候選時間點里—— application:didFinishLaunchingWithOptions: 執行結束主線程第一次進入 idle&#xff08;RunLoop kCFRunLoopBeforeWaiting&#xff09; 若你只能二選一&#xff0c;以「主線程首次 idle」作為 啟動結束 更合理。它比 didFinishLaunchin…

Vue3 + TypeScript中defineEmits 類型定義解析

TypeScript 中 Vue 3 的 defineEmits 函數的類型定義&#xff0c;用于聲明組件可以觸發的事件。以下是分步解釋&#xff1a; 1. 泛型定義 ts <"closeDialog" | "getApplySampleAndItemX"> 作用&#xff1a;定義允許的事件名稱集合&#xff0c;即組…

樹莓派超全系列教程文檔--(34)樹莓派配置GPIO

配置GPIO GPIO控制gpio 文章來源&#xff1a; http://raspberry.dns8844.cn/documentation 原文網址 GPIO控制 gpio 通過 gpio 指令&#xff0c;可以在啟動時將 GPIO 引腳設置為特定模式和值&#xff0c;而以前需要自定義 dt-blob.bin 文件。每一行都對一組引腳應用相同的設…

AladdinEdu(H卡GPU算力平臺)使用教程: 1)注冊與開通流程 2)插件使用流程

一、注冊與開通流程 首先進入AladdinEdu官網&#xff1a;AladdinEdu-同學們用得起的H卡算力平臺-高效做AI就上Aladdin 完成注冊&#xff0c;并進行學生認證&#xff1a;學生認證賬戶&#xff0c;認證期間享受教育優惠價。 登錄官網進入控制臺 二、插件使用流程 VScode中…

精益數據分析(6/126):深入理解精益分析的核心要點

精益數據分析&#xff08;6/126&#xff09;&#xff1a;深入理解精益分析的核心要點 在創業和數據驅動的時代浪潮中&#xff0c;我們都在不斷探索如何更好地利用數據推動業務發展。我希望通過和大家分享對《精益數據分析》的學習心得&#xff0c;一起在這個充滿挑戰和機遇的領…

2.深入剖析 Rust+Axum 類型安全路由系統

摘要 詳細解讀 RustAxum 路由系統的關鍵設計原理&#xff0c;涵蓋基于 Rust 類型系統的路由匹配機制、動態路徑參數與正則表達式驗證以及嵌套路由與模塊化組織等多種特性。 一、引言 在現代 Web 開發中&#xff0c;路由系統是構建 Web 應用的核心組件之一&#xff0c;它負責…

運籌學之模擬退火

目錄 一、歷史二、精髓思想三、案例與代碼實現 一、歷史 問&#xff1a;誰在什么時候提出模擬退火&#xff1f;答&#xff1a;模擬退火算法&#xff08;Simulated Annealing&#xff0c;SA&#xff09;是由斯圖爾特柯爾斯基&#xff08;Scott Kirkpatrick&#xff09; 等人在 …

android測試依賴

Android 項目中常用的測試相關庫 1. androidx.arch.core:core-testing:2.2.0 作用&#xff1a; 提供與 Android Architecture Components&#xff08;如 LiveData、ViewModel&#xff09;相關的測試工具。主要用于測試基于 LiveData 的異步操作。 常見功能&#xff1a; 即時…

stack,queue和priority_queue

1. stack 1.1 stack 的介紹 棧是一種容器適配器&#xff0c;專門設計用于LIFO環境&#xff08;后進先出&#xff09;&#xff0c;其中元素僅從容器的一端插入和提取。 容器適配器&#xff0c;也就是使用特定容器類的封裝對象作為其底層容器&#xff0c;提供一組特定的成員函…

MinnowBoard MAX單板UEFI BIOS代碼編譯教程

此教程用于UEFI EDK2代碼的研究&#xff0c;雖然EDK2框架代碼開源&#xff0c;但是都是在模擬器上跑仿真&#xff0c;差點意思&#xff0c;搞過嵌入式的應該有一個共識&#xff0c;是騾子是馬&#xff0c;你得把板子點亮啊。MinnowBoard MAX單板是intel10多年前發布的軟硬件全部…

AI Transformers 架構體系 權重文件類型 safeterson和gguf格式轉換【2-1】

模型權重文件&#xff1a;存儲訓練好的模型參數,也就是w和b&#xff0c;是模型推理和微調的基礎 .pt、.ckpt、.safetensors、gguf 配置文件&#xff1a;確保模型架構的一致性&#xff0c;使得權重文件能夠正確加載 config.json、generation_config.json 詞匯表文件&#xff1a;…

K8S微服務部署及模擬故障觀測

概述 本文介紹了如何在 Kubernetes (K8S) 集群中部署微服務&#xff0c;并模擬常見的故障場景&#xff08;如 Pod 故障、節點故障、網絡故障&#xff09;以測試系統的容錯能力。通過本實驗&#xff0c;了解 Kubernetes 的自動恢復機制以及如何通過監控和日志分析快速定位和解決…

OpenStack Yoga版安裝筆記(23)Swift安裝

一、官方文檔 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、環境準備 之前的實驗&#xff0c;已經有controller, compute1, block1節點&#xff0c;并已經完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安裝。 此處新增…

06-libVLC的視頻播放器:推流RTMP

創建媒體對象 libvlc_media_t* m = libvlc_media_new_path(m_pInstance, inputPath.toStdString().c_str()); if (!m) return -1; // 創建失敗返回錯誤 libvlc_media_new_path:根據文件路徑創建媒體對象。注意:toStdString().c_str() 在Qt中可能存在臨時字符串析構問題,建議…

少兒編程路線規劃

少兒編程路線規劃—一文寫明白 現在有很多的編程機構&#xff0c;五花八門的。我有幸也見識到了大家的營銷策略。這些策略有黑有白吧&#xff0c;從業幾年&#xff0c;沉淀下來一些客戶角度的干貨&#xff0c;分享給大家。 如果是想以很遠很遠的就業為目的&#xff0c;畢業就…

ios app的ipa文件提交最簡單的方法

ipa文件是ios的app打包后生成的二級制文件&#xff0c;在上架app store connect或做testflight測試的時候&#xff0c;它提示我們需要使用xcode、transporter或xcode命令行等方式來上傳。 而xcode、transporter或xcode命令行的安裝都需要使用mac電腦&#xff0c;假如沒有mac電…

怎么查看LLM Transformer 架構進行并行計算和設備映射

怎么查看LLM Transformer 架構進行并行計算和設備映射 num_hidden_layers = model.config.num_hidden_layers print(num_hidden_layers) print(model) LLM(大語言模型)通常是基于 Transformer 架構 構建的,它由多個模塊化的層(Layer)堆疊組成,每個層都有其獨特的作用。…