เริ่มต้นกับ ZooWPS

Standard

หลังจากพูดคุยในวงเหล้า บนเครื่อง บนรถกับ Gerald มานานว่าจะลอง ๆ Zoo ก็ไม่มีโอกาสสะที ทั้งที่เข้าใจโครงสร้างระบบทุกอย่างหมดละ เมื่อวานก็เลยใช้ช่วงโอกาสเข้า Workshop กันไปเลยจะได้ลองจริง ๆ จากที่ลองก็ถือว่า มีแนวคิดที่ดี แต่ยังเป็นของใหม่ทำให้ต้องอาศัย ความเข้าใจอยู่ในระดับที่ว่าเป็น advanced ก็สรุป ๆ บางอย่างได้ดังนี้

Compile : ดูเหมือนจะยาก เพราะขนาดใช้ LiveDVD ที่ลง lib ที่จำเป็นไว้หมดแล้วก็ยังลงไม่ผ่าน อาจจะต้องใช้ lib-dev บางส่วนเพิ่มเติม ไว้จะลองใหม่

Install : หลัก ๆที่ใช้คือ zoo_loader.cgi และ main.cfg ให้ไปใส่ไว้ใน cgi-bin directory โดย main.cfg จะเป็น config กำหนดค่าต่าง ๆ ที่จำเป็น ทั้ง tmppath, tmpURL and so on.

Service Provider : จะมีไฟล์ หลัก ๆ ที่จำเป็นคือ zcfg จะเป็น metada config ระบุ input, output สิ่งที่สำคัญคือในบรรทัดแรก จะเป็น ชื่อ function ที่จะอ้างถึงในไฟล์ ServiceProvider อีกทั้งชื่อไฟล์ zcfg ก็จะต้องมีค่าตรงกับค่าในบรรทัดแรกด้วย
ในไฟล์ ServiceProvider (ที่อ้างมาจาก ค่าในไฟล์ zcfg) จะเป็นเหมือนไฟล์ที่เก็บ library function ทั้งที่ใช้ใน ตัว lib เองหรือ ถูกใช้จาก zcfg ค่า serviceType จะเป็นตัวบอกว่าใช้ service ในภาษาอะไรเช่น C, Python etc..
- serviceProvider เป็นชื่อไฟล์ ที่จะ link มาใช้ แต่ไม่ต้องมี .py ในกรณีของ python แต่ต้องมี .zo ในกรณีของ C (ทำเอา งง เหมือนกัน)
- ในการใช้ serviceprovider ของ C ต้องทำการ compile code ภายใน zoows source code แล้วจึงเอา obj มาไว้ใน cgi-bin directory ค่อนข้างดูยุ่งยากใช้ได้กันเลย ถ้าเทียบกับ python ที่เป็น script
- การทำเป็นลักษณะ lib function ใน serviceProvider ถือว่าดี ในกรณที่ อนาคตหากมีการใช้งาน WorkFlow
- การ fix config อาจจะทำให้การใช้งานร่วมกัน หลายคนใน server เดียวกันมีปัญหา
- การเก็บ lib code ไว้ใน web accessible อาจจะไม่ปลอดภัยมากนัก

ต่อไปคงต้องลอง migrate code PyWPS มาเล่นสักหน่อย

WPS-enabled Client

Standard

วันนี้มาจดบันทึกคร่าวๆ เพราะ เดี๋ยวทำไปนาน คงจะลืม

จะกล่าวถึงระบบ 2 ระบบคร่าว ๆ โดยมีแบบ Direct และ WMS

ในส่วน Direct ไฟล์ที่เกี่ยวข้องหลัก ๆ จะมี

- wpsprocess.js จัดกับ การ Execute Request และเมื่อเสร็จสิ้น ก็จะสั่งให้เริ่มทำการ render โดย function Calcuate();

- index.php นั้นเป็น interface หลักที่ใช้ อีกยังมี Calculate function อยู่ด้วย ซึ่งจะไปสั่งให้ refreash map โดยต้อง arg ที่จำเป็นไปที่ drawmap.php

- drawmap.php จะทำการรวบรวมค่าต่าง ๆที่จำเป็นในการที่จะใช้สร้าง map image ก่อนที่จะส่งต่อไปที่ restoreState ใน map_session อีกครั้ง

- map_session.php ก็จะทำการดำเนินจัดการ mapfile ให้สร้าง map ที่ต้องการ

ส่วนในกรณีของ WMS
- wpsprocess.js เหมือนกับใน แบบแรก

- indexwms.php ทำหน้าที่เหมือนกับ แบบแรกเช่นกัน แต่ ให้สนใจ การเรียงลำดับ layer ใน fucntion ChgLayer ด้วย เพราะมีความสำคัญกับลำดับ

- owsraster.php ทำหน้าที่คล้ายๆกับ drawmap.php และ map_session.php แต่ ไม่ยุ่งยากเท่า โดยจะเป็นการใช้คำสั่งของ ows WMS phpmapscript

pyWPS ภาคต่อ

Standard

pyWPS Client Example:

หลังจากได้ดำเนินลง pyWPS สำเร็จเสร็จสิ้น ก็ต้องมาดำเนินการด้าน Client for WPS กันต่อ

ก็มีอยู่สัก 2 – 3 ตัวที่่กำลังพัฒนากันอยู่ ก็เช่น Embrio และ Wuiw

ในขั้นตอนการลงก็มีอุปสรรคบ้างเล็กน้อย พอประมาณ

