任俊儒
(華北地質勘查局五一四地質大隊,河北 承德 067000)
隨著市場環境的進一步完善,經濟的高速發展,地質勘查工作也變得豐富起來,從礦藏、石油到地熱、礦泉水,地質勘查項目涉及的內容越來越廣泛。近年來提出了“城市地質調查”的概念,將傳統的地質勘查與城市的可持續發展相結合,進行基礎性、綜合性、前瞻性的地質勘查工作,對城市的環境承載力、資源保障力進行評價、同時也為城市規劃、建設以及管理決策提供基礎數據支持。正是由于地質勘查類項目的多樣化、細致化,內容進一步豐富詳盡,致使各類的地質勘查專題地圖的編輯、修飾、輸出等工作量顯著增加。
傳統的制圖方式,是以單幅圖紙為作業單位,逐個進行處理,需要較大的人力與物力來保障工作的順利開展。地質勘查專題地圖的制作主要分為要素編輯、整飾、輸出、打印等步驟。本文結合實際工作項目,對各步驟進行分析,針對制圖的輸出方式進行探索,并結合Arcpy等相關功能,實現了專題圖的批量生成。本文將相關的技術方法進行總結、整理,為減少人工處理、提高制圖效率、實現專題圖批量生成等方面提供參考經驗。
(1)數據準備。專題地圖編制的數據準備主要包括柵格數據和矢量數據的準備。柵格數據一般為遙感影像,作為底圖使用;矢量數據包括基本地形、地物、專題要素等。首先將需要的各類數據進行收集,并且注明各類數據的基本情況,例如影像分辨率、坐標系、數據生產時間等,以備后續的處理和編輯工作有所依據。
(2)數據編輯。數據的編輯分為多個步驟,首先是數據格式的轉換,在收集的數據中可能存在DWG、SHP、WP、WL、WT、HDF等不同格式的數據,為了制圖統一化,需要將格式進行統一。其次是進行坐標轉換,在工作當中會遇到北京54、西安80、CGCS2000等不同的坐標系,一方面為了制圖的統一,另一方面遵循測繪地理信息行業的要求,需將數據統一轉為CGCS2000坐標系。再次是數據的符號化,按照規范要求添加行政界線、道路網、居民點、水系、等高線、高程點等,另外是專題要素的符號化,例如地質類型、水源地、鉆孔、礦山采區分布等。第四是地圖注記,主要是對各類數據符號化的補充說明,例如村莊、道路、水系的名稱,高程值注記、專題內容的注記等。
(3)圖框編輯。圖框的編輯,主要包括圖紙的大小、內外圖框、比例尺、指北針、圖名、格網點坐標、坐標系、作業單位信息等。一般采用50cm×50cm的圖紙,按照分幅要求對制圖區域進行分割。在制圖過程中圖框的要求是統一的,主要的問題是處于接邊處的符號、注記等內容可能會丟失,不能在每幅圖紙上正確顯示,所以要進行檢查、修改。
(4)地圖輸出。地圖的輸出是指地理文檔在完成數據編輯、圖框編輯之后輸出為圖紙的過程。地圖的輸出之前都是紙質的,但隨著技術的發展,紙質圖紙的利用率降低,現在的地圖輸出一般指電子圖紙,例如矢量圖、柵格圖片等。如果需要紙質圖紙可以直接利用打印設備或者繪圖儀將電子地圖紙質化,重要的一點是確保電子地圖能夠達到柵格采樣分辨率要求[1]。
地質勘查專題圖的制作一般都是采用CAD單幅圖紙編輯,在圖形繪制過程中比較方便,但是在數據處理、注記添加、圖框編輯等方面都比較繁瑣,逐個進行編輯使工作量增大,工作內容重復,錯誤率提升。在地圖編輯過程中我們采用了ArcGIS軟件,提高數據處理以及圖框編輯的工作效率。
除圖紙編輯之外最為耗時耗工的是圖紙的輸出工作,結合現階段項目的具體要求,以提供柵格電子地圖為主,例如JPG格式的電子地圖或者地圖冊。利用CAD進行電子地圖輸出,工作效率較低,而且是反復的機械操作,為了能夠快速、便捷、批量地完成專題圖的輸出工作,借助ArcGIS的腳本語言Python,對批量制圖技術中各工序編寫批處理腳本來實現[2]。
Arcpy是Python語言的站點包,其在ArcGIS for Desktop環境下,通過編寫腳本的方式高效完成地理數據分析、轉換、管理以及地圖自動化等功能。
Python是一種跨平臺的最初設計為編寫自動化腳本的計算機程序語言,其結合了解釋性、互動性、編譯性和面向對象等特點。該語言定位是“優雅”、“明確”、“簡單”,簡單來講Python語言是通過調用不同的站點包來實現功能的,因此Python語言又稱為膠水語言。
基于Python語言的特點,ArcGIS選擇其為腳本語言,自9.0版本開始就集成了python語言包。Arcpy主要包含數據訪問、地理分析、自動化制圖等模塊,數據訪問模塊主要是實現各版本數據編輯的調用,包括矢量以及屬性域等;地理分析模塊主要是實現空間分析和運行、網絡分析工具、地統計分析等功能;自動化制圖模塊主要是實現操作mxd、擴展數據驅動、自動導出PDF和打印等功能。
數據整理是將收集到的數據經過格式轉換、統一坐標系等操作之后統一放置在一個數據集中。本文是將數據整理到文件地理數據庫(.gdb)中,也可以整理到個人地理數據庫(.mdb)中,將數據按照類型進行分類,并依據屬性將數據符號化。在ArcMap中添加添加整張影像底圖,根據tfw文件對影像進行配置。至此各類圖形要素均可顯示,然后將行政界線、交通網、水系等,以及專題要素按照特定的符號顯示出來。
圖形的輸出一般采用50cm×50cm分幅,采用的紙張為620mm的卷紙,在輸出圖件之前要設置參數,ArcMap界面下打開“頁面和打印設置”,選擇自定義紙張,長寬均為62cm;布局視圖下的數據框的大小設置為55cm,位置居中;然后在圖框范圍內插入指北針、比例尺、圖名、坐標系、作業單位等信息。
數據驅動頁面是根據特定的圖層將圖紙輸出為PDF格式的圖集。本例中地質勘查專題圖以標準分幅格式進行輸出,比例尺為1:10000,選擇結合圖表作為數據驅動頁面的“索引圖層”,以該數據層的Text字段(圖幅號)作為“名稱字段”和“排序字段”。另一個參數是“范圍”,依據本例的比例尺和圖紙數據框設置,地圖范圍選“最佳大小”,邊距“大小為250m,指定使用地圖單位”。
參數設置完成之后,選擇“導出地圖”,設置分辨率等,由于數據驅動頁面只有在輸出PDF格式時使用,所以選擇保存格式為PDF,“頁面”選項中可以確定輸出的范圍以及保存的格式是單個PDF數據集還是多個PDF文件。
圖件輸出為PDF格式并不能滿足工程項目的需求,最為實用的是將圖紙輸出為JPG格式,并按圖幅號命名。在后續的工作中可以通過坐標值按照圖幅號進行索引查找,而且可以在沒有專業軟件的情況下打開圖件查詢相關信息。
利用Arcpy進行腳本程序編寫即可實現上述相關內容,相關代碼如下:

