2012년 2월 22일 수요일

GeoServer & SLD(Styled Layer Descriptor)

현재 GeoToolsGeoServer는 공식적으로는 SLD version 1.0.0을 지원하고 있다고 하지만 SLD 1.0, 1.1, GeoServer옵션(Vendor 옵션)을 함께 사용하고 있다.

SLD Converter 구현을 위해서 간략하게 SLD를 정리해 보았다.
SLD 변환도구는 이전글: SLD(Styled Layer Descriptor) Converter & Editor? 참조

▣ SLD의 기본 구조
예)
<?xml version="1.0" encoding="utf-8"?>
<sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
  <sld:NamedLayer>
    <sld:Name>firestation</sld:Name>
    <sld:UserStyle>
      <sld:Name>firestation</sld:Name>
      <sld:FeatureTypeStyle>
        <sld:Name>Simple Renderer</sld:Name>
        <sld:Title>Simple Renderer</sld:Title>
        <sld:Rule>
          <sld:PointSymbolizer>
            <sld:Graphic>
              <sld:Mark>
                <sld:WellKnownName>square</sld:WellKnownName>
                <sld:Fill>
                  <sld:CssParameter name="fill">#FF0000</sld:CssParameter>
                </sld:Fill>
              </sld:Mark>
              <sld:Size>
                <ogc:Literal>8</ogc:Literal>
              </sld:Size>
            </sld:Graphic>
          </sld:PointSymbolizer>
        </sld:Rule>
      </sld:FeatureTypeStyle>
    </sld:UserStyle>
  </sld:NamedLayer>
</sld:StyledLayerDescriptor>
▣ Symbolizer의 종류
Symbolizer는 PointSymbolizer, LineSymbolizer, PolygonSymbolizer, TextSymbolizer, RasterSymbolizer로 구성
▣ Graphic, Stroke, Fill Symbol
 - 모든 심볼은 Opacity 속성을 이용해서 투명도를 조절할수 있음(0~1값이며 0은 투명)
 - Graphic은 Point, Stroke는 Line, Fill은 Polygon을 표현하며
 - Graphic은 여러개의 GraphicalSymbol을 가질 수 있으며 Mark와 ExternalGraphic으로 분류
 - GeoServer에서 WellKnownName("square", "circle", "triangle", "star", "cross", "x") 외에  shape, ttf 확장이 가능하다.
 - http://2010.foss4g.org/presentations/3588.pdf 참조
▣ RasterSymbolizer 구성요소
 - ColorMap은 여러개의 ColorMapEntry를 가질 수 있음
 - 현재 GeoServer에서는 ChannelSelection, ContrastEnhancement, ColorMap만 지원하며, ImageOutline, OverlapBehavior, ShadedRelief은 미지원
▣ TextSymbolzier 구성요소
- TextSymbolizer는 Label(하나 또는 여러 필드의 조합), Font, Halo, Label의 위치 등을 설정할 수 있음
 - LabelPlacement는 PointPlacement와 LinePlacement로 구성됨
 - PointPlacement는 일반적으로 포인트와 폴리곤의 라벨을 처리하며 Rotation을 설정해서 회전이 가능
 - LinePlacement는 라인 피쳐의 라벨리에 사용되며 GeoServer에서는 이 외 다양한 Vendor 옵션이 있음
▣ 참고
 - http://www.opengeospatial.org/standards/sld
 - http://docs.geotools.org/latest/userguide/library/opengis/se.html
 - http://docs.geoserver.org/stable/en/user/styling/index.html