จัดการเปลี่ยนหน้าตา vista ให้เป็นภาษาที่ต้องการ

Standard

หลังที่ต้องทนใช้ GUI เป็นภาษาญี่ปุ่นมานานแสนนาน กฏอะไรไป ก็ไม่รู้ใช้จำเอาอย่างเดียว

วันนี้มาเจอ เครื่องมือที่มีประโยชน์มาก ก็คือ Vistalizator http://www.froggie.sk/index.html

ง่าย ๆ แค่โหลดโปรแกรมมาแล้วก็ run ก็จะมีการให้เลือกภาษาที่ต้องการเปลี่ยน แล้วก็จะมีการให้โหลดไฟล์เพิ่มบ้างเล็กน้อย ก็ทำตาม Help ไป

จากนั้นก็ restart ท่าน ๆ ก็จะสามารถใช้ windows ในภาษาที่ท่านต้องการได้แล้วจริง ไม่ผิดกฏด้วย ลองดูสะ

52N SOS svn installation

Standard

ก็พยายามลองมาหลาย version ก็มีปัญหาตลอดครั้งนี้ ลอง svn สะหน่อยแล้วกัน

วิธีการลงก็มีอะไรทื่ต้องทำมากกว่า version stable

ก่อนอื่นก็ต้องทำการลง Java SDK, apache tomcat, Postgresql/PostGIS

ทำการสร้างฐานข้อมูล และโหลด data model แล้วก็แก้ไข config ตามระบบที่ใช้

หลักก็ต้องอาศัย maven ช่วยในการสร้าง

รายละเอียดหลัก ๆ ก็ตาม https://52north.org/twiki/bin/view/Sensornet/SosTutorial

สรุปคร่าว ๆ

1. Load svn source ด้วยโปรแกรม svn client

2. ทำการลง maven

3. แก้ maven config ตามที่ tutorial บอกไว้

4. ทำการเพิ่ม M2_HOME =>maven path (e.g. c:\sos\maven\) แล้วก็ M2 -> %M2_HOME%bin\ (อาจจะต้อง reboot)

5. จากนั้นก็เข้าไปที่ directory source ของ sos แล้วพิมพ์คำสั่ง mvn clean install

มันก็จะทำการสร้างไฟล์ war มาน่าจะอยู่ใน  52n-sos\52-sos-service\target\52nSOSv3svn.war

6. จากนั้นก็เข้าหน้า apache tomcat แล้วโหลดไฟล์ war ไปสะ

เพิ่ม lib function/Control .ใหม่ให้กับ OpenLayers

Standard

คุณเคยไหมที่ประสบปัญหา อย่างได้แบบนั้น แบบนี้แต่ OpenLayers ไม่มีให้ ไม่เป็นคุณแก้มันได้เพราะมันเป็น FOSS นั้นเอง ทำเหมือนมาขายของสะงั้น

วันนี้ก็มาเล่าถึงการเพิ่ม function หรือ Control ใหม่ ๆ ให้กับ OpenLayers ว่าต้องทำอย่างไรดีนะ

ก็ไม่ยากถ้าสังเกตดี ๆ OpenLayers ได้จัดการโครงสร้างต่าง ๆ ไว้อย่างค่อนข้างดี (อาจเพราะระบบการพัฒนา ของ สามหัวแรงหลักของคนพัฒนานั้น แบ่งแยก แต่มาประกอบกันในที่สุด)

เริ่มแรกจะเห็นว่าใน directory OpenLayers จะมี directory ย่อย ๆ ตาม Structure แล้วมีไฟล์ เหมือนชื่อ Directoryเช่น Control.js , Handle.js ส่วนใหญ่แล้วเราไม่จำเป็นต้องแก้ไขไฟล์นี้

ถ้าเราต้องการเพิ่ม function ใหม่ใน Control ก็ให้สร้าง ไฟล์ js ใน Control directory เช่น Control/NewBox.js

เมื่อทำการสร้างแล้วก็ไปเพิ่มให้ OpenLayers โหลดด้วยในไฟล์ OpenLayers.js มันก็จะถูกโหลดขึ้นมาเมื่อเริ่ม

