เคยแต่ใช้ 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