โดยกล่าวคร่าว ๆ ก่อนแล้วกันว่า

Embrio เนีั่ยต้องการ php_mapscript และ DOM โดยจะต้องใช้ php-dom, php-xml package

ขอเน้นไว้ว่า php-dom และ php-domxml ไม่เหมือนกัน เพราะ php-domxml นั้นเป็นตัวเก่าใน php version 4 ใน php 5.0 นั้นเปลี่ยนชื่อมันไปสะแล้ว

XML Post Request:

มาถึงการส่งข้อมูลในแบบ XML Post request กันบ้างแล้ว ซึ่งมีกระบวนการซับซ้อนบ้างเล็กน้อย วันนี้จะมา post ตัวอย่างของ XML ที่ใช้ในการ post


<execute service=”wps” version=”0.4.0″ store=”true” status=”false” xmlns=”http://www.opengeospatial.net/wps” ows=”http://www.opengeospatial.net/ows”>
<ows:identifier>addvalue</ows:identifier>
<datainputs>
<input>
<ows:identifier>input</ows:identifier>
<complexvaluereference reference=”http://localhost/wps/data/soils.tif”></complexvaluereference>

<input>
<ows:identifier>value</ows:identifier>
<literalvalue>250</literalvalue>

<input>
<ows:identifier>bbox</ows:identifier>
<boundingboxvalue>
<boundingbox>
<lowercorner>-1 -1</lowercorner>
<uppercorner>10 10</uppercorner>
</boundingbox>
</boundingboxvalue>

<ows:identifier>noth</ows:Identifier>
<literalvalue>10</literalvalue>
<input>
<ows:identifier>noth</ows:identifier>
<literalvalue>20</literalvalue>

</datainputs>
</execute>

แล้วตัวอย่างคำสั่ง ในการ request เช่น

wget –post-file=request.txt “http://160.193.96.33/cgi-bin/wps.py” -O – -nv

หรือ

wget –post-file=GetObservation_ifgi_timeInstantRequest_After.xml “http://160.193.96.33:8080/52nSOSv2/sos” -O out.xml

ติดตั้งและทดสอบ pyWPS

Standard

วันนี้บังเกิดไฟ อันแรงกล้าจากการดื่มและบ่นกับท่านปรมาจารย์ Honda มาเลยลุยสะเต็มที่

มาเริ่มติดตั้ง pyWPS กันเลยดีกว่า

ก็สามารถ download src ได้จาก web site โดยตรงที่ pyWPS

แล้วก็ทำติดตั้งโดยใช้คำสั่ง

python setup.py install

แต่หากต้องการชุด dev ให้ทำการลงโปรแกรม subversion สะก่อนแล้วใช้คำสั่ง

svn checkout https://subversion.gdf-hannover.de:8080/svn/pywps/trunk

ทั้งหมดน่าจะสำเร็จเสร็จสิ้นไปโดยไม่มีปัญหาไร เราก็จะมีไฟล์ที่

/var/www/cgi-bin/wps.py

แ้ล้วก็ไฟล์อื่น จะเก็บไว้ใน directory ของ python

/usr/lib/python2.4/site-packages/pywps/

โดยจะมี directory ย่อย ๆ อีก etc/, processes/ , Wps/

โดยที่ etc/ จะเป็น configuration file directory ที่เราต้องทำการปรับแก้ เรื่อง path ต่าง ๆ

ทั้ง grass.py และ settings.py

มีข้อสำคัญหลายอย่างแต่ ยกตัวอย่างเช่น path มาให้ดูแล้วกันนะ

‘PATH’: “/usr/grass-6.0.2/bin/:/usr/grass-6.0.2/scripts/:/usr/bin/:/bin/:/usr/local/bin/:”,

# GISBASE is place, where your GRASS installation is
# ‘GISBASE’: “/usr/lib/grass”,
‘GISBASE’: “/usr/grass-6.0.2″,

# LD_LIBRARY_PATH
‘LD_LIBRARY_PATH’:”/usr/lib”,

หากแก้แล้วยังไม่ได้สามารถลุยต่อได้ ต้องลอง complied มันดูสะ ก่อนนะด้วยคำสั่ง

python setup.py install

จากนั้นก็คาดว่าน่าจะพร้อมลุย

มาทดสอบด้วยคำสั่ง Execute มันเลยแล้วกัน

wget -nv -q -O – –post-data=”service=wps&version=0.4.0&request=execute&Identifier=spearpath&Datainputs=x1,592846,y1,4915161,x2,607418,y2,4926300&store=true&status=true” “http://160.193.95.189/cgi-bin/wps.py?”

หรือ

http://160.193.95.189/cgi-bin/wps.py?service=wps&version=0.4.0&request=execute&Identifier=spearpath&Datainputs=x1,592846,y1,4915161,x2,607418,y2,4926300&store=true&status=true

ผลของดำเนินการนั้นน่าจะไปอยู่ที่ http://localhost/wpsoutputs/

หากดำเนินการต่าง ๆ แล้วยังไม่สามารถทำอะไรได้ ลองเข้าไปดู ใน error_log ของ Apache ดูเพราะจะมีการแจ้งอยู่ในนั้น

เช่น อาจจะมีการใ้ช้ fix path อยู่ใน process script ก็ไปทำการแก้ไข และ Compile ใหม่สะ

ผลความคืบหน้า เป็นอย่างไรจะแจ้งให้ทราบต่อไป