แต่สิ่งสำคัญอย่างนึง หากเราต้องการสร้าง Control ไม่ใช่แค่ Function ผมหมายถึงเป็นปุ่มแสดงบน Map เหมือน icon ของ zoom,pan, DrawPoint เราจำเป็นต้องไปแก้ไข ไฟล์ theme ให้สร้าง CSS ที่เราจะใช้ว่าขนาดเท่าไร ใช้ icon อะไร

แต่มีบางอย่างที่แปลก ผมทำการแก้ไขไฟล์ theme/default/style.css แก้แล้วแก้อีกมันก็ไม่เปลี่ยน ถึงแม้เราจะระบุ ค่า theme ใน options ของ map contruct แล้วก็ตาม (ลองลบไฟล์มันไปมันยังโหลดมาได้เลย งง มาก)
ก็เลยลองสร้างไฟล์ใหม่เป็น theme/default/newstyle.css แล้วระบุค่าใน theme option ของ map คราวนี้ใช้การได้ ก็แปลกดี

ก็ตามนี้นะครับ ก็ต้องบอกก่อนว่านี้เป็นครั้งแรกผมลองทำอาจจะมี bug หรือข้อผลาดอย่างไร ถ้าพบจะมาบันทึกไว้อีกที

New PrimaGIS กับการ install แบบง่าย ๆ (มั้ง)

Standard

ต้องทำการ upgrade เจ้า PrimaGIS ก็เลยได้มาเขียนในคราวนี้  เริ่มเลยแล้วกันใน version ใหม่ได้มีการทำ script เพื่อทำให้การ install นั้นง่ายขึ้นกว่าเก่า โดยจะทำแบบครบสมบูรณ์ว่าต้องการ software อะไรบ้างก็จะ download มาให้หมด แล้วทำการ complie เป็น แบบ sandbox ก็คือจะไม่กระทบกับระบบที่เรามีอยู่ เช่นหากมีการ install gdal ไว้อยู่แล้วมันก็แยกจากกันไป

ก็ให้ทำตามขั้นตอนตาม web ข้างล่าง

http://trac.gispython.org/projects/PrimaGIS/wiki/PrimaGISBuildout

ในการ install นี้จำเป็นจะต้องใช้ buildit ร่วมด้วย เราก็อาจจะทำการ install จาก easy_install ซึ่งเป็น util หนี่งสำหรับการลงโปรแกรมต่าง ๆ ของ python

easy_install http://www.agendaless.com/Members/chrism/software/buildit/buildit-0.1.tar.gz

แล้วก็ โหลดตัว buildout มาจาก svn

$ svn checkout http://svn.gispython.org/svn/zope/primagis.buildout/trunk primagis.buildout

ก็เริ่มการ install โดยระบุค่า prefix หรือค่าต่างที่จำเป็น

python build.py –build-root=/tmp/ –prefix=/opt/hgis –zope-port=9080
จากตัวอย่างนั้นต้องการ install ไปที่ /opt/hgis และใช้ /tmp สำหรับช่วงการ download และ build และระบุว่า zope นั้นเปิดที่ port 9080

เพียงเท่านี้มันก็จะ download และ build ทุกอย่างให้หมด แต่หากระหว่างการดำเนินการมีปัญหา เช่น sw นั้นเก่าไปแล้วหรือ link นั้น error ก็ให้ทำการแก้ไข ได้ที่ task/<swname>.ini

อีกสิ่งหนึ่งที่สำคัญในการ install นั้นไม่จำเป็นต้องใช้ root user เพียงแค่ permission ของ prefix directory ปลายทางนั้นสามารถเขียนได้ก็ใช้การได้

เมื่อลงเสร็จก็จะมีคำแนะนำว่าต้องทำอะไรอย่างไรต่อเช่น

- เริ่ม run zope

/opt/hgis/zope/Zope-2.9.6-final/instances/buildout/bin/runzope – ทำการทดลองสร้าง PrimaGIS ว่ามี error อะไรไหม

cd /opt/hgis/zope/Zope-2.9.6-final//instances/buildout
./bin/zopectl test -vv –dir Products/PrimaGIS/tests

