那些年Python攻佔了GIS

會想去碰觸這個主題,是因為有一次和Marr無意間聊起Python對於GIS的影響。在尋找相關的資料時,受到James Fee的二篇文章”2011 — the Year Python Takes Over GIS” 和”2011 Was the Year of Python“的感召,加上「那些年」熱潮下,定了這個名字,如果你是因為這個keyword,不小心走進來的,跟你說聲「歹勢啦!」。

事實上,近年來我們觀察到Python在GIS領域所佔的比重有逐漸增加,無論是Open sources, 還是 commercial software 都有這個現象。OSGeo的wiki 上列出以 python為基礎的套件和軟體,除了核心基本的套件—GDAL和PROJ4有Python binding,Mapserver、QGIS和老牌的GIS open source – GRASS都支援 Python,另外,許多人文地理學者、空間經濟學家或社會學家會用到的GeoDa,也有Python 的套件—PySAL,當然也有套件Rpy支持python來使用統計軟體R,對於學術研究或教學而言,Python所提供的套件是相當充足的。

再來看看commercial的,ESRI 是最大的 GIS 軟體商,他們的GIS軟體ArcGIS在10版後,改為使用Python來擴充使用者對於軟體的使用,然而,ArcGIS 9還是用Visual Basic,在遠古時代的版本,ArcView 是以 Avenue,Arc/Info 是用AML(Arc Macro Language),二者都是ESRI為自家軟體所發展的語言,ArcGIS或早期的ArcView都是Desktop GIS,雖然使用上便利,許多命令的執行可透過在視窗上的命令列來執行,但許多情況預設的命令是無法滿足一些複雜的空間運算,或runtine 的工作,因此ESRI的軟體,一直以來都保持與一個腳本語言一起運作的模式,而ESRI在本身軟體發展愈來愈複雜的同時,他們並沒有繼續發展自家的腳本語言Avenue,先使用了VBA ,之後再用python,這是一個很有趣的現象,ESRI 看到了什麼?使他們選擇Python,而不是其它的腳本語言,如Ruby呢?讓我們看下去…..

Geospatial training services newsletter列出10個學Python來使用ArcGIS的理由,很明顯地,Python可以被用來在ArcGIS上處理複雜的分析且Python是一個簡單易學的語言。事實上,Python被認為是地理資訊專家和程式設計者的橋樑,ESRI 有更大企圖心想把他們的產品向資訊社群推,而不單純只在地理資訊社群,況且自已軟體商本身來設計和維護一套程式語言,對於以地理資訊軟體為主的公司,並不是一件明智之舉,他們須花更多人力資源在程式本身的scalability, reliability 和 compatibility,既然只是用來擴充自家產品的語言,何需自已設計一套,陷入wheel reinvention,況且已存在的general purpose語言有一堆,使用者多,程式的體質好的語言更是不勝枚舉,沒道理去自已搞一套!? 所以一開始ESRI導向使用VBA,有一陣子VBA是很熱門,加上Microsoft的推波助瀾,ESRI 在軟體由ArcView 3.x 升級為ArcGIS 8.x 時,也將由自家的Avenue 改為VBA,相關的VBA套件使ArcGIS的擴充變得更fancy,但VBA是Microsof為自家產品所設計的語言,並不為地理資訊所設計,ArcGIS 雖然與Windows 其它的軟體和應用程式整合的更好,但地理資訊本質上所追求的地理空間分析功能並沒有強化,另一方面,Python 算是geospatial open source的異軍突起,在C++和Java二大社群下,發展出來的另一個大的geospatial open source 社群,之前提到的已經有許多binding的libraries可以使用,在這種情勢下,商業軟體見風轉舵,也不是一見稀奇的事,因此在ArcGIS 10之後的版本,將Python納為ArcGIS中的重要一部份,即為正式的ArcGIS腳本語言,即ArcPy,ESRI 也極力推廣 Python在 ArcGIS 上的使用,不但有許多的desmonstrations、tutorials、workshops及official training courses。

Top 10 Reasons to Learn Python for ArcGIS

  1.  Automate your repetitive GIS tasks through Python scripts and free up your time for more important analysis work.
  2.  ESRI has fully embraced Python as its language of choice for geoprocessing.
  3.  Easy language to learn.
  4.  Automate map production and creation of PDF map books.
  5.  Find and fix broken data sources in your map document files.
  6.  Manage data within map document files by adding, inserting, or removing layers.
  7.  Analyze, convert, and publish your data to ArcGIS Server.
  8.  Create your own custom tools that can be integrated with ArcToolbox and shared with others.
  9.  Integrated with ModelBuilder for complex geoprocessing workflows
  10.  Add, edit, and delete records from tables and feature classes

 

如何安裝4store

所謂的「triplestore」也就是用來儲存的RDF的資料庫,並可以應用類似SQL的語言來查詢。現在已經有許多發展不錯的triplestore。這裡介紹一個輕簡的triplestore—4store的安裝。

1.安裝相關套件

sudo apt-get install build-essential libpcre3-dev libglib2.0-dev ncurses-dev libreadline-dev libtool libxml2-dev libxslt-dev automake git-core

2.安裝raptor

wget http://download.librdf.org/source/raptor2-2.0.0.tar.gz
tar -xvzf raptor2-2.0.0.tar.gz
cd raptor2-2.0.0

3.安裝rasqal

wget http://download.librdf.org/source/rasqal-0.9.22.tar.gz
tar -xvzf rasqal-0.9.22.tar.gz
cd rasqal-0.9.22
./configure –enable-query-languages=”sparql laqrs” && make && sudo make install

4.安裝4store

git clone git://github.com/garlik/4store.git
cd 4store
git checkout a907f3e0a3717c16dabe383d1834df6f8090b97a
./autogen.sh
./configure –enable-no-prefixes
make && sudo make install

5. 測試4store

make test