余詠勝,彭艷麗,尹言軍,黃兵杰
(1. 武漢市測繪研究院,湖北 武漢 430022; 2. 武漢市規劃研究院,湖北 武漢 430014)
Research on Photographic Map Automatic Processing Technology
Based on Arcpy
YU Yongsheng,PENG Yanli,YIN Yanjun,HUANG Bingjie
?
基于Arcpy的影像地圖自動處理技術研究
余詠勝1,彭艷麗2,尹言軍1,黃兵杰1
(1. 武漢市測繪研究院,湖北 武漢 430022; 2. 武漢市規劃研究院,湖北 武漢 430014)
Research on Photographic Map Automatic Processing Technology
Based on Arcpy
YU Yongsheng,PENG Yanli,YIN Yanjun,HUANG Bingjie
摘要:針對影像地圖的制作過程中存在重復作業、效率不高等問題,采用基于Arcpy站點包實現了影像地圖的自動處理,該方法通過地圖模板制作影像地圖標準文件,在此基礎上進行圖面要素和注記信息的自動處理,實現無用戶參與情況下高效地制作影像地圖。
關鍵詞:Arcpy;影像地圖;地圖模板;自動制圖
一、引言
影像地圖是以數字正射影像圖(DOM)為基礎,根據一定的數學規則、按照一定的比例尺將基礎地理信息和地圖專題信息以符號、注記等形式綜合表示在圖面上的一種地圖形式。影像地圖既包含豐富的影像信息內容,又能保證地形圖的整飾和幾何精度,在城市規劃、國土資源管理、環境保護和重大工程建設等領域得到了廣泛應用。
目前生產單位制作影像地圖主要通過人工方式采用計算機輔助制圖模式進行,利用具備強大圖形編輯、文字處理和符號制作功能的軟件如CorelDRAW、Adobe Illustrator等完成影像及相關專題地圖的制作。這類制圖軟件雖然具有豐富的地圖符號、注記和色彩表現等功能,但由于軟件沒有地理坐標的概念,圖形圖像要素不能與地理信息關聯,導致生產中作業效率不高、準確率難以保證,而且存在重復作業、自動化程度低等問題。本文針對這些問題,在影像地圖的制作技術、規范化、標準化方面進行了探索和試驗,提出了基于Arcpy的影像地圖自動處理技術并在生產中得到實際應用。
二、Arcpy與影像地圖模板
Python是一種通用的開源編程語言,易于學習和使用,在ArcGIS地理處理中用作腳本語言,在ArcGIS 9.3版本以前使用Python腳本擴展地理處理框架(GP,GeoProcessing),需要引用arcgisscripting,通過其提供的方法、屬性和函數完成自定義的GP開發與定制,而在ArcGIS 10中則不需要引用arcgisscripting命名空間,而是采用新的Arcpy命名空間,通過引用Arcpy站點包可以直接調用其提供的一系列方法、類和模塊。
Arcpy主要由制圖模塊、數據訪問模塊、空間分析模塊及擴展模塊和基本函數功能組成。通過Arcpy可以訪問并使用來自多個不同領域的GIS專業人員和程序員開發的大量Python模塊,用戶可以在交互式環境中快速創建腳本原型并進行測試,通過Arcpy訪問地理處理工具和其他函數、類和模塊,可以快速地創建各種簡單或大型應用程序,靈活高效地實現各類業務邏輯。在Python腳本中引用Arcpy的方式如下:
import arcpy
需要注意的是,Arcpy作為地理處理框架的一部分,旨在作為自動化處理工具,而不是自定義應用程序框架,Arcpy設計的出發點并不是用來代替ArcObject,因此不能通過Arcpy定義ArcGIS用戶界面的按鈕、對話框、菜單選項等功能,訪問的對象和函數也是有限制的,如不能通過Arcpy新建地圖文檔或更改地圖文檔的頁面大小和方向,這些功能必須通過ArcObject來實現。
Arcpy制圖模塊(arcpy.mapping)提供了對AO的高級封裝,通過一系列方法實現地圖范圍、比例尺、符號化、圖廓整飾等要素的修改,完成自動化的地圖打印或導出,但制圖模塊設計側重于修改已有的地圖文檔或圖層文件中的現有元素,不允許新建地圖文檔,因此在實現影像地圖自動處理之前必須先在ArcGIS中創建一個包含相應元素的影像地圖模板,然后再通過arcpy.mapping操作相關要素和內容。
影像地圖模板是一個Esri MXD文件,其目的在于方便Python腳本程序處理實現制圖處理的自動化。模板可以包含底圖圖層,也可以創建各種常用的頁面布局。創建地圖模板前應先確定地圖投影,然后按照設計要求設置紙張大小、確定制圖比例尺、圖名、圖例、坐標格網、指北針等一系列制圖要素的放置。
下面以A3幅面圖廓為例,簡述建立影像地圖模板的過程:在頁面布局視圖將頁面尺寸設置為42 cm×29.7 cm,將數據框的尺寸設置為39 cm×26.7 cm,然后按照文獻[2]設置圖名、圖廓線、指北針、圖例和注記等要素的位置、規格和顏色。圖式中一般情況下線劃粗細為0.15 mm,ArcGIS中線寬設置的默認尺寸單位為磅(1磅=1 mm×2.845),線寬數值應輸入0.427磅。創建的影像地圖模板如圖1所示,其中外圍黑線為頁面尺寸范圍,內圖廓矩形為數據框范圍。

