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