개발공작소
article thumbnail
728x90
반응형

 

Geoserver에서 라벨을 표현할 때, 컬럼 + 컬럼 또는 문자열 + 컬럼과 같이 문자열을 합쳐서

표현 해야 할 때가 있다.

 

그럴때 Geoserver에서 제공하는 Function중 concatenate를 활용하면 쉽게 해결 가능하다.

 

 

 

기본 설명코드

<html />
<!-- Function 선언 name속성은 concatenate --> <ogc:Function name="concatenate"> <!-- Function내에 연결하고 싶은 컬럼 및 문자열 정의 --> <!-- 연동 된 테이블에서 가져올 컬럼명 : <PropertyName> --> <ogc:PropertyName>column1</ogc:PropertyName> <!-- 일반 문자열 : <Literal> --> <ogc:Literal>일반문자열</ogc:Literal> </ogc:Function>

 

샘플코드

<html />
<ogc:Function name="concatenate"> <!-- 첫 번째 컬럼 --> <ogc:PropertyName>column1</ogc:PropertyName> <ogc:Literal>(</ogc:Literal> <!-- 두 번째 컬럼 --> <ogc:PropertyName>column2</ogc:PropertyName> <ogc:Literal>)</ogc:Literal> </ogc:Function>

 

 

전체 샘플코드

<html />
<?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
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!