圖1 影像地圖模板
三、影像地圖自動處理的實現
影像地圖一般以真彩色航空或衛星數字正射影像圖為基礎,輔助符號和注記要素進行圖面表達。本文以ArcGIS為平臺,保證影像底圖和矢量數據的準確疊加,結合頁面布局技術制作標準化的影像地圖模板,通過注記模板完成圖面內容及標注的設計,根據數據框對象以特定的繪圖順序和地圖投影顯示影像和矢量圖層,并控制制圖比例尺和輸出范圍,最后根據制圖需要處理圖廓要素并輸出處理成果。影像地圖表達應注重影像和地圖符號層的視覺層次關系,本文主要涉及影像地圖的自動化處理,符號和注記的形式和色彩設計不是本文研究的重點。影像地圖自動處理技術流程如圖2所示。

圖2 影像地圖自動處理技術流程
影像底圖數據應根據制圖的用途、精度等要求,盡可能地選擇時相最合適、波段最理想的數字正射影像圖作為影像底圖資料。作為底圖的遙感影像應注重處理的視覺效果,而不一定是解譯效果。通常影像數據組織包括影像數據的分幅處理、影像文件的標準化命名和影像數據的存儲方式。影像文件存儲可以按文件方式保存,也可以在ArcGIS中通過柵格數據集和柵格目錄兩種方式存儲和管理,柵格數據集表現為連續的單幅影像數據,而柵格目錄則是多個柵格數據的集合。無論影像數據以何種方式組織,在Arcpy中處理的方式類似,以下代碼是影像圖層的處理,其中cPath為影像文件路徑名,cName為影像文件名:
lay.replaceDataSource(cPath,"RASTER_WORKSPA
CE", cName) # 重定義圖層數據源
lay.name=cName# 重定義圖層名稱
圖面注記是影像地圖必不可少的內容,在成圖過程中占用較大的制圖工作量。圖面注記一般通過標注(Label)方式實現,在Label Manager中進行統一管理。Label對象是一種動態標注,可以自動調整標注位置、解決壓蓋沖突等問題,但Label對象會隨圖面顯示內容不同發生變化,考慮到固定比例尺制圖的需要,應在完成字體大小、顏色和方向等屬性設置后將動態Label對象轉換為該比例尺下的Annotation對象。Annotation是固定比例尺下靜態標注對象,以數據庫方式保存,系統會在數據庫中創建一個地圖注記類保存靜態標注的Annotation對象。由于地形地物的特殊性和復雜性,局部區域注記密集和壓蓋等的問題,仍需要通過人工方式進行局部修改。影像地圖的圖面注記具有可重用性,多數情況下不同時期的影像地圖注記可以略作修改或不需修改直接利用,需要對標注字體大小、顏色、方向等參數修改時,只需對注記模板進行適當的調整。
影像地圖圖面要素處理主要包括數據框操作、書簽要素生成和圖廓要素編輯等內容,圖面要素不能在數據視圖中操作,需要切換到布局頁面中完成。
首先應設置文檔對象,通過文檔對象才能處理地圖屬性,處理完畢后應保存并刪除文檔對象,解除文檔鎖定,釋放系統資源,避免不同地圖文檔引用可能引起的錯誤。根據Arcpy使用原則,用戶只能處理當前文檔或已有文檔,而不能通過Python腳本新建MXD文檔。打開MXD模板文檔的相關代碼如下,其中pMXD為模板文檔的路徑全名:
mxd=arcpy.mapping.MapDocument(pMXD)
數據框對象是Arcpy制圖模塊的重要對象,一幅地圖文檔必須至少包含一個數據框對象,如果文檔存在圖中圖或圖外圖的情況,則可以創建多個數據框對象。數據框具有定義顯示和使用其包含數據上下文的屬性,在數據視圖中顯示窗口即為數據框,系統根據圖層列表從下往上的順序顯示活動數據框的圖層。影像地圖模板中的數據框對象處理主要是控制地圖范圍,當頁面上數據框大小保持不變時,縮放地圖會導致地圖范圍發生變化。以下代碼是根據影像文件名cName設置數據框顯示范圍:
df=arcpy.mapping.ListDataFrames(mxd)[0]
cx, cy=cName[3:6], cName[0:3]
ext=df.extent
ext.XMin, ext.XMax=int(cx)*1000, (int(cx)+1)*1000
ext.YMin, ext.YMax=int(cy)*1000, (int(cy)+1)*1000
df.extent=ext
ArcGIS通過書簽對象標識要保存和引用的特定地理位置,當用戶進行平移或縮放操作時,可以通過書簽快速返回該研究區域。書簽對象必須在MXD模板中建立,然后才能通過制圖模塊進行操作,每個數據框對象都有自己的書簽列表。以下代碼是根據影像文件名cName設置書簽范圍,注意書簽對象可以直接修改屬性,而數據框顯示范圍只能通過范圍對象賦值:
ext=arcpy.mapping.ListBookmarks(mxd, "", df)[0].extent
ext.XMin, ext.XMax=int(cx)*1000, (int(cx)+1)*1000
ext.YMin, ext.YMax=int(cy)*1000, (int(cy)+1)*1000
影像地圖圖廓要素操作通過頁面布局元素對象來實現,頁面對象類型包括:數據框、文本、圖形、圖像、圖例和其他六大類,不同的圖廓要素分屬不同的圖廓頁面對象類別,但操作方式類似。下面簡述影像地圖圖廓要素的指北針、圖例和圖面注記的位置操作方式,相關代碼如下:
# 設定指北針位置
nArrow=arcpy.mapping.ListLayoutElements(mxd, "MAPSURROUND_ELEMENT")[0]
nArrow.elementPositionX=df.elementPositionX + df.elementWidth-10
nArrow.elementPositionY=df.elementPositionY + df.elementHeight-10
# 設定圖例位置
legend=arcpy.mapping.ListLayoutElements(mxd, "GRAPHIC_ELEMENT")[0]
legend.elementPositionX=df.elementPositionX + df.elementWidth
legend.elementPositionY=df.elementPositionY
# 設定圖面注記內容和位置
txt=arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT")[0]
txt.text="標題"
txt.elementPositionX=df.elementPositionX + df.elementWidth/2.0
txt.elementPositionY=df.elementPositionY + df.elementHeight + 10
ArcGIS的地圖輸出方式有3種:第1種是輸出到位圖,第2種是輸出到PDF文件,第3種是通過ArcPress直接打印??紤]到實際生產中可能會用到專業的柵格化打印軟件,這里采用直接輸出為JPEG成果文件。通過Arcpy輸出JPEG成果文件的代碼如下:
arcpy.mapping.ExportToJPEG(mxd, jpgPathName, "PAGE_LAYOUT", 4200, 2970, 254)
自動化處理的關鍵是影像文件的遍歷,程序自動根據數字正射影像的范圍信息載入影像地圖模板文件,修改坐標標注及結合表信息,更新圖面注記內容,實現了影像地圖處理的自動化操作。圖3是程序自動生成的影像地圖成果數據。

