GeoServer - 스타일 옵션

seol·2024년 7월 7일

geoserver

목록 보기
4/6


누리집 공공데이터포털에서 제공하는 경기도 광주시_건물정보 SHP 활용

지오서버 스타일로 이미지 뿐 아니라 위와 같이 라벨 설정, 경우에 따라 다른 이미지넣기 등 여러가지 방법으로 활용 가능하다.

  1. 라벨 넣기
    레이어에 스타일을 주고나면

    해당 스타일에서 Layer Attributes 탭을 통해 레이어의 기본 좌표 정보 조회가 가능하다.
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
                       xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  <NamedLayer>                
    <Name>redflag</Name>
    <UserStyle>
      <Name>burg</Name>
      <Title>A small red flag</Title>
      <Abstract>A sample of how to use an SVG based symbolizer</Abstract>

      <FeatureTypeStyle>
        <Rule>
        	<MinScaleDenominator>0</MinScaleDenominator>
			<MaxScaleDenominator>5000</MaxScaleDenominator>
          <Title>Red flag</Title>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic xmlns="http://www.opengis.net/sld" xmlns:xlink="http://www.w3.org/1999/xlink">
                <OnlineResource xlink:type="simple" xlink:href="test.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
              <Size>
                <ogc:Literal>30</ogc:Literal>
              </Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
        <Rule>
          <TextSymbolizer>
            <Label>
              <ogc:PropertyName>POS_BUL_NM</ogc:PropertyName>
            </Label>
            <Font>
              <CssParameter name="font-family">NanumGothicBold</CssParameter>
              <CssParameter name="font-size">12</CssParameter>
            </Font>
            <LabelPlacement>
              <PointPlacement>
                <AnchorPoint>
                  <AnchorPointX>0.5</AnchorPointX>
                  <AnchorPointY>2.5</AnchorPointY>
                </AnchorPoint>
              </PointPlacement>
            </LabelPlacement>
            <Fill>
              <SvgParameter name="fill">#ffffff</SvgParameter>
            </Fill>
            <Graphic>
              <Mark>
                <WellKnownName>square</WellKnownName>
                <Fill>
                  <CssParameter name="fill">#ffffff</CssParameter>
                </Fill>
                <Stroke>
                  <CssParameter name="stroke">black</CssParameter>
                  <CssParameter name="stroke-width">0.5</CssParameter>
                </Stroke>
                <Size>
                  <ogc:Literal>50</ogc:Literal>
                </Size>
              </Mark>
            </Graphic>
            <VendorOption name="graphic-resize">stretch</VendorOption>
            <VendorOption name="graphic-margin">8 3</VendorOption>
          </TextSymbolizer>
        </Rule>

      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

TextSymbolizer : Text에 대한 스타일 설정
propertyName : 라벨 설정 시, 라벨에 들어갈 TEXT 값
(DB 테이블은 한글명 alias로 값을 불러올 경우 위와 같은 POS_BUL_NM이 지정한 alias명으로 표기된다.)

Font : 라벨 텍스트 폰트 설정 Css Parmeter 태그를 통해 세부 스타일을 지정 가능
LabelPlacement : 라벨 위치 설정
Graphic, Mark : 라벨 모양 설정
Stroke : 라벨 선 스타일 설정
VendorOption name="graphic-resize" : 라벨 크기 조정 (stretch : 라벨 내 텍스트 크기에 맞춰 라벨 크기 조정)
VendorOption name="graphic-margin" : 주변 라벨 사이의 여백 설정
MinScaleDenominator : 최소 축적 범위 지정
MaxScaleDenominator : 최대 축적 범위 지정
---> 축적 범위 1:0 ~ 1:5000 사이에서 적용되는 스타일 정의

  1. 경우에 따라 다른 이미지 설정
    스타일의 Layer Attributes 에서 제공하는 정보를 보고 스타일 규칙을 넣을 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  <NamedLayer>
    <Name>area landmarks</Name>
    <UserStyle>
    <Title>Border-less gray fill</Title>
    <Abstract>Light gray polygon fill without a border</Abstract>
      <FeatureTypeStyle>
        <Rule>
          <ogc:Filter>
            <ogc:PropertyIsLike wildCard="*" singleChar="." escape="!" >
              <ogc:PropertyName>BULD_NM</ogc:PropertyName>
              <ogc:Literal>브라운스톤*</ogc:Literal>
            </ogc:PropertyIsLike>
          </ogc:Filter>
          <Title>BULD_NM</Title>
          <PointSymbolizer>
            <Graphic>
             <ExternalGraphic xmlns="http://www.opengis.net/sld" xmlns:xlink="http://www.w3.org/1999/xlink">
               <OnlineResource xlink:type="simple" xlink:href="test.png" />
               <Format>image/png</Format>
              </ExternalGraphic>
              <Size>
                <ogc:Literal>30</ogc:Literal>
              </Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

해당 스타일은 BULD_NM이 브라운스톤으로 시작하는 곳에만 해당 이미지를 씌워 불러온다.
PropertyIsLike : 포함하는 문자열 필터
wildCard : 와일드카드, ""은 원하는 대로 지정 가능, sql의 Like를 지정할 때와 같은 기능이다.
singleChar : 하나의 문자열
escapeChar : 개행 문자열
ex)
경주.!* : 경주로 시작하는 세글자 단어가 개행된 문자열을 포함하는 데이터를 필터링 한다. -> 경주의 맛집, 경주로 여행 등등

https://docs.geoserver.org/2.23.x/en/user/styling/sld/reference/filters.html
관련 필터 기능은 공식 페이지에서 확인 가능하다.

👻issue
1. <ogc:Filter> 태그 까먹지 말기!

profile
기록끼록끼룩

0개의 댓글