2013년 9월 2일 월요일

[Geoserver] Shadow & Extrusion Effect

GeoServer에서 레이어의 스타일(SLD) 작성시 Filter function 중 Geometric function을 사용하면 다양한 효과를 낼 수 있다.

Geometric function을 사용하면 원본 레이어의 geometry 타입을 변경하지 않고 렌더링 타임에 폴리곤의 중심점(centroid), 버퍼(buffer), 시작점(startPoint), 끝점(endPoint), 정점(vertices) 등을 적용할 수 있으며, 이를 "SLD geometry transformations"이라 부른다.

SLD에 Geometric function을 사용하는 경우 성능 문제를 야기할 수 있으므로, 사용 목적에 따라 사용 여부를 신중히 결정해야 한다.

다음은 건물 등의 폴리곤에 Shadow(그림자) 및 Extrusion(2.5D) 효과를 줄 수 있는 방법을 알아본다.

▣ Default
 - GeoServer 기본 폴리곤 스타일 사용
<PolygonSymbolizer>
  <Fill>
    <CssParameter name="fill">#AAAAAA</CssParameter>
  </Fill>
  <Stroke>
    <CssParameter name="stroke">#000000</CssParameter>
    <CssParameter name="stroke-width">0.5</CssParameter>
  </Stroke>
</PolygonSymbolizer>


▣ Shadow
 - offset function 사용

<PolygonSymbolizer>
  <Geometry>
    <ogc:Function name="offset">
      <ogc:PropertyName>the_geom</ogc:PropertyName>
      <ogc:Literal>0</ogc:Literal>
      <ogc:Literal>-2</ogc:Literal>
    </ogc:Function>
  </Geometry>
  <Fill>
    <CssParameter name="fill">#555555</CssParameter>
  </Fill>
</PolygonSymbolizer>


▣ Extrusion
 - isometric & offset function을 조합하여 사용
 - isometric 함수 인자로 숫자(<ogc:Literal>3</ogc:Literal> ,3) 외에 필드값(필드명 입력) 또는 필드값의 연산 사용 가능

<PolygonSymbolizer>
  <Geometry>
    <ogc:Function name="isometric">
      <ogc:PropertyName>the_geom</ogc:PropertyName>
      <ogc:Literal>3</ogc:Literal>
    </ogc:Function>
  </Geometry>
  <Fill>
    <CssParameter name="fill">#dddddd</CssParameter>
  </Fill>
  <Stroke>
    <CssParameter name="stroke">#999999</CssParameter>
    <CssParameter name="stroke-width">0.1</CssParameter>
  </Stroke>
</PolygonSymbolizer>
<PolygonSymbolizer>
  <Geometry>
    <ogc:Function name="offset">
      <ogc:PropertyName>the_geom</ogc:PropertyName>
      <ogc:Literal>0</ogc:Literal>
      <ogc:Literal>3</ogc:Literal>
    </ogc:Function>
  </Geometry>
  <Fill>
    <CssParameter name="fill">#FFDCC7</CssParameter>
  </Fill>
  <Stroke>
    <CssParameter name="stroke">#999999</CssParameter>
    <CssParameter name="stroke-width">0.3</CssParameter>
  </Stroke>
</PolygonSymbolizer>


▣ 스타일 다운로드
 - building_shadow.sld
 - building_extrusion.sld

▣ 참고
 - http://docs.geoserver.org/stable/en/user/styling/sld-extensions/geometry-transformations.html
 - http://docs.geoserver.org/stable/en/user/filter/function_reference.html