2011년 6월 7일 화요일

[FOSS4G] GeoServer WPS Plugin의 설치 및 맛보기


GeoServer의 Extension 중 하나인 WPS(Web Processing Service) Plugin을 설치하는 방법과 간단한 데모입니다.

▣ GeoServer의 설치
이 블로그의 설치문서( GeoServer 2.0.0 설치 및 활용 가이드 )를 참조하여
최신버전(http://geoserver.org/display/GEOS/Stable)의  GeoServer 2.1.0(Stable,  2010년 6월 7일 현재) 버전을 다운로드 후 설치합니다.


▣ WPS Plugin 다운로드 및 설치
http://geoserver.org/display/GEOS/Stable로 이동하여 다음 그림과 같이 WPS Plugin을 다운로드합니다.
geoserver-2.1.0-wps-plugin.zip 파일을 다운받아서 압축 해제하면 다음과 같은 파일들이 있으며 버전에 따라 다를 수 있습니다.

gt-geojson-2.7.1.jar
gt-process-2.7.1.jar
gt-xsd-wps-2.7.1.jar
jt-attributeop-1.1.1.jar
jt-contour-1.1.1.jar
jt-rangelookup-1.1.1.jar
jt-utils-1.1.1.jar
jt-vectorbinarize-1.1.1.jar
jt-vectorize-1.1.1.jar
jt-zonalstats-1.1.1.jar
net.opengis.wps-2.7.1.jar
web-wps-2.1.0.jar
wps-core-2.1.0.jar

GeoServer설치 폴더의 webapps\geoserver\WEB-INF\lib 폴더에 위 파일을 복사(덮어쓰기)합니다.

GeoServer를 재시작하면 다음과 같이 WPS 서비스가 추가됩니다.


▣ WPS Demo
GeoServer 왼족 메뉴 중 좌하단의 Demos를 눌러 Demos 페이지로 이동합니다.

아래 내용들은 Demo 페이지를 보면서 한번 확인하세요.

▷ GeoTools에서 제공하는 Default Process
 GeoTools의 Unsupported module에서 제공하는 WPS 및 Process
 ⊙ JTS Namespace
  - Geometry Handling Process로 JTS Geometry Handling
  : area, boundary, buffer, centroid, contains, convexHull, crosses, densify, difference, dimension, disjoint, distance, endPoint, envelope, equalsExact, equalsExactTolerance, exteriorRing, filterString, geometryType, getGeoemtryN, getX, getY, interiorPoint, interiorRingN, intersection, intersects, isXlised, isEmpty, isRing, isSimple, isValid, isWithinDIstance, length, numGeometries, numnteriorRing, numPoints, overlaps, pointN, relate, relatePattern, simplify, startPoint, symDifference, touches, union, within
  
 ⊙ gt Namespace
 - GeoTools Sample Process들도 FeatureCollection과 GridCoverage를 활용
 : BufferFeatureCollection, DoubleAddition, FeatureBuffer, Inersect, RasterToVector, Union, VectorToRaster, buffer
▷ GeoServer에서 제공하는 Process
 ⊙ gs Namespace
 - GeoTools를 활용하여 GeoServer WPS Extension에서 제공하는 샘플 Process들로  FeatureCollection과 GridCoverage를 활용
 : Aggregate, Bounds, CollectGeometries, Contour, Count, CropCoverage, Import, Nearest, PointBuffers, PolygonExtraction, Query, RangeLookup, RaserAsPointCollection, RasterZonalStatistics, RectangularClip, Reproject, ReprojectGeometry, ScaleCoverage, Simplify, Snap, StoreCoverage, StyleCoverage, Unique, VectorZonalStatistics

▷ 향후 제공(?)될 Process 들
 ⊙ SEXTANTE GIS Libraries
 ⊙ GRASS Analysis Tools

▣ GeoServer WPS 지원 PPIO(ProcessParameterIO)
 - Input/Output에 대한 Encoding/Decoding을 지원
 - 사용자 정의 PPIO 추가 가능
 - FeatureCollection은 타 WFS 서비스의 결과(GML 등)를 사용할 수 있음
 - GridCoverage는 타 WCS 서비스의 결과(GridCoverage raw data)를 사용할 수 있음

▷ Primitives LiteralPPIO
BigInteger, BigDecimal, Double, double, Float, float, Integer, int, Long, long, Short, short, Byte, byte, Number, Boolean, boolean, String, CharSequence, Date, java.sql.Date, Time, Timestamp

▷ Geometries - GMLPPIO, WKTPPIO
GML3.Geometry, GML2.Geometry, WKTPPIO, GML3.GeometryAlternate, GML2.GeometryAlternate

▷ FeatureCollection - WFSPPIO, GeoJSONPPIO, BinaryPPIO(ShapeZIP)
WFS10, WFS11, GeoJSONPPIO, WFS10Alternate, WFS11Alternate, ShapeZip

▷ CRS
 - CoordinateReferenceSystemPPIO
▷ GridCoverage
GeoTiff, ArcGrid

▷ Envelopes
JTS Envelope, JTS ReferencedEnvelope, org.opengis.geometry.Envelope

▷ Filters
Filter10, Filter11, CQLFilter

▣ GeoServer WPS Demo - Centroid
Demos 페이지에서 WPS Request builder를 클릭 후 Choose process에서 JTS:centroid process를 선택합니다.


▷ JTS:centroid Process 예
inputGeometry(geom) = WKT: POLYGON((164158.90 262753.79, 164158.90 262881.74, 164326.22 262881.74, 164326.22 262753.79, 164158.90 262753.79))

⊙ DescribeProcess
DescribeProcess 버튼을 누르면 아래 그림과 같이 Processs에 대한 상세정보를 확인할 수 있습니다.

⊙ Input parameters 설정
위에서 제공된 Polygon WKT를 복사 후 process input geometry로 붙여넣기 합니다. PPIO Type을 application/wkt로 선택해야 합니다.
Process output은 Geometry이며 GMLPPIO, WKTPPIO 등을 선택할 수 있습니다.


⊙ WPS Request문 확인
Generate XML from process inputs/outputs 버튼을 누르면 다음과 같이 request XML을 확인할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
  <ows:Identifier>JTS:centroid</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>geom</ows:Identifier>
      <wps:Data>
        <wps:ComplexData mimeType="application/wkt"><![CDATA[POLYGON((164158.90 262753.79, 164158.90 262881.74, 164326.22 262881.74, 164326.22 262753.79, 164158.90 262753.79))]]></wps:ComplexData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="text/xml; subtype=gml/3.1.1">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

⊙ Execute process
Execute process 버튼을 누르면 결과가 다음과 같이 GML 3.1.1 버전의 output이 출력됩니다.

<gml:Point>
<gml:pos>164242.55999999997 262817.765</gml:pos>
</gml:Point>

▣ GeoServer와 GeoTools의 WPS 지원에 대한 정보는 여기를 참고