ติดตั้งและทดสอบ 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 ใหม่สะ

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

ว่ากันด้วยเรื่องของ RSA Key Authentication with SSH

Standard

โดยเจ้า Hacker จากแดนเหนือมาถล่มเครื่องเลยต้องหัด ป้องกันตัวเองสะบ้าง เอาเร็ว ๆ ด่วน ๆ เลยแล้วกัน

เริ่มแรกให้ทำการสร้าง Public Key มาสะก่อน โดยหากใช้ SSH ให้เข้าไปที่

Setting > User Authentification->Key

แล้วสร้างมันสะ Generate New …

เลือกแค่ RSA 2048 ก็พอ ลองสร้าง DSA แล้วนานโคตร

แล้วก็จะต้องทำการใส่ passpharse ก็คล้าย ๆ password นั้นแหละ แ้ล้วผลสุดท้ายจะได้ ไฟล์ ออกมา

ให้ upload ไปใส่ใน /home//.ssh/authorized_keys

ดู permission ด้วยให้ Read All และ Owner Write only

จากนั้นไปทำการปรับแต่ง /etc/ssh/sshd_config ของ server สักนิดหน่อย

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

และ

PasswordAuthentication no
PermitEmptyPasswords no

จากนั้นก็ทดลองดูสะ แต่หากมีไม่ได้ ก็ลอง ปิด Current Terminal แล้วลองสะ แต่ระวัง ต้องแน่ใจนะว่าจะเข้า server ได้จากหน้าเครื่อง ไม่งั้น อาจจะย่ำแย่ได้

เพิ่มเติมหากมีข้อสงสัย
http://kmself.home.netcom.com/Linux/FAQs/sshrsakey.html

O3dg Install

Standard

มาเริ่มกันเลยดีกว่านะครับ

prerequire ก็มีหลายตัวเช่น
-qhull,qhull-devel, Delny , postgresql ,postgis ,python,python-dev,python-numeric,python-pg เป็นต้นนะครับ

แต่เนื่องด้วยมีัปัญหานิดหน่อยสำหรับ python ที่ไม่มีการ complile ให้ใช้ ucs4 สำหรับ encodind จึงต้องทำการ recomplied ใหม่แล้วถอนตัวเก่าออกสะ (ทำให้ยุ่งยากมาก)

กระบวนการก็มีดังนี้
- remove python และ libpython ให้เกลี้ยง (ถึงแม้มันจะบอกว่าต้องถอนบางโปรแกรมออกด้วยก็ต้องยอม)
- install new python,pyhton-base,python-doc,tkinter,libpython,libpython-dev
- install หรือ reinstall ชุด foss4g
- install libqhull , libqhull-dev, python-numeric, python-numeric-dev, python-pg
- install Delaunay
- python fixsyspath.py และทำการ update /etc/profile
- install html ของ o3dg และ cgi-bin ไฟล
- ติดตั้ง DB โดยมีการเพิ่มสร้าง createlang plpythonu o3dgdb มาด้วยจากนั้นก็สร้าง function ด้วย o3dg_postgis.sql
- นำเข้า shp ให้อยู่ในรูป 3D table
- ดำเนินการ แก้ไข path ต่างให้เรียบร้อย
- แก้ไขค่า /etc/httpd/conf/httpd.conf
# Add Handler for X3D,VRML file
AddType model/x3d+xml .x3d
AddType model/x3d+vrml .x3dv
AddType model/x3d+binary .x3db
AddEncoding gzip .x3dvz
AddEncoding gzip .x3dbz

ปล การแก้ไข python ให้ support ucs4 โดยการเพิ่ม –enable-unicode=ucs4

%configure2_5x –with-threads –with-cycle-gc –with-cxx=g++ –without-libdb –enable-ipv6 –enable-shared –enable-unicode=ucs4
และต้อง install package ดังนี้ด้วย blt,blt-scripts,libblt2,libdb2,libdb2-dev,libdb4.2-dev,libdbcxx4.2,libdbtcl,libgmp

AppforMap Application ภาคต่อ

Standard

