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

Lilo Died

Standard

ได้ประสบพบเจอปัญหา อันน่าเศร้า เลยต้องมีการจดบันทึกสะหน่อย

เรื่องคือทำการแ้ก้ไข Lilo แล้วมันดันผิดพลาด ทำให้บูทไม่ได้นะสิ
โดยเมื่อบูทมาเจอข้อความว่า

Lilo keytable read/checksum error

วิธีการแก้ไข ก็มีวิธีดังข้างล่างนี้นะครับ

mkdir -p /mnt/system
mount /dev/hdaX /mnt/system
mount /dev/hdaY /mnt/system/boot (if you have a boot partition that is separate from your root partition)
cd /mnt/system
chroot /mnt/system /bin/bash
ldconfig
source /etc/profile
lilo
exit
reboot

และ link แนะนำสำหรับ การ recompile Kernel นะครับ
Kernel
และปัญหาด้าน SATA support
SATA

กลเม็ดต่างๆของ GDAL

Standard

หลายครั้งที่ท่านต้องการเปิดไฟล์ แปลงไฟล์ อ่านข้อมูลของไฟล์ Raster วันนี้เรามาเสนอ วิธีง่าย ๆ ที่ทำได้ด้วย command ของ gdal นะครับ

1. ดู metadata ของ Raster file

gdalinfo 20041117/20041117B1.tif

2. ทำการแปลงไฟล์จากชนิดหนึ่งไปเป็นอีกชนิดหนึ่ง ในแบบ simple โดยใช้ parameter เพิ่มเติมได้มากกว่านี้

gdal_translate -of GTiff 20030919/20030919B1 output.tif

3. ทำการแปลงไฟล์ด้วยคำสั่ง gdal_wrap (ตย. เป็นการแตกไฟล์ของ HDF4)

gdalwarp -of ENVI -ot Byte HDF4_EOS:EOS_SWATH:”prdat014.dat”:VNIR_Swath:ImageData3N /home/art/aster/2004111702/2004111702B3N

4. ทำการสร้าง composite ไฟล์ โดยการรวมหลาย ๆ Band

gdal_merge.py -o stack.tif -separate a.tif b.tif c.tif

หลายละเอียดของ option ดูได้จากที่นี่ gdal

เพิ่มเติมจาก blog ของ Markus http://gfoss.blogspot.com/2008/06/gdal-raster-data-tips-and-tricks.html

แก้ไขค่า ip setting ของ vhcs2

Standard

วันนี้ต้องนอกเรื่องสะหน่อย เพราะมันหลง ๆ ลืม ๆ มาหลายรอบ เลยต้องจดบันทึกมันสะหน่อย

วิธีการมีดังต่อไปนี้

1. ปิด vhcs2_daemon

/etc/init.d/vhcs2_daemon stop

2. แก้ไขค่า ต่าง ๆ ของ ip

/etc/network/interfaces

/etc/resolv.conf

/etc/vhcs2/vhcs2.conf

3. แก้ไขค่า่ต่าง ๆ ใน Database

mysql -u root -p

USE vhcs2;
UPDATE `server_ips` SET `ip_number` = '203.146.129.142' WHERE `ip_id` = 1;
UPDATE `domain` SET `domain_status` = 'change' WHERE `domain_status` = 'ok';
UPDATE `domain_aliasses` SET `alias_status` = 'change' WHERE `alias_status` = 'ok';
UPDATE `subdomain` SET `subdomain_status` = 'change' WHERE `subdomain_status` = 'ok';
UPDATE `mail_users` SET `status` = 'change' WHERE `status` = 'ok';
quit

4. สั่งให้เริ่มทำการ update อีกครั้ง

/var/www/vhcs2/engine/vhcs2-rqst-mngr

5. ทำการ สั่ง start vhcs2_daemon อีกครั้ง

/etc/init.d/vhcs2_daemon start

สำเร็จจนได้ครับ


ติดตั้ง SOS server

Standard