- login เข้าสู่หน้า manage ของ zope ด้วย user/passwd ที่กำหนดให้

http://localhost:9080/manage

- เมื่อเข้าสู่หน้า mange ของ zope แล้วก็ให้ทำการ สร้าง Plone Site (จากหน้าแรกแล้วเลือก drop down แล้วกด Add)

- กำหนดชื่อ plone site

- จากนั้นใน Plone Site ที่เราสร้างจะมีคำสั่ง portal_quickinstaller ให้ก็ให้ ลง PrimaGIS และ ZCO

- ให้ทำการแก้ไขค่า portal_gis โดยการใส่ค่า

fonset  “/opt/hgis/spatialdata/fonts/fontset.txt”

incoming /tmp

- ขั้นตอนสุดท้ายก็ทำการสร้าง PrimaGIS front ด้วย

http://localhost:9080/hgis/createPrimaGISDemo

แค่นี้ก็เสร็จสิ้นแล้ว

Remark

หากการทำแล้วมีปัญหาอะไร ลองตรวจสอบว่าบางที simplejson, elementtree, owslibอาจมีข้อผิดพลาดจากการ install ของ script อาจจะต้องทำการ ลงด้วย easy_install เองซึ่งไฟล์จะอยู่ใน

/opt/hgis/lib/python2.4/site-packages/setuptools-0.6c8-py2.4.egg/easy_install.py


			

W3DS and WTS

Standard

ต้องปั่น paper สำหรับเรื่อง Geoinforum 2008 ก็เลยต้องทำการค้นคว้าหาข้อมูลสักนิดเลย ได้รู้ถึงความแตกต่างของ draft standards จาก OGC
คือ

W3DS [Web 3D Service] และ WTS [Web Terrain Service]

เอานิยามไปก่อนแล้วกัน

W3DS  = The Web 3D Service is a portrayal service for
three-dimensional geodata, delivering graphical elements from a given
geographical area. In contrast to the OGC Web Mapping service (WMS) and the OGC
Web terrain service (WTS) 3D scene graphs are produced. These scene graphs will
be rendered by the client and can interactively be explored by the user. The
W3DS merges different types (layers) of 3D data in one scene graph.

WTS = A Web Terrain Service (WTS) produces views of georeferenced data. We define a “view” as a visual representation of geodata; a view is not the data itself. These views are generally rendered in a pictorial format such as Portable Network Graphics (PNG), Graphics Interchange Format (GIF) or Joint Photographic Expert Group (JPEG) format.

สรุปคือ W3DS นั้น ได้ output เป็นแบบ VRML หรือ SVG ที่ให้ user สามารถเปลี่ยนมุมมองได้อย่างอิสระ

แต่ะ WTS คือ snapshot ภาพ 3D render นั้นเอง

Powered by ScribeFire.

เปลี่ยน run level ใน Ubuntu 7.1.0

Standard

ปกติ หากต้องเปลียน run level ใน debian/ubuntu ก็มักจะต้องไปเปลี่ยนใน

/etc/inittab

ทำอย่างนั้นมาตั้งนาน

มาเจอมุขใหม่ ของ Ubuntu 7.1.0 ก็งงตั้งนาน ค้นไป ค้นมาจึงเจอว่า เค้าเปลี่ยนไปใช้ upstart แทน

ก็ต้องทำการเปลี่ยนไปเป็น

/etc/event.d/rc-default

แล้วแก้ไขในส่วน telinit สะ

ต่อไป Debian/Fedora/Ubuntu คงใช้แบบนี้ไปตลอดละ

อ้างอิง 1,2

Powered by ScribeFire.

ใช้ author_keys ใน SSH

Standard

จะเขียนหลายที แล้วก็ลืม ก็เลยเขียนสะ

คือ ปกติใช้ SSH มันก็ปลอดภัยอยู่ประมาณนึง แต่มันก็ยังไม่ปลอดภัยสะทีเดียว เพราะพวก hacker อาจใช้การสุ่ม passwd เข้ามาได้ หรือหากเค้าได้ passwd เราจากที่ไหนก็อาจจะเข้าไปได้

แต่การสร้าง Privatekey ก็เหมือนใส่กุญแจ lock จะสามารถ login ได้จากเครื่องที่มีกุญแจ อยู่เท่านั้น กุญแจนั้นก็เป็นไฟล์ มีรหัสอยู่ภายในธรรมดา งั้นเรามาเริ่มสร้าง กุญแจภายในเครื่อง client กันก่อน

ถ้าใน linux ให้ใช้คำสั่ง

ssh-keygen -t dsa

มันจะถามว่า เก็บกุญแจไว้ที่ไหน ส่วนใหญ่ก็ใน /home/<name>/.ssh/

แล้วก็ทำการใส่ passpharse ก็เหมือนใส่ password key ที่จะใช้ไข เข้า เครื่อง server

จากนั้นก็จะได้ ไฟล์ id_rsa.pub

ให้เราทำการ copy ไฟล์นี้ไปไว้ที่เครื่อง serverไว้ในไหนก็ได้

แล้วให้ทำการแทรกข้อมูลของไฟล์ กุญแจ id_rsa.pub เข้าไปใน /home</name>/.ssh/author_keys

โดยใช้คำสั่ง

cat id_rsa.pub >> /home/<name>/.ssh/author_keys

เพราะว่าเราสามารถสร้าง กุญแจจากหลายเครื่อง client เข้าสู่ server จึงต้องทำแทรกเข้าไปในไฟล์นั้น

จากนั้นก็คงจะใช้ได้แล้วละนะ

Hello world!

Standard

สวัสดีครับ ถ้าใครเข้ามาอ่าน blog อันนี้หวังว่าจะมีประโยชน์อะไร ไม่มากก็น้อย นะครับ จุดประสงค์ของ blog อันนี้แค่เอาไว้เป็นเครื่องช่วยตืนความจำ ของผม แต่ก็พร้อมจะเผยแพร่ให้กับทุกคน

หากมีอะไรเพิ่มเติม สงสัย ก็ comment ไว้ได้นะครับ ถ้าช่วยตอบได้จะช่วย

 

OpenLayers ตอนที่ 2

Standard

ได้เริ่มต้นกันไปแล้วในตอนที่ 1 ตามที่ได้กล่าวมาไว้ว่า เริ่มต้นกับ OpenLayers นั้นง่ายมากแต่จะเริ่ม Advance ก็ต้องใช้วิทยายุทธกันหน่อยเพราะ Document นั้นไม่ละเอียดแต่จะบอกเป็น Class กันไป

1. ทำงานกับ UTM Projection
โดยปกติจะมีค่าเป็น LonLat แต่เราสามารถทำการตั้งค่าให้ MapContruction ของเราเป็น UTM ก็ได้

// create a map with default options in an element with the id “map1″
var map = new OpenLayers.Map(“map1″);

// create a map with non-default options in an element with id “map2″
var options = {
maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
maxResolution: 156543,
units: ‘meters’,
projection: “EPSG:41001″
};
var map = new OpenLayers.Map(“map2″, options);

หรือเราจะระบุเป็น Layer ไปก็ได้

var basemap = new OpenLayers.Layer.WMS( “Boston”,
“http://boston.freemap.in/cgi-bin/mapserv?”,
{
map: ‘/www/freemap.in/boston/map/gmaps.map’,
layers: ‘border,water,roads,rapid_transit,buildings’,
format: ‘png’,
transparent: ‘off’
},
{
maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656),
maxResolution: 296985/1024,
projection:”EPSG:2805″,
units: “meters”
} );

2.setCenter or zoomToExtent

การจะใช้ Zoomtopoint ก็ไม่ยาก แค่ใช้คำสั่ง

map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);

แต่มี ระยะ zoom นั้นมีข้อจำกัด ที่ถ้าจำไม่ผิด น่าจะ 14 หรือ 15

หากต้องการให้ละเอียดมากขึ้นอาจจะต้องใช้ คำสั่ง

map.zoomToExtent( new OpenLayers.Bounds(Yvalue-0.005,Xvalue-0.005, Yvalue+0.005, Xvalue+0.005));

3.สร้าง Markers
ต้องดำเนินการขั้นตอนคร่าว ๆ ดังนี้

var url = ‘http://boston.openguides.org/markers/AQUA.png’;
var sz = new OpenLayers.Size(15, 22);
var calculateOffset = function(size) {
return new OpenLayers.Pixel(-(size.w/2), -size.h);
};
var icon = new OpenLayers.Icon(url, sz, null, calculateOffset);
markers = new OpenLayers.Layer.Markers(“markers”);
pointnode = new OpenLayers.LonLat(0,0);
marker = new OpenLayers.Marker(pointnode, icon);
markers.addMarker(marker);

และหากต้องการ removemarker

markers.removeMarker(marker);

4.ดู Bounding Box ปัจจุบัน
ต้องทำการ setBaseLayer สะหน่อย
ตัวอย่างง่าย ๆ
map.setBaseLayer(dem);
var box = map.getExtent();
jQ(‘span[name="ulx"]‘).html(box.left);
jQ(‘span[name="uly"]‘).html(box.top);
jQ(‘span[name="lrx"]‘).html(box.right);
jQ(‘span[name="lry"]‘).html(box.bottom);

แต่หากต้องการให้เปลี่ยนตลอด เมื่อ map มีการเปลี่ยนแปลงก็ต้องทำการ add Event ตามข้างล่างเป็นตัวอย่าง Event “moveend” กับ map

map.events.register(“moveend”, map, function() {
showbox();
});

Open Layer บทที่ 1

Standard
หลังจากดูคนอื่นใช้กันมานาน ก็หาโอกาสจะทำ app สักตัวที่ใช้ OpenLayers มานาน มาถึงวันนี้ก็เริ่มกันสะที

ดูรวม ๆ OpenLayers เป็น API tool ที่ใช้งานง่าย สำหรับงานง่าย ๆ เช่นเปิดมาหน้าแรก add layer ตามตัวอย่างที่มีเยอะแยะใน web

ขั้นต้นก็ add Openlayers.js
<script src=”OpenLayers.js”></script>

เริ่มต้นหากจะ add layer ก็ทำตามตัวอย่างไป คงไม่อธิบายว่าทำอย่างไรแต่เกร็ดน่าสนใจคงเป็นการ add Base/Overlay

ดูเหมือนว่าจะ detect เอาเอง โดยหากต้องการระบุให้ WMS เป็น overlay ก็ต้องเพิ่มในส่วน

transparent: “true”, format: “image/png”

var wms = new OpenLayers.Layer.WMS("NASA Global Mosaic",   <---name
"http://wms.jpl.nasa.gov/wms.cgi", <---url
{layers: "modis,global_mosaic"}, <---params
{'projection':none}); <---options

ตัวอย่างจริง

layersensor = new OpenLayers.Layer.WMS( 'sensor',"http://mizu.info.gscc.osaka-cu.ac.jp/waterwqiop/owsraster.php",
{layers: 'sensor','gszMapName':'/home/msapp/water/wcs.map','wpsoutputs':'/var/www/html/wpsoutputs/',
'resultpath':sosreference,'coln':coln.substring(4),'modelname':'sensor',transparent: "true", format: "image/png"});


ประกอบด้วย 4 ส่วนหลัก name,url,params และ options โดยที่สองตัวหลังจะต้องอยู่ในเครื่อง {} เพราะมีได้มากกว่าหนึ่ง

เกร็ดเล็กน้อยอีกอันก็คือ

คำสั่งเป็นการเพิ่ม หลาย Layers ในครั้งเดียว

map.addLayers([layer, lakewms]);

และ เพิ่มแค่ 1 layer

map.addLayer(layer);

จากที่พยายามทำ app ขึ้นมา ก็ใช้งานได้ดี มีความสามารถหลากหลาย มากมายแต่ คงต้องบอกว่า ตัวอย่าง (มีแต่แบบง่าย ๆ แสดงไว้) หรือ document ยังขาดแคลน ทำให้ยังไม่สามารถใช้ประโยชน์ได้เต็มที่

Powered by ScribeFire.