圖1 腳本程序編寫代碼
利用Python語言編寫腳本,首先“import”引入arcpy和os,利用“arcpy.mapping.MapDocument”確定工作空間,并用“CURRENT”參數確定當前文檔為工作空間;定義一個圖層“JHTBWC”作為數據驅動頁面圖層;使用“range”確定圖件的頁碼“pageNum”的取值范圍,將頁碼值賦值給數字驅動頁面;使用“arcpy.UpdateCursor”依據結合圖表圖層迭代更新游標“cursor”,通過循環遍歷每個圖件;最后使用“arcpy.mapping.ExportToJPEG”批量輸出JPG格式的圖件,通過設置該函數的參數,可以確定輸出路徑、輸出圖件的名稱、圖件的分辨率。在實際操作中,首先打開編輯好的mxd地理文檔,將Python程序代碼復制到Python窗口下,運行即可得到相應結果。
本文依托地質勘查專題圖的制作,通過對制圖流程的分析,發現在制圖過程中,尤其是電子圖輸出方面存在自動化不夠的情況,為了能夠提高工作效率引入了Arcpy,具體的說是利用ArcGIS的腳本語言Python進行編程,使用Arcpy站點包中的相關函數來實現圖件的批量輸出。
實現數據批量處理主要是解決兩個關鍵問題,一是遍歷所有要處理的數據;二是將遍歷后的結果用一種數據結構(如數組、鏈表等)存儲起來[3]。本文僅是結合Arcpy對圖紙的批量生成進行了分析和探索,為快速制圖提供了實踐經驗。Arcpy不僅應用于制圖,在GIS數據處理中也有廣泛的應用。Python語言的應用使地理信息工作避免了重復操作,提高了工作效率,也為GIS行業的發展提供了新的方向和切入點。