林旻 徐志
(1.南京審計大學實驗中心 江蘇省南京市 211800 2.江蘇省南京市江寧區(qū)審計局 江蘇省南京市 211100)
隨著計算機技術的飛速發(fā)展,Python 作為一種腳本語言在目前已經有了十分廣泛的應用,其擁有的強大功能使其得到了許多行業(yè)領域得認同,它不像其他語言一樣需要使用編譯器,同時還擁有十分豐富的函數庫,人們能夠通過Python 語言高效地開發(fā)出新的應用程序。GIS 即是指地理信息系統,對地理分布、空間分布等數據進行輸入、存儲、查詢以及分析和顯示等操作,將這些數據變成地圖并使其視覺化,目前已經被廣泛應用于許多不同的領域。隨著科學技術的進步發(fā)展,我國的地理信息技術也在發(fā)生質的改變,同時也需要不斷利用新的技術手段促進其持續(xù)發(fā)展。而如果利用Python進行GIS 的開發(fā)和應用、利用Python 調用ArcPy 集成ArcGIS 空間分析,那么過程必然會變得更加簡便,本文就利用Python 語言及其函數庫對GIS 應用的開發(fā)進行了具體的研究。
眾所周知Python 是一種擁有強大函數庫的語言,而其函數庫又可分為第三方函數庫和標準函數庫兩大類,其中第三方函數庫指的是在原有基礎上開發(fā)而來的,是Python 區(qū)別于其他眾多語言之處。而標準函數庫則是指Python 本身就有的函數庫,能夠實現網絡、字符、系統等基礎性的操作控制,Python 中有超過200 個的標準庫[1-2]。而如果要在Python 的基礎上進行GIS 的應用開發(fā),那么必然就需要使用到第三方函數庫,以下便是幾個在GIS 應用開發(fā)中常用的Python 第三方函數庫的簡單介紹。
ArcGIS 適用于地理處理操作,能夠完成空間分析、數據轉換、地圖模型制作等任務,它支持多種腳本語言,但自從ArcGIS10 的出現,其默認安裝程序已經不再是VBA 了,近幾年主要以Python作為其替代,而Arcpy 作為ArcGIS10.X 的原有程序窗口,主要被應用于地理數據的交互處理。首先,程序語言編輯器也被稱作了集成開發(fā)環(huán)境,開源軟件、商業(yè)軟件均是市場上常見的程序語言編輯器,Arcpy 的常用語言編輯器有spyder、Python Shell 等。而Arcpy在spyder2.7 編輯器中的編輯和運行,則需要按照一定的步驟進行。ArcGIS 在Arcpy 中的開發(fā)應用還需要很好地掌握ModelBulider,從而才能更好地發(fā)揮Python 的腳本作用。ArcGIS 的處理框架包括了ArcToolbox、ModelBulider、Python 三大部分。在ArcToolbox 中主要有三種工具箱,腳本工具箱、內置工具箱和模型工具箱,其中腳本工具箱是執(zhí)行、處理相關腳本文件的,內置工具箱則可實現對某一命令的批處理,模型工具箱則是由ModelBulider 創(chuàng)建的。ModelBulider 包括了連接器、值變量、數據變量以及工具四種類型[3-4]。對于已經構建好的模型流程圖可以將其轉變?yōu)镻ython 代碼,按照順序單擊Model--Export--To Python Script 就能夠完成對其的轉變了。運用ArcGIS 的空間分析功能,將土地利用現狀調查成果、南京天地圖數據、衛(wèi)星影像ENVI 識別數據的建設和占用,與飲用水水源保護紅線區(qū)域作疊置分析,并且借助model-builder 固化相關審計模型[5]。
Geopandas 是建立在pandas 基礎上的第三方函數庫,主要用于地理空間數據的處理,在繼承了pandas 的優(yōu)點的同時,還為地理空間數據的操作提供了高級接口,從而賦予Python 進行GIS 的相關操作的可能性。Geopandas 中包括了geodataframe、geoseris 兩種數據類型,分別是pandas 和dataframe 的子類,這兩種類型的數據也可以被理解為空間數據的儲存器,能夠記錄空間對象的幾何位置、屬性等。而shapefile、geodataframe 作為兩種不同格式的文件是可以實現相互轉化的。通過Geopandas,我們可以制作平面的、曲面等多種幾何形狀的地圖信息,還能進行標點、著色等,能夠實現批量化的GIS 操作。Geopandas 有點/點集合、線/線集合、多邊形/多邊形集合三個基本類的幾何對象,通過Geopandas,我們可以實現讀取空間數據、寫入空間數據等操作。Geopandas 可以讀取shapefile、GeoJSON 文件等格式的命令,使用“GeoDataFrame.to_file()”這一方法則可導出多種不同的標準格式,從而寫入空間數據。matplotlib 庫作為用于地圖的制作的高級接口,其操作十分簡便。而地理信息有時也需要進行投影,投影又包括了設置投影和重新投影兩種操作,如果使用了“from_file()”命令加載的數據那么一般都會有投影信息,而如果沒有獲得投影信息,那么就需要設置CRS 以設置投影[6-7]。
GDAL/OGR 文庫主要被應用于GIS 格式和擴展之間的轉換,其目前能夠支持上百個光柵驅動盤以及矢量,有著十分廣泛的應用,例如ArcGIS、GRASS GIS、ERDAS 等絕大部分的GIS 軟件都需要使用 GDAL/OGR 進行翻譯,通過 GDAL/OGR 庫,能夠實現對地理空間數據管理系統的柵格文件數據和矢量的支持。GDAL 對于數據的解析需要使用到抽象數據模型,而抽象數據模型又包括了坐標系統、dataset、colortable 等。GDAL 包括了GDALMajorObject類和GDALDriver 類,前者是帶有元數據的對象,后者則是對文件進行格式分類管理的。OGR 可分為Geometry、Spatial Reference、Feature 以及Feature Definition 等共七部分,其中Geometry 可實現幾何操作、格式轉換、空間投影等,Spatial Reference 能夠實現投影和基準面的定義,Feature 則容納了geometry 和geometry 的雙重屬性[8-9]。
RSGISLib 庫能夠對圖像進行詳細的分類、過濾、統計,是遙感工具光柵處理和分析的函數庫。
PyProj 庫能夠進行各種地理參考系統投影和坐標的變換,也能夠利用特定的基準對地面、距離進行測量和計算。PyProj 作為一個開源項目,也能夠被其他語言進行調用,其包括了Proj 和Geod 兩大類,其中Geod 主要被應用于兩個不同位置點之間的距離、相對的方位等,而且也能在兩點間插入不同要求的點,其主要包括了fwd()、inv()、npts()三個函數,第一個函數是正轉換函數,輸入前方位角和后方位角,能夠得出經緯度;第二個函數是反轉換函數,輸入經緯度,然后就能得出前方位角、后方位角和距離;第三個函數中輸入起始點及終點的坐標、等分點數目,就能得出等分點之間的球面距離。其中Proj 的主要功能是實現經緯度和地圖投影坐標之間的轉換,在轉換的過程中,需要使用到“transform()”函數,才能實現制圖的有效轉換。transform()函數就相當于Proj中的子程序,其用法為:x2,y2,z2=transform(p1,p2,x,y,z=None,radians=False),再輸入x,y,z 的時候,可以分別是數組或序列的某一種形式[10]。
本文以Arcpy 作為開源GIS 應用開發(fā)基本的函數庫,對具體的操作進行了簡要的講解,具體如下。
在進行ArcGIS 地理處理前,需要將Arcpy 站包點導入,并對Arcpy 當前工作空間進行設置,具體代碼如下:
Import arcpy
from arcpy import env
env.workspace=“c:/data/data.gdb”
這就是對工作環(huán)境的基本設置,完成后我們需要使用到Analysis Tools 中的Buffer,雙擊打開工具后將相關的參數填入,然后即可關閉并執(zhí)行Buffer 工具,可以使用右側的工具幫助或代碼自動補全功能進行操作,具體代碼如下:
Import arcpy
arcpy.Buffer_analysis("Streams","Stream_Buff","X Meters")
然后便會出現X 米的多邊形圖層,這時我們可以使用pan 和zoom 工具進行平移或縮放,以便于看清輸出要素。此時,一個非常簡單的地理圖像信息就構建完成了。但使用Arcpy 進行GIS 應用開發(fā)是一個較為復雜的過程,由于篇幅限制本文不再做更加詳細的講解了,需要者可從其他渠道學習更為全面、更為深入的操作技能。
Python 作為一種編程語言,有著可伸縮度高、可跨平臺、可嵌入以及穩(wěn)定成熟和免費開源等優(yōu)勢,因而其應用范圍也在不斷擴大。數年前人們早已將Python 應用于GIS 的開發(fā)上,使開源GIS 的應用開發(fā)變得更加簡便。在Python 的基礎上進行開源GIS 的應用開發(fā),能夠較好地對復雜的地理信息系統進行處理,從而大幅提高GIS 的處理效率。而隨著信息技術的迅猛發(fā)展,Python 的第三方庫也在不斷擴大,為GIS 的開發(fā)提供了更加多樣化的選擇。以上就是本文對于基于Python 的開源GIS 應用開發(fā)進行了詳細的討論,在對幾個常用的第三方函數庫進行簡單介紹的基礎上進行了開源GIS 應用開發(fā)的舉例,以期對相關學習者、使用者提供一些參考。