วันนี้ ก็มาง่มวิธีติดตั้ง SOS กันจากผลงานของ 52north

โดยจะต้องทำการติดตั้ง Apache-Tomcat server สะก่อนก็เป็นครั้งแรกที่จะลองทำดู

1. เริ่มแรกก็ติดตั้ง J2SDK ขอเน้น ว่า SDK ไม่ใช่แค่ JRE นะครับ download

มาเน้นเพิ่มเติมอีกทีว่า J2SDK ของ Sun ด้วย เพราะมี J2SDK-GCJ อีกตัวซึ่งใช้ไม่ได้นะครับ

2. Download Apache-Tomcat จาก download
ถ้าหากใช้ rpm ได้ก็ดีนะ ง่ายดายกว่า ลองติดตามดูรายละเอียดที่ Simple Tomcat 5 Installer
- วิธีลงด้วย src ก็แค่ untar ไปไว้ใน /usr/lib/ สะแล้วก็สั่ง startup.sh ใน /bin/
- ข้อสำคัญต้องทำการเพิ่มค่า JAVA_HOME ใน /etc/profiles

#Tomcat
JAVA_HOME=/usr/java/jdk1.5.0_06
export JAVA_HOME

- ตรวจสอบระบบโดย http://localhost:8080 (ถ้าเข้าไม่ได้ลอง ดู security ว่าเปิดให้เข้า 8080:9080/tcp หรือเปล่า)
- ถ้าเข้าระบบไม่ได้อาจจะเพราะไม่มี admin user ให้ไปเพิ่มในไฟล์ /usr/lib/apache-tomcat/conf/tomcat-users.xml

โดยเพิ่มข้อความดังข้างล่าง

3.ติดตั้ง Ant สะ โดย Download

แต่เราลงโดยใช้ rpm ของมัน ก็เลยง่ายหน่อย ไม่งั้นก็อาจจะยุ่งยาก บ้าง
- ข้อสำคัญต้องทำการเพิ่มค่า ANT_HOME ใน /etc/profiles

#ANT
ANT_HOME = /usr/bin/
export ANT_HOME

4.ทำการ tar SOS ไว้ใน้ /usr/ ก็ได้

5. ติดตั้ง postgresql/postgis

- copy postgresql-8.1xxx.jdbc3.jar และ postgis_1.xx.jar ไปไว้ใน /usr/sos/lib/
หา้กไม่พบ postgis_1xx.jar ต้องทำการติดตั้ง postgis-jdbc-xxx.rpm หรือทำการ recomplie เพื่อสร้างขึ้นมา
- สร้าง DB ชื่อ SosDatabase
- dump datamodel.sql จาก /sql/ และ test.sql เข้าไปใน DB
- ทำการแ้ก้ไขค่า config.properties โดยเป็นค่าเพื่อการติดต่อ DB
ข้อควรระวังอย่างมากคือ ค่าดังนี้
conf.sos.ds.daofactory และ conf.sos.result.lease (ex. 5 ) โดยค่า lease นั้นใน config ลืมกำหนดและบอกให้แก้มานะ ไม่เ่ช่นนั้นก็จะ run ไม่ได้

- ทำการแก้ไขค่า build.properties โดยต้องทำการระบุให้ถูกต้องโดยเฉพาะ TOMCAT_HOME และ JAVA_HOME

- เข้าไปใน /conf/ และพิมพ์คำสั่ง ant
- หาก error เกี่ยวกับ tools.jar ให้ลอง copy tools.jar จาก jdk/lib ไปที่ jre/lib

ถ้าทุกอย่าง พร้อมลองเข้า

http://localhost:8080/52nSOSv2/testClient.html
และทดลอง getCapabilities

http://localhost:8080/52nSOSv2/sos?REQUEST=GetCapabilites&SERVICE=SOS&ACCEPTVERSIONS=0.0.31

ปล Jakarta และ Tomcat admin นั้นไม่จำเป็น แต่จะลงก็ได้

รวมมิตร XML

Standard

