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