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

The Change of Python 2.4 -> 2.5

Standard
ความงงงวดมาบังเกิด เมื่อ python code ที่เขียนมาอย่าง ยากลำบาก อยู่ดีๆ run ไม่ได้ จากการตรวจสอบจึงรู้ว่า ข้อแตกต่างคือ ได้มีการ upgrade python -&gt; 2.5

การเปลี่ยนแปลง ครั้งใหญ่คือ Elementtree ได้รวมเข้าไปอยู่ใน python โดยตรง จากที่เมื่อก่อนต้องเรียกผ่าน cElementtree

ก็ลองต้องทำการเปลี่ยน code นิดหน่อย

python 2.4

from cElementTree import Element, SubElemet,ElementTree

python 2.5


from xml.etree import ElementTree
from xml.etree.cElementTree import Element, SubElement


ขั้นต้นในการ require

จุดหนึ่งที่สังเกตอีกอัน ก็ตอน write Elementtree



python 2.4


ElementTree(featureMember).write(self.fh,”utf-8″)


python 2.5



ee = ElementTree.ElementTree(featureMember)
ee.write(self.fh,”utf-8″)


เปลี่ยนตามข้างบน แต่น่าจะมี รายละเอียดหรือความแตกต่างเพิ่มเติมอีก

ข้อมูลเพิ่มเติม 2 3


Powered by ScribeFire.



Technorati Tags: