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 หรือข้อผลาดอย่างไร ถ้าพบจะมาบันทึกไว้อีกที

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.

WxS Mapscript non-work on NON-CGI environment

Standard
หลังจากปวดหัว ตั้งแต่เช้า ว่าอยู่ดี ๆ ทำไม script เก่า มันใช้งานไม่ได้ฟะ ในที่สุดก็ค้นพบว่า mandriva 2008 ที่ลงไปนั้นยังไม่ได้ปรับแก้ให้ ใช้ php ใน แบบ cgi ไม่ใช่แบบ mod_php

เพราะจะมีผลกับคำสั่งบางอย่างของ php-mapscript เช่น WxS Mapscript

พอสร้าง object

$request = ms_newowsrequestobj();

มันก็เงียบไป แล้วไม่มี error ใด ๆ ทั้งสิ้น ทั้งทางหน้าจอและใน log

บางอ่านบอกให้ทำการ parse จาก request url แล้วใส่เข้าไปด้วยวิธี

$request = ms_newOwsRequestObj();



foreach ($_GET as $k=&gt;$v) {

$request-&gt;setParameter($k, $v);

}



ก่อน $request-&gt;loadparams(); แต่สำหรับเราลองแล้วยังงัยก็ไม่สำเร็จ ก็ไม่เข้าใจ

ก็เลยปรับเปลี่ยนไปใช้ แบบ cgi ดีกว่า

ถ้าใครเจอปัญหาแบบนี้ลองแก้ตามข้างบนแล้วกันถ้าผ่านนะ


Powered by ScribeFire.

Mapserver 5.0.0 Change

Standard

ไม่มั่นใจ เหมือนกันว่าเป็นที่ Mapserver หรือ GDAL หรือ จากส่วนไหน แต่แน่ ๆ คือ

หากจะใช้ Layer OGR จากเดิม หากจะใช้ Labelitem หรือ Classitem จะต้องใช้

ogr:DO หรือ ogr:Name

ต่อตอนนี้นั้นไม่จำเป็นแล้ว ให้ใช้แค่ DO หรือ NAME เท่านั้น

และอยู่ดีก็เจอปัญหาแปลกเกี่ยวกับ

PHP Warning: [MapServer Error]: msProcessProjection(): no system list, errno: 2

หลายท่านแนะนำว่าให้ใส่

CONFIG “PROJ_LIB” “/usr/share/proj/”

ใน map file

หรือ ใส่ SetEnv PROJ_LIB “/usr/share/proj/”

ไปใน apache config สะ แต่บางที คิดว่ามันเป็น bug อะ เพราะ พอเกิดข้อพลาดมันก็แจ้ง แต่พอ restart apache ก็หายสะงั้น แล้วลองเอา ไอ้ proj_lib ที่ใส่ค่าไว้ทั้งหมดออกไป ระบบก็ทำงานได้ดี

Powered by ScribeFire.