_____ถ้าจะถามว่าภาษาอะไรที่จะเหมาะสมและมีความสามารถที่หลากหลายในงานด้าน GIS เวลานี้ผมนึกถึง Python เป็นเพียงภาษาเดียวด้วยความที่ เป็นภาษาที่มี Library ที่สามารถเข้าถึงการจัดการ Geometry object ของโครงสร้างข้อมูลได้ และยังมี Lib ที่ใช้ Processing และ analysis ข้อมูลเวกเตอร์และราสเตอร์ได้อีกด้วย ดังนั้นถ้าหากอยากจะเป็น GIS programmer ผมแนะนำว่าสมควรอย่างยิ่งในการเรียนรู้ Python เพราะเป็นภาษาที่ช่วยให้เราทำงานกับข้อมูลมากและซับซ้อนได้ง่ายขึ้น

_____วันนี้ผมมีอีกหนึ่งซอฟต์แวร์ Library สำหรับ GIS ที่ชื่อว่า Geoscript มาแนะนำ Geoscript เป็นไลบารี่ที่เพิ่มเอาความสามารถในการจัดการและประมวลผลข้อมูลเชิงพื้นที่ เข้าไปอยู่ในภาษาแบบ script เช่น Python, Javascript, Groovy เป็นต้น โดยทำงานในลักษณะการ wrap เข้ากับ java code ชื่อดังอย่าง Geotools และ JTS ทำให้เราสามารถเรียกใช้งานฟังก์ชั่นผ่านภาษา script ได้ ผมเองได้ลองแล้วในส่วนของ Python โดยทำการติดตั้ง jython (ตัวช่วยให้เรา run python บน java ได้) เท่านี้ก็ลุยได้เลย นอกจากนี้ที่ผมชอบคือสามารถใช้ javascript ในการ process ข้อมูลอย่าง shapfile ได้อีกด้วย ทำให้เพิ่มความสามารถของ web application เข้าไปอีก การเขียนโปรแกรมก็ไม่ยากสามารถเขียนแบบ OOP ผ่าน Geoscript API ที่เตรียมไว้ ซึ่งนอกจากการเขียนโปรแกรมเพื่อประมวลผลข้อมุล GIS ทั่วไป เรายังสามารถ integrate ตัว Geoscript เข้ากับ WPS เพื่อทำ online processing Service ได้อีกด้วยครับ ท่านที่สนใจแวะไปดาวน์โหลดโปรแกรมมาใช้งานได้ที่ http://geoscript.org/py/

ขอแสดงตัวอย่างง่ายๆ การสร้าง convex hull บนข้อมูลจุด และสร้างวงกลมใหญ่ล้อมรอบข้อมูล

from geoscript.layer import Shapefile
from geoscript.viewer import plot
from com.vividsolutions.jts.geom import GeometryCollection
from com.vividsolutions.jts.geom import GeometryFactory
from com.vividsolutions.jts.geom import PrecisionModel
from com.vividsolutions.jts.algorithm import MinimumBoundingCircle
#Get the point shapefile
staLayer = Shapefile(‘/home/gregcorradini/wa_stations.shp’)
#Create a list of feature geometries
pntGeoms = [f.geom for f in staLayer.features()]
#Create a GeometryCollection from our list of points
geomColl = GeometryCollection(pntGeoms,GeometryFactory(PreciscionModel(),4326))
#Get the geometry collection’s convex hull
geomConvexH = geomColl.convexHull()
#Get the geometry collection’s minimum bounding circle
mCircle = (MinimumBoundingCircle(geomColl)).getCircle()
# Plot the geometries, BANG
plot(pntGeoms + [geomConvexH] + [mCircle])
ตัวอย่างผลลัพธ์ดังภาพนะครับ
อ้างอิงจาก