SWIG Mapscript vs PHP Mapscript

Standard

เคยแต่ใช้ PHP Mapscript มาสะนาน คราวนี้มาลองใช้ SWIG Mapscript ดูบ้าง ก็เลยลองกลับ Python 2.6

มาเปรียบเทียนกันเลยละกัน Code ที่แสดงเป็นการเปลี่่ยนค่า PROCESSING ของ RASTER layer แล้วทำการ QueryByPoint โดยใน PHP เจอปัญหาสามารถกำหนดค่า BANDS ได้เพียง 5 bands แต่ใน python ในนั้นไม่มีปัญหา รวมถึงหากกำหนดใน mapfile เช่นกันคาดว่าจะเป็นในเรื่องของ ขนาด shape result ที่ใหญ่เกินกว่าที่กำหนดไว้

เท่าที่ลองใช้ python mapscript ก็ใช้งานได้ดี โดยเฉพาะในแบบ interactive ทำให้ง่ายต่อการ debug

Python Code

import mapscriptomap=mapscript.mapObj("test.map")

olayer=omap.getLayerByName("testdata")

olayer.status=mapscript.MS_ON

olayer.clearProcessing()

olayer.setProcessingKey("BANDS","1,2,3,4")

queryPoint = mapscript.pointObj(-179.5,89.5)

olayer.queryByPoint(omap,queryPoint,mapscript.MS_SINGLE,-1)

olayer.open()

for i in range(olayer.getNumResults()):

result=olayer.getResult(i)

s=olayer.getFeature(result.shapeindex)

for i in range(olayer.numitems):