圖3 影像地圖自動處理成果
四、結束語
本文在頁面布局技術的基礎上完成了影像地圖的創建,通過Arcpy方式實現了影像地圖制圖與輸出處理的自動化,同時采用地圖模板方式實現了影像地圖處理的標準化和規范化,使得影像地圖的制圖更加方便快捷,在很大程度上提高了生產作業效率。同時, 本文通過Python開發模式實現, 最終處
理程序以腳本文件方式提供使用,具有較好的可擴展性和移植性。
參考文獻:
[1]龐小平,趙羲,高峰,等. 真彩色城市影像地圖統一協調性研究[J]. 武漢大學學報:信息科學版,2006,31(6):481-488.
[2]中國國家標準化管理委員會.GB/T 20257.1—2007國家基本比例尺地圖圖式 第1部分:1∶500 1∶1000 1∶2000地形圖圖式[S].北京:中國標準出版社,2007.
[3]劉艷,關雷,韓冬,等. ArcGIS環境下數據裁切技術研究[J]. 測繪與空間地理信息,2012(5):108-113.
[4]黃昌勝,姜圓盈. 基于ArcGIS的專題圖制作[J]. 城市勘測,2012(2):28-30.
[5]徐穎,趙萍,黃亞萍. 基于ArcGIS標準分幅裁切新方法[J]. 現代測繪,2006(3):43-45.
[6]劉云彤,黃鐵成,吳焱. ArcGIS制圖技術在森林分類經營中的應用——以喀什地區地方公益林區劃定界為例[J]. 新疆師范大學學報:自然科學版,2011(6):9-12.
引文格式: 余詠勝,彭艷麗,尹言軍,等. 基于Arcpy的影像地圖自動處理技術研究[J].測繪通報,2015(3):82-85.DOI:10.13474/j.cnki.11-2246.2015.0083
作者簡介:余詠勝(1979—),男,碩士,主要研究方向為航測遙感數字影像處理、海量數據的集成應用與開發工作。E-mail:104680040@qq.com
收稿日期:2014-02-25
中圖分類號:P28
文獻標識碼:B
文章編號:0494-0911(2015)03-0082-04