ทำงานด้านนี้ หลีกหนีไม่ได้ ที่จะต้องยุ่งเกี่ยวกับ มัน เลย

งั้นมาเริ่มที่ละอย่าง สอง อย่างแล้วกัน เริ่มที่หัวมันก่อนเลย นะ

1. เอกสาร XML

<?xml version="1.0" encoding="UTF-8" ?>

2.การอ่านเอกสารตามรูปแบบข้างล่าง

<?xml version=”1.0″?>
<ExecuteResponse>
< Input>
< /Input>
< Output Name=”filename” X=”135.555″ Y=”45.5555″>
< /Output>
< /ExecuteResponse>

ทำการอ่านค่าด้วยวิธีการดังข้างล่าง

output = xmldoc.getElementsByTagName(“Output”)[0];
outputname = output.getAttribute(“Name”);
Xvalue = parseFloat(output.getAttribute(“X”));
Yvalue = parseFloat(output.getAttribute(“Y”));

3.การอ่านเอกสารตามรูปแบบข้างล่าง

<?xml version=”1.0″ ?>
<ExecuteResponse>
<Input>Input filename</Input>
<Output>Output filename</Output>
<X>135.555</X>
<Y>45.5555</Y>

ทำการอ่านค่าแต่ละตัวโดยการ
inputfilename=response.getElementsByTagName(‘Input’)[0].firstChild.data;
X=parseFloat(response.getElementsByTagName(‘X’)[0].firstChild.data);

Unix ปลีกย่อย

Standard

หัวข้อคงมีการ update กันไปเรื่อย เจออะไร ก็เอามาลงนะ

- วันนี้ขอเสนอเริ่มต้นกับการสร้าง ISO ไฟล์แบบให้รองรับกับ ชื่อยาว ๆ

mkisofs -r -joliet -joliet-long -l -allow-multidot -allow-leading-dots -no-bak -full-iso9660-filenames -o ../newms410.iso .

ตัวอย่างคำสั่ง อย่าไปใช้ * ละ มันจะบอก error error

- การส่งข้อมูลด้วยวิธี curl

curl http://wwww.script.com/script.php -d input=’value’

เป็นการส่งแบบ post form data

curl “http://localhost/cgi-bin/wps/wps.py?
request=execute&identifier=justadd&service=WPS&version=0.4.0&DataInputs=
value,250″

เป็นการส่งแบบ get form data

AJAX ปลีกย่อย

Standard

ตอนนี้ อะไร ๆ ๆ ก็คงต้อง AJAX (Asynchronous JavaScript and XML) นิยามที่ wikipedia

แต่เวลา่ใช้งานจริงมักเกิดปัญหา เล็ก ๆ น้อย ๆ น่ารำคาญมาก เพราะสาเหตุดังนี้

- เป็น javascript ดู debug ยาก และยังเป็นติดต่อแบบเบื้องหลัง อีก แก้ปัญหาได้ใน Mozilla โดยใช้ Fire Bug

- ปัญหา cross platform ระหว่าง IE และ Mozilla เนื่องด้วยมันทำงานไม่เหมือกัน ทำให้เกิดหลากหลายเป็น นับตั้งแต่การสร้าง XHTMLRequest ซึ่งใน IE นั้นใช้เป็น ActiveX แล้วอีกทั้งการตอบการทำงานที่แตกต่างกัน การแก้ไขและรายละเอียดจะกล่าวข้างล่าง

- อีกหัวข้อหลักแบบ โง่ ๆ ของ IE คือกระบวนการสร้าง XhtmlRequest นั้นต้องอยู่ Head tag ตั้งแต่หัวของไฟล์ ซึ่ง Mozilla อยู่ไหนมันก็ตอบสนองทั้งสิ้น

1. ไฟล์ xmlhttp.js ให้ include ไว้สะตั้งแต่ head ไปเลย