print "%s: %s" % (olayer.getItem(i), s.getValue(i)

olayer.close()

PHP Mapscript

dl("php_mapscript.so");$oMap = ms_newMapobj("/srv/maps/modis/config.map");

$oLayer = $oMap->getLayerByName("testdata");

$oLayer->clearprocessing();

$oLayer->setprocessing("BANDS=1,2,3,4");

$oLayer->set("status","MS_ON");

$queryPoint=ms_newPointObj();

$queryPoint->setXY(-179.5,89.5);

@$oLayer->queryByPoint($queryPoint,MS_SINGLE,-1);

$oLayer->open();

for ($i=0;$i< $oLayer->getNumResults();$i++){

             $oResult = $oLayer->getResult($i);

             $oshape = $oLayer->getfeature($oResult->shapeindex);

             foreach ($oLayer->getitems() as $name){

                          echo $name.": ".$oshape->values[$name]."\n";

             }

}

Result

x: -179.5
y: 89.5
value_0 : -9999
value_1 : -9999
value_2 : 4040
value_3 : 4785
value_list : -9999,-9999-4040,4785
red : 0
green : 0
blue : 0

New release OpenLayers 2.8

Standard

OpenLayers new version 2.8 ได้ออกมาแล้ววันนี้ หลัก ๆ แล้วก็ได้เพิ่มการศักยภาพการรองรับ Vector Feature มากยิ่งขึ้น รวมทั้งการ Parsing ที่เร็วยิ่งขึ้น

ยังมีการเพิ่ม control ใหม่ ๆ และก็การเพิ่มการ support Layers ใหม่ ๆ เช่น OSM และ ArcXML

รายละเอียดการเปลี่ยนและ bugfix ก็ตาม link

ในการส่วนการรองรับ WMS 1.3.0 อย่างสมบูรณ์ก็ต้องรอต่อไป อาจจะไปถึง Version 3.0 หรือหลังจากงาน FOSS4G2009

FOSS4G2009 Sydney,Australia

Standard

อีกครั้งสำหรับ FOSS4G Conference ครั้งนี้จัดที่ Sydney,Australia ระหว่าง 20-23 Oct 2009

FOSS4G Conference

ก็หวังว่าจะได้ไปร่วมอีกครั้งหลังจากครั้งที่แล้วพลาด เพราะยุ่งกับการเตรียมตัวจบ

ครั้งนี้ก็ได้มีส่วนร่วมนิดหน่อย (เท่านั้น) กับการช่วย อจ ไพศาลแปลข้อความเป็นภาษาไทย

ครั้งนี้ถ้าใครไปร่วมแล้วมีส่วนร่วมช่วย vote ให้ด้วยแล้วกันนะครับ เพราะมีคนส่งไปเกือบ 180 abstract แต่สงสัยจะรับได้ไม่เกิน 100 เท่านั้น

อยู่แถว ๆ หน้าที่ 5-7 ได้นะ ฝากด้วยนะครับ

Validation of Satellite Image with Ground Sensor Network based on OGC Web Services Framework (Sarawut Ninsawat)

ทั้งนี้และทั้งนั้น ฝาก vote ให้ของ อจ ไพศาลและ น้องชัยภัทร ด้วยนะครับ

The Capacity Building Tools ‘FOSS4G’ (Phisan Santitamnont)

Implementation OGC Sensor Web Enablement supporting Local Participation in Water Resource Management (chaipat Nengcomma)

Coordinate Systems and Axis Orientation ใน WMS 1.3.0

Standard

ก็ได้กล่าวไปบ้างแล้วสำหรับ การเปลี่ยนแปลงของ ระบบอ้างอิง x,y ใน WMS 1.3.0

ก็มาพูดถึงโดยละเอียดอีกทีว่าเป็นอย่างไร

  • โดยทั่วไปใน WMS 1.xx ส่วนใหญ่ทุกคนจะใช้ EPSG:4326 สำหรับ WGS84 lon/lat ในลักษณะนี้กันBBOX=-180.0,-90.0,180.0,90.0&…
  • แต่ใน WMS 1.3.0 นั้น EPSG:4326 เปลี่ยนแปลงไปเป็น WGS84 lat/lon โดยกำหนดพิกัดแบบ &BBOX=-90.0,-180.0,90,180.0

นั้นจึงเป็นปัญหาที่พบกันอยู่ซึ่งส่วนใหญ่เท่าที่เจอคือ EPSG ที่ใช้พิกัดแบบ longitude latitude  ส่วนใหญ่ใน WMS 1.3.0 จะเปลี่ยนเป็นแบบ lat/lon

  • แต่ใน WMS1.3.0 ก็ได้กำหนดระบบอ้างอิงมาเป็น CRS:84 ซึ่งจริง ๆ แล้วก็คือ EPSG:4326 ใน WMS 1.x.x เพราะเป็นระบบพิกัดแบบ WGS84 lon/lat นั้นเอง

แต่ก็ไม่มั่นใจว่า ระบบ EPSG ทั้งหมดจะเปลี่ยนจาก lon/lat  เป็น lat/lon ทั้งหมดหรือไม่ก็ต้องหาข้อมูลเพิ่มเติมอีกครั้งนึง

WMS 1.3.0 กับ OpenLayers

Standard

มากันอีกแล้วกับ version ใหม่ สิ่งสำคัญในการเปลี่ยนแปลงครั้งนี้คือ

  • ระบบ North-South , East-West
  • แล้วก็ จาก SRS มาเป็น CRS

ระบบใหม่นั้นจะให้ การอ้างอิง Axis เป็นไปตามค่าที่ระบุใน GetCapabilities  ดังนั้นจะใช้อย่างไรก็ต้องทำการศึกษาให้ดี รายละเอียดเพิ่มเติมก็ลองดูจาก http://mapserver.org/ogc/wms_server.html#wms-1-3-0-support

ตัวอย่าง website ภาพถ่ายทางอากาศของญี่ปุ่นที่ support WMS 1.3.0 เท่านั้น

http://orthophoto.mlit.go.jp:8888/wms/service/wmsRasterTileMap?VERSION=1.3.0&REQUEST=GetCapabilities&Service=WMS

แล้วเราจะใช้ WMS 1.3.0 กับ OpenLayers ได้ไหม คำตอบก็คือได้ แต่ไม่สมบูรณ์ เพราะได้รับการยืนยันจาก Chris Schmidt ว่าไม่รับรองการรองรับกับ WMS 1.3.0

แต่ต้องทำการตั้งค่า option ของ layers สะนิดหน่อยให้ใช้  Version 1.3.0 และ CRS

layer = new OpenLayers.Layer.WMS(“MLIT photo”, “http://orthophoto.mlit.go.jp:8888/wms/service/wmsRasterTileMap”,

{layers:”ORTHO”,

CRS:”EPSG:4612″,

VERSION:”1.3.0″

} );

แต่ก็ไม่คิดว่าน่าจะใช่วิธีที่ถูกต้อง เพราะใน URL ที่ส่งไปก็ยังมี SRS อยู่ด้วยต้องทำการหาวิธีที่ถูกต้องต่อไป

เท่าที่ใช้ดูเวลา zoom เข้าไปบางทีก็มีปัญหา แล้วก็ cache บางทีก็ต่อกลับหัวกลับข้าง คาดว่าคงเป็นปัญหาด้าน lon/lat และ lat/lon

ก็อาจจะต้องทำการแก้ไขสร้าง Layer Class ขึ้นมาใหม่ให้สำหรับ wms 1.3.0 โดยการจำลองจาก Layer WMS เดิมแล้วก็ทำการสลับค่า coordinate สะ

WMS and WCS Time

Standard

รับรู้มาตั้งนานแล้วว่า Mapserver support WMS และ WCS Time

เช่นในกรณี MODIS data set ซึ่งจะมีภาพทุก ๆ วัน ก็จะเป็นประโยชน์มากวิธีการทำก็มีใน

http://mapserver.org/ogc/wms_time.html และ http://mapserver.org/ogc/wcs_server.html#wcs-server

มาสรุปสั้น ๆ ให้ได้ใจความ

ก่อนอื่นทำความเข้าใจก่อนว่า 1 ไฟล์ภาพ คือ ข้อมูล หนึ่งวัน หรือหนึ่งเวลา อาจจะมีหลาย band ก็ได้

ขั้นที่ 1 ก็ทำการสร้าง index file ด้วยคำสั่ง

-gdaltindex inde.shp image/*.tif

ก็จะได้ไฟล์ index มาซึ่งจะมี colume “location”  ที่มี path และ filename อยู่

ก็ทำการสร้าง colume เพิ่มมาใหม่ด้วย โปรแกรม GIS เช่น Mapwindos, Qgis etc.. ตั่งชื่ออะไรก็ได้ ให้ข้อมูลเป็นชนิด Text

จากนั้นอาจจะต้องหาวิธีใส่ข้อมูลวันที่เข้าไป ในแต่ละ records.

เสร็จไปขั้นแรก

2. ก็มาสร้าง map file โดยทำการสร้าง layer สำหรับ tile index ซึ่งก็เป็นแบบทั่วไปของ Polygon SHP

3. ทำการสร้าง Layer สำหรับภาพ Modis โดยมีข้อมูลที่สำคัญตามนี้

Layer

NAME modisa ชื่อข้อมูล

Projection

“init=epsg:4326″

End

TYPE RASTER

DUMP True

TILEINDEX “location” ชื่อ colume ที่มี path และ filename

TILEINDEX “time_idx” ชื่อ layer ของ tileindex

METADATA

“wms_timextent” “2008-09-01/2008-09-05 จากวันที่ 1 ถึง 5

“wms_timeitem” “dtime” ชื่อ colume ใน shp ที่มีข้อมูลวันที่

“wms_timedefault” “2008-09-01″

…… และอื่นที่ ๆจำเป็นสำหรับ wms implementation

“wcs_timeitem” “dtime”

“wcs_timeposition” “2008-09-01/2008-09-05″

……

END

เป็นที่น่าสังเกตว่า

wcs_timeextent สามารถกำหนดเป็น แบบ range ได้ หลังจาก Mapserver version 5.4.1

จัดการเปลี่ยนหน้าตา 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 ไปสะ