มันยังไม่จบกันง่าย ๆ ครับพี่น้อง เนื่องมันเป็น version แรกอะนะ เจ้าของ code ยังจัดสรรอะไรได้ไม่หมด ค่าบางค่าเวลาจะ tune up จำเป็นต้องค้นหากันนิดหน่อย

วันนี้มาว่ากันเรื่อง Background_color

โดยมันจะมีค่าระบุไว้ใน code ของ function.php ถึงแม้เราจะเปลี่ยนค่าใน map file อย่างไรก็ตามมันก็ยังไม่เปลี่ยนอยู่นะครับต้องทำการเปลี่ยนใน code มันจริง ๆ แล้วน่าจะแยกไปเก็บใน maplinkconfig.php
นะเนี่ย

$background_color = ImageColorAllocate( $im, 235, 235, 235);

อะนะก็ต้องมาตามแก้มันสะ

ใช้งาน Plone กับ Mini Thin AppforMap

Standard

วันนี้มาสั้น ๆ แล้วกัน

ความแตกต่างของ obj ใน Plone เลือกให้ดีว่าจะเพิ่ม

-Directory (ห้อง)
-Page มันจะแสดง link แล้วแสดง page เมื่อ click
-File มันจะแสดงรายการชื่อไฟล์และเปิดไฟล์เมื่อ click

ส่วนการเพิ่ม AppforMap mini client เข้าไปจำเป็นต้องใช้ iframe tag

โดยใส่

<iframe>http://160.193.3.63/appformap/client_mini.phtml?defaultLayers=ampm><iframe>
ก็จะได้ผลดังรูปข้างล่าง

เข้าไปแต่ว่าด้วยความปลอดภัย Plone จะเ็ก็บ content แต่ไม่ render ทำให้ต้องไปแก้ใน Zope ให้มันอนุญาตอีกครั้ง

/ /portal_transforms/safe_html

โดยเพิ่มให้ iframe มีค่าเท่ากับ 1 ใน valid tag แล้วทำการ restart มันสะ

หรือหากจะแก้ทั้งหมดเพื่อใช้ในครั้งต่อ ๆ ไปก็ต้องไปแก้ใน


/python/Product/CMFDefault/utils.py

เกร็ดเล็กน้อย สารพัน Mapserver ทั้งหลาย 1

Standard

พอดีวันนี้เจอปัญหาด้าน Symbol Scaling ที่เกิดขึ้นกับ Symbol ที่เป็น PixMap ที่เกิดขึ้นกับ Mapserver 4.8.1
ก็เลยนั่งหาคำตอบอยู่นานเลยเจอ link ต่าง ๆ และเกร็ดบางอย่างน่าสนใจเลยเอาลงไว้แก้ขัดนะครับ

เป็น webboard ที่รวมความรู้ด้าน GIS และ Mapserver ไว้คนข้าง ใช้ได้เชียวเลย

Nabble

นี่เป็นอีกคำตอบนึงที่ได้จาก web แห่งนี้ยังไม่เคยลองเหมือนกัน
เป็นการใช้คำสั่งของ gdal ในการทำ tiling ไว้จะลองใช้ดู

เป็นคำสั่งในการสร้าง Tiled Tiff file ออกมา
gdal_translate -co TILED=YES your.tif tiled.tif

เป็นคำสั่งสร้าง preview ออกมา
gdaladdo tiled.tif 2 4 8 16 32 64 128 256

นี่ก็เป็นอีกหนึ่งของ Client ตัวใหม่ ที่น่าสนใจ คาดว่าพัฒนามาจาก Thesis ของเด็ก ปโท

FIST

วกกลับด้วย AppforMap กันสะหน่อยแล้วกันนะ

php.ini ต้องอนุญาตให้ใช้

register_globals = On

เพื่อจะทำให้สามารถใช้ CheckBox และฟังก์ชัน ต่าง ๆ ได้อย่างสมบูรณ์

จากนั้นด้านการใช้งาน postgis 1.0 อาจมีปัญหาบ้างนิดหน่อยกับเรื่องของข้อมูลเพราะมีการเข้มงวดกับการใช้มากขึ้นจาก postgis 0.8

