OGC SLD(Styled Layer Descriptor)를 사용하여 차트 심볼을 설정하기는 어렵습니다.
GeoServer는 이를 위해 External References(PointSymbolizer의 ExternalGraphic)를 이용한 차트 익스텐션을 제공합니다.
Google Charts API 사용법과 같으므로 구글 차트 API를 이용해 본 경험자라면 쉽게 이해할 수 있을 듯 합니다.
구글 차트 API의 모든 파라미터를 지원하지는 않지만 SLD를 잘 적용하면 멋진 통계지도 서비스가 가능하리라 봅니다.
▣ Sample data & sld files
- shapefile : https://www.dropbox.com/s/31cay65nr1v9yzm/admin_sgg.zip
- pichart sld : https://www.dropbox.com/s/8nmvx9edqmpxojo/admin_sgg_pichart.sld
- barchart sld : https://www.dropbox.com/s/d27kdv5lrgo55gl/admin_sgg_barchart.sld
- shapefile에는 cnt_eve, cnt_sub, cnt_sto, pop_den 필드(numeric)가 있음
▣ Pi Chart
아래 이미지는 위 pichart sld를 적용한 결과이며 바탕, 파이 차트, 레이블 3가지의 룰을 사용했습니다.
차트 크기는 pop_den이라는 필드를, 차트 데이터는 cnt_eve, cnt_sub, cnt_sto 필드를 사용하며, 차트 데이터의 경우 여러 필드의 연산을 적용해도 됩니다.
▣ Pi Chart SLD
<Rule>
<Name>Chart</Name>
<MinScaleDenominator>100</MinScaleDenominator>
<MaxScaleDenominator>500000</MaxScaleDenominator>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:href="http://chart?cht=p&chd=t:${cnt_eve},${cnt_sub},${cnt_sto}&chco=FF0000,00FF00,0000FF&chf=bg,s,FFFFFF00" />
<Format>application/chart</Format>
</ExternalGraphic>
<Size>
<ogc:Add>
<ogc:Literal>20</ogc:Literal>
<ogc:Mul>
<ogc:Div>
<ogc:PropertyName>pop_den</ogc:PropertyName>
<ogc:Literal>35000.0</ogc:Literal>
</ogc:Div>
<ogc:Literal>60</ogc:Literal>
</ogc:Mul>
</ogc:Add>
</Size>
</Graphic>
</PointSymbolizer>
</Rule>
▣ Bar Chart
아래 바 차트 외에 스택 차트도 지원합니다. 아래 SLD에서 cht=bvg 옵션을 구글 API를 참고하여 변경하면 됩니다.
▣ Bar Chart SLD
<Rule>
<Name>Chart</Name>
<MinScaleDenominator>100</MinScaleDenominator>
<MaxScaleDenominator>500000</MaxScaleDenominator>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:href="http://chart?cht=bvg&chd=t:${cnt_eve}|${cnt_sub}|${cnt_sto}&chco=FF0000,00FF00,0000FF&chf=bg,s,FFFFFF00" />
<Format>application/chart</Format>
</ExternalGraphic>
<Size>
<ogc:Add>
<ogc:Literal>50</ogc:Literal>
<ogc:Mul>
<ogc:Div>
<ogc:PropertyName>pop_den</ogc:PropertyName>
<ogc:Literal>25000.0</ogc:Literal>
</ogc:Div>
<ogc:Literal>60</ogc:Literal>
</ogc:Mul>
</ogc:Add>
</Size>
</Graphic>
</PointSymbolizer>
</Rule>
▣ 참조
- http://blog.geoserver.org/2009/06/01/geoserver-chart-extension/
- http://blog.geoserver.org/2008/12/08/dynamic-symbolizers-part-1/
- https://developers.google.com/chart/image/docs/chart_params
댓글 없음:
댓글 쓰기