GIS
[Geoserver] WMS 스타일 : 라벨 문자열 합치는 방법 ( feat. Function )
모찌바라기
2023. 8. 25. 12:27
728x90
반응형
Geoserver에서 라벨을 표현할 때, 컬럼 + 컬럼 또는 문자열 + 컬럼과 같이 문자열을 합쳐서
표현 해야 할 때가 있다.
그럴때 Geoserver에서 제공하는 Function중 concatenate를 활용하면 쉽게 해결 가능하다.
기본 설명코드
<!-- Function 선언 name속성은 concatenate -->
<ogc:Function name="concatenate">
<!-- Function내에 연결하고 싶은 컬럼 및 문자열 정의 -->
<!-- 연동 된 테이블에서 가져올 컬럼명 : <PropertyName> -->
<ogc:PropertyName>column1</ogc:PropertyName>
<!-- 일반 문자열 : <Literal> -->
<ogc:Literal>일반문자열</ogc:Literal>
</ogc:Function>
샘플코드
<ogc:Function name="concatenate">
<!-- 첫 번째 컬럼 -->
<ogc:PropertyName>column1</ogc:PropertyName>
<ogc:Literal>(</ogc:Literal>
<!-- 두 번째 컬럼 -->
<ogc:PropertyName>column2</ogc:PropertyName>
<ogc:Literal>)</ogc:Literal>
</ogc:Function>
전체 샘플코드
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" version="1.1.0" xmlns:ogc="http://www.opengis.net/ogc" xmlns:se="http://www.opengis.net/se" xmlns:xlink="http://www.w3.org/1999/xlink">
<NamedLayer>
<se:Name>sample_layer</se:Name>
<UserStyle>
<se:Name>sample_layer</se:Name>
<se:FeatureTypeStyle>
<se:Rule>
<se:Name>Single sample_layer</se:Name>
<se:MinScaleDenominator>0</se:MinScaleDenominator>
<se:MaxScaleDenominator>750000</se:MaxScaleDenominator>
<se:PolygonSymbolizer>
<se:Fill>
<se:SvgParameter name="fill">#e10fbe</se:SvgParameter>
</se:Fill>
<se:Stroke>
<se:SvgParameter name="stroke">#010101</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke>
</se:PolygonSymbolizer>
</se:Rule>
<se:Rule>
<se:MinScaleDenominator>0</se:MinScaleDenominator>
<se:MaxScaleDenominator>750000</se:MaxScaleDenominator>
<se:TextSymbolizer>
<se:Label>
<ogc:Function name="concatenate">
<!-- 첫 번째 컬럼 -->
<ogc:PropertyName>dan_name</ogc:PropertyName>
<ogc:Literal>(</ogc:Literal>
<!-- 두 번째 컬럼 -->
<ogc:PropertyName>id</ogc:PropertyName>
<ogc:Literal>)</ogc:Literal>
</ogc:Function>
</se:Label>
<se:Font>
<se:SvgParameter name="font-family">Gulim</se:SvgParameter>
<se:SvgParameter name="font-size">13</se:SvgParameter>
</se:Font>
<se:LabelPlacement>
<se:PointPlacement>
<se:AnchorPoint>
<se:AnchorPointX>0</se:AnchorPointX>
<se:AnchorPointY>0.5</se:AnchorPointY>
</se:AnchorPoint>
</se:PointPlacement>
</se:LabelPlacement>
<se:Fill>
<se:SvgParameter name="fill">#000000</se:SvgParameter>
</se:Fill>
<se:VendorOption name="maxDisplacement">1</se:VendorOption>
<se:VendorOption name="conflictResolution">false</se:VendorOption>
</se:TextSymbolizer>
</se:Rule>
</se:FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
위와 같이 주면 아래와 같이 column1(column2)와 같이 라벨이 표현된다.
여기서 column1와 column2는 DB내에 있는 컬럼이고 '('와 ')'는 리터럴, 즉 일반 문자열이다.
728x90
반응형