โดยตัวอย่างที่ต้องทำการแก้ไข code ที่ทำการเพิ่มจุดเข้าไปให้นั้นจะรับได้แค่ จุดแรกที่กด เท่านั้น ส่วนจุดอื่น ๆ ก็จะข้ามไป
ใน functions.php


switch ($this -> theGeometry)
{
////Edit Change Log 1
case POINT :
$pointgeoCoordStr=explode(“,”,$geoCoordStr);
$__wkt=”POINT($pointgeoCoordStr[0])”;
break;

ที่เหลือก็ยังมีพวก ค่าการ zoom to point ที่ีมีการใ้ช้ magic number ใน file attrupdate.phtml ไว้ที่ 100 ซึ่งหากใช้หน่วยของแผนที่แบบ degrees ก็สัก 1 หรือ 1.5 ก็น่าจะดีกว่า

แล้วในส่วน Measure นั้นจะใช้ได้กับ Map File ที่ใช้ หน่วยเป็น Meters

- การแสดง Legend ด้วยคำสั่ง Drawlegend สำหรับ i18n

ต้องทำการกำหนด การแสดงค่าใน Label object ใน Legend obj ให้เป็นดังรูปแบบด้านล่าง

LEGEND
KEYSIZE 40 20
KEYSPACING 10 10
OUTLINECOLOR 0 0 0
IMAGECOLOR 255 255 255
LABEL
TYPE TRUETYPE
ENCODING SJIS
FONT “Sazanami-Mincho”
COLOR 0 0 0
SIZE 12
POSITION CL
PARTIALS FALSE
BUFFER 3
END
STATUS OFF
END

แล้ว legend จะทำาการสร้าง legend ด้วยภาษานั้นได้ จากการใช้ค่า Class name นั้นเอง

ว่าด้วยเรื่องของ Projection

Standard

วันนี้มากล่าวคร่าวกับเรื่องของ projection code กันเล็กน้อย

ตอนนี้มีหลายมาตรฐานมาก ๆ เลย
แต่โดยส่วนใหญ่ที่เราจะพบเจอ ก็เป็น ของ PROJ4 EPSG ซึ่งตอนนี้ก็มีของ QGIS และ PostGIS

โดยของ Postgis ส่วนใหญ่จะตรงกันกับของ PROJ 4 แต่ก็มีแตกต่างบ้างบางครั้ง

ก่อนต้องเป็นสองพวกตามหน่่วยอะนะครับ คือ Decimal Degree และ Meters

โดยในญี่ปุ่นส่วนใหญ่ที่เราจะเจอก็คือเป็นแบบ Decimal Degree

# JGD2000
<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <>

และ
# WGS 84
<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <>

ซึ่งแบบหลังเนี่ยจะเป็นแบบ Long Lat ที่ใช้ Datum เป็น WGS84 ซึ่งมีหลายประเทศก็ใช้กันอยู่

แต่หากเจอข้อมูลเก่า ๆในญี่ปุ่นก็จะมีการใช้ Tokyo datum นะครับซึ่งคือ

# Tokyo / Japan Plane Rectangular CS V
<30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <>

# Tokyo
<4301> +proj=longlat +ellps=bessel +no_defs no_defs <>

JGD2000 จะใช้ GRS80 สำหรับ ellipsoid และ Tokyo Datum จะใช้ Bessel ellipsoid ซึ่งมีผลทำให้เกิดความคลาดเคลื่อนกันประมาณ 400 – 500 m.
อีกหน่วยก็คือ Meters

ซึ่งจะมีการแบ่งออกเป็นประมาณ 13 zone ก็ต้องดูว่าข้อมูลอยู่ใน zone ไหน

# JGD2000 / Japan Plane Rectangular CS V
<2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <>

และ เทคนิคการนำข้อมูล shp เข้า PostGIS DB นั้นก็ใช้คำสั่งอย่างนี้นะครับ

(shp2pgsql -s 4326 airports.shp
-f output.sql)

หากไม่เช่นนั้นข้อมูลใน column SRID จะมีค่า = -1

สำหรับข้อมูลคราวนี้อ้างอิงจาก web นี้นะครับ

ท้ายนี้ขอแถมของไทยด้วยแล้วกันนะ
#WGS84/ UTM Zone 47
<32647>+proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
#WGS84/ UTM Zone 48
<32648>+proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
#Indian 1975/UTM Zone 47
<24047>+proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs
#Indian 1975/UTM Zone 48
<24048>+proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs

ถ้าเป็น latlong ส่วนใหญ่ก็เหมือนกับ ข้างบนคือ

# WGS 84 LongLat
<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <>

สำหรับข้อมูลเก่า ๆ หน่อยอาจจะเจออันนี้บ้าง

#Indian 1954/UTM Zone 47
<23947>+proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs
#Indian 1954/UTM Zone 48
<23947>+proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs
#Indian 1975/ LongLat
<4240>+proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs

ใช้งาน AppforMap กับ Map file ของเราเอง

Standard

วันนี้ก็จะมาต่อกันอีกสำหรับ AppforMap เอาว่าย้ายกันมาให้ได้เลย

ก็ไม่มีไรมาก ต้องทำการแก้ไขไฟล์ส่วนใหญ่ที่อยู่ AppforMap/conf/
ซึ่งประกอบไปด้วยไฟล์ดังนี้

maplinkconfig.conf,refmapconfig.conf,browserconfig.xml และ load_modules.php

1.maplinkconfig.conf

ให้ทำการแก้ไขค่า ดังนี้

$workingDir=”C:/ms4w/tmp/ms_tmp/”;//path to the map image. Better use absolute url, because mapscript module change the workingdir
$imageUrl=”http://localhost/ms_tmp/”;//url to the map image.

if (!$mapfileUrl) $mapfileUrl=”C:/ms4w/apache/htdocs/librarymap/mapfile/library_app.map”;

if (!$layerXml) $layerXml=”http://localhost/appformap2/conf/browserconfig.xml?”;

และอาจต้องมีการปรับเปลี่ยนบ้างในกรณีหากมีการใช้ PostGIS อีกทั้งหน้าตา เมนูต่าง ๆ ให้สำรวจดูว่ามีอะไรที่ให้แสดงไว้บ้าง

2.refmapconfig.conf

แก้ไขทุกค่า ของมันเลยก็ว่าได้ เพราะมัีนมีอยู่แค่ 4 ตัว

3. browserconfig.xml

อันนี้เป็นไฟล์เพื่อแสดง ตัวบังคับการเปิดปิด layer ซึ่งอาจไม่ต้องมีจำนวนเท่ากันกับใน map file ก็ได้
หลักก็มีค่าของ

Title ซึ่งเป็นชื่อที่จะแสดง
Name และ Table ต้องตรงกับชื่อ layer ใน mapfile
Abstract ใช้คำอธิบายเยอะ ๆ ลงไปได้

4. load_modules.php
อาจต้องทำการแก้ไขบ้างในการ load module ของ php โดยเฉพาะเมื่อใช้กับ linux OS.

มาสำหรับขั้นสูงขึ้นในการใ้ช้ PostGIS และใช้ client_classic.phtml ที่ทำการ ค้นหาจุดได้นั้นต้องทำการแก้ไขเพิ่มเติมในไฟล์ search_select.php

ต้องทำการเปลี่ยน ตัวแปรที่เกี่ยวกับการ query มีค่าเหมือนกันกับชื่อ Select tag และ Option tag

และปรับเปลี่ยน SQL query command ให้สามารถดึงข้อมูลมาได้

ส่วนรายละเอียดให้ใช้งานได้อย่างเต็มที่ยังมีรายละเอียดอีกมากมาย โดยจะเอาตัวอย่าง มา post ไว้เต็มเลยดีกว่าเนอะ

แต่มี bug อยู่หนึ่งอย่างในไฟล์ function.php ซึ่งจะมีผลกับ postgis > 1.0 ขึ้นไปโดยจะเ้ข้มงวดกับการแบ่งแยก พิกัดมากขึ้น

จะเห็นว่ามันไม่มี

,

ระหว่างค่าพิกัดหายไปซึ่งใน version 0.8 นั้นจะยอมให้ใช้งานได้จึงต้องทำการแก้ไข code ที่ราว ๆ บรรทัด 2031 จาก

$NewPointArray = $NewPointArray.$geominx.” “.$geominy;

and replace it with;

$NewPointArray = $NewPointArray.”,”.$geominx.” “.$geominy;

เสร้จแหละนะคร้าบบ

เห่อ วันนี้ทำงานได้เยอะ มาก ๆ เลย สงสัยได้รับทราบเค้าดีว่าจะได้กลับไทยและบี visa ผ่านแหละ

shp2pgsql support i18n encod

Standard

วันนี้มีเพียงเกร็ดเล็กมาฝากในกรณีต้องการใช้การ convert shp2pgsql ให้สามารถทำการแปลงระบบการ encode เช่นจาก

Shift_JTS ไปเป็น UTF8

ต้องมีการใช้ option -W ต้องเป็นตัว UpperCase นะเพราะมันมีอีก option หนึ่งด้วย

แต่ก่อนจะทำการแปลงนั้นบางที shp2pgsql ของเราอาจไม่ได้ทำการ complie ให้ support ดังนั้นเราต้องการแก้ไขโดยต้อง complie ใหม่

โดยการทำการแก้ไขไฟล์

Makefile.conf.in

ทำการแก้ไขค่านี้ USE_ICONV=1

จากนั้นต้องทำการ recomplie มันสะคราวนี้ก็ดำเนินการได้เลยด้วยชุดคำสั่งนี้

# shp2pgsql -W SJIS shaperoads myschema.roadstable > roads.sql
# psql -d roadsdb -f roads.sql

หรือ

shp2pgsql -W SJIS shaperoads myschema.roadstable | psql -d roadsdb

แล้วหลังจากเราเอา ข้อมูลเข้าไปใน PostgreSQL แล้วนั้นซึ่ง Encode DB ของเรานั้นเป็น UTF-8

ทำใ้ห้เวลาสั่งให้ mapserver สร้าง label ในการแสดงแผนที่นั้นไม่จำเป็นต้อง ระบุ Encode ให้กับมันก็ได้

ติดตั้ง Zope และ Prima GIS

Standard

ก่อนอื่น เพิ่มส่วนนี้ไว้่ก่อนที่จะลืมอะนะครับ

ภายหลังทำการติดตั้ง Zope แล้วจำเป็นต้องแก้ไข iptable ให้สามารถตอบรับการเรียกจาก port 9080 ด้วย

โดยแก้ไขที่ไฟล์
/etc/shorewall/shorewall.conf

แล้วยังต้องทำการ install src ของ Mapserver และทำการ complie ไว้ด้วยเพราะต้องใช้ในขั้นตอนต่อไป

ทำการ extract PCL code

cd /tmp
tar -xzvf /mnt/cdrom/primagis/PCL-0.10.0.tar.gz
cd /tmp/PCL-0.10.0/PCL-Cartography/

อันนี้ทำเผื่อไว้ในกรณีชื่อมันเพี้ยน ๆ

ln -s /usr/share/proj/epsg /usr/share/proj/EPSG

อันนี้เป็นการ install ให้ zope รู้จักกับมันนะ
python setup.py build_ext -I /usr/src/RPM/BUILD/mapserver-4.6.2/ install

แล้วจากนั้นก็ให้ทำการปิด zope

แล้วสร้าง user

zopectl adduser username passwd

แล้วก็ restart zope ใหม่ดู
จากนั้นลองทำการทดลองเรียก Cartogtaphy ดู
โดยพิมพ์

python
>>> import cartography
>>> help(cartography)

หากมีการแสดง help ก็แสดงว่าน่าจะไม่มีปัญหาใด ๆ

จากนั้นก็เข้าไปสร้าง Plone Site แล้วก็สั่ง Easy Install (Prima GIS)

แล้วจึงสร้าง demo ตามที่เคยทำอธิบายไว้นะครับ

หากมีปัญหา ข้างนี้เป็นรวม link Faq ต่างๆ
http://trac.gispython.org/projects/PCL/wiki/FrequentlyAskedQuestions