function createRequestObject() {

var req;

if(window.XMLHttpRequest){
// Firefox, Safari, Opera...
req = new XMLHttpRequest();
} else if(window.ActiveXObject) {
// Internet Explorer 5+
req = new ActiveXObject("Microsoft.XMLHTTP");
} else {
// There is an error creating the object,
// just as an old browser is being used.
alert('There was a problem creating the XMLHttpRequest object');
}

return req;

}

2. สร้าง XMLHTMLRequest เมื่อต้องการใช้งานและกำหนดค่าต่างๆ
ข้อสังเกต
- http.overrideMimeType(“text/xml”); นั้นเป็นการกำหนดว่าข้อมูลที่ตอบรับกลับมานั้นเป็นรูปแบบใด แต่ใน IE นั้นไม่สนับสนุน XML จึงไม่ควรกำหนด แต่ต้องดำเนินการขั้นตอน ต่อไปหากต้องการรับข้อมูลแบบ XML
- strsub นั้นเป็นตัวแปลว่างเปล่า เพราะใน IE ไม่ให้ส่งแบบ http.send(null)
- บางครั้ง IE ไม่ยอมให้ใช้ http.onreadystatechange = PointReq; แต่ให้ใช้ http.onload แทนแต่ Mozilla นั้นยอมรับทั้งสองอย่าง

// Make the XMLHttpRequest object
var http = createRequestObject();
var prog = "check.php";
var status_location = '';
var strsub ='';
function sendRequest() {
var t1 = encodeURI(document.getElementById("address").value);
// Open PHP script for requests
http.onreadystatechange = PointReq;
http.open('post',prog+"?address="+t1 ,true);
// http.overrideMimeType("text/xml");
http.send(strsub);

}

3.ตรวจรับผลของการเรียกใช้งาน
ข้อสังเกต

-จะเห็นว่า xmldoc นั้นมีการใช้รับค่าจาก Response ของ XMLHTMLRequest ที่แตกต่างกัน ตามที่ได้บอกไปแล้วว่าใน IE นั้นไม่ support .responseXML จึงต้องทำการสร้าง XMLDOC ขึ้นมาแล้วนำค่าใส่เข้าไปจาก .responseText แทน

-ใน IE นั้นควาย มากหากจะใช้ตัวแปลชื่อ status จงอย่าใช้ เพราะมันทำให้ผมติดเงก อยู่ 2 วัน

function PointReq(){

if(http.readyState == 4 && http.status == 200 ){

if (document.implementation && document.implementation.createDocument){
xmldoc = http.responseXML;
//In case to be the internet explorer
} else if (window.ActiveXObject){

xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.loadXML(http.responseText);
}

root_node = xmldoc.getElementsByTagName("Result")[0];
results = root_node.getAttribute("search");
if(results == "Succeeded"){
......
}
else if (results =='Nomatch'){
......
}
}
}

ข้อมูลเพิ่มเติม อ้างอิงได้หลายที่ จากที่นี่ผมก้อเอามาครับ Blog

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

WMS Client Example

Standard

วันนี้ก็จะมาลุยเรื่อง WMS Client กันหน่อย จริง ๆ ต้องการทำ WPS แต่ยังไม่เคยเขียนเองเลยต้องมาเริ่มนับหนึ่งกันสะหน่อยนะครับ

ก็มีหลาย ๆ อันที่ดูดีใช้ได้ ลองรวบรวมมาไว้บ้างแล้วกัน เริ่มจากอันง่ายสุด

1.QuickWMS มี js มาให้เรียบร้อย แต่ทำได้เพียง ระบุ Layers ที่จะดึงมา ไม่มีการ GetCapabilities

2. WMS Java Script Library ก็ยังเป็น js อยู่ดี ใช้งานง่าย

3.OpenLayers ก็ยังคงคล้ายกับตัวอย่างข้างบน แต่มี Mouse Event ที่น่าสนใจ (คนพัฒนายังเด็กอยุ่เลย)

4. msCross เป็น AJAX Web GIS Client ที่มี library ที่สามารถดึงมาใช้งานได้อย่างน่าสนใจ

powered by performancing firefox