余詠勝,彭艷麗,尹言軍,黃兵杰
(1. 武漢市測繪研究院,湖北 武漢 430022; 2. 武漢市規(guī)劃研究院,湖北 武漢 430014)
Research on Photographic Map Automatic Processing Technology
Based on Arcpy
YU Yongsheng,PENG Yanli,YIN Yanjun,HUANG Bingjie
?
基于Arcpy的影像地圖自動處理技術(shù)研究
余詠勝1,彭艷麗2,尹言軍1,黃兵杰1
(1. 武漢市測繪研究院,湖北 武漢 430022; 2. 武漢市規(guī)劃研究院,湖北 武漢 430014)
Research on Photographic Map Automatic Processing Technology
Based on Arcpy
YU Yongsheng,PENG Yanli,YIN Yanjun,HUANG Bingjie
摘要:針對影像地圖的制作過程中存在重復(fù)作業(yè)、效率不高等問題,采用基于Arcpy站點(diǎn)包實(shí)現(xiàn)了影像地圖的自動處理,該方法通過地圖模板制作影像地圖標(biāo)準(zhǔn)文件,在此基礎(chǔ)上進(jìn)行圖面要素和注記信息的自動處理,實(shí)現(xiàn)無用戶參與情況下高效地制作影像地圖。
關(guān)鍵詞:Arcpy;影像地圖;地圖模板;自動制圖
一、引言
影像地圖是以數(shù)字正射影像圖(DOM)為基礎(chǔ),根據(jù)一定的數(shù)學(xué)規(guī)則、按照一定的比例尺將基礎(chǔ)地理信息和地圖專題信息以符號、注記等形式綜合表示在圖面上的一種地圖形式。影像地圖既包含豐富的影像信息內(nèi)容,又能保證地形圖的整飾和幾何精度,在城市規(guī)劃、國土資源管理、環(huán)境保護(hù)和重大工程建設(shè)等領(lǐng)域得到了廣泛應(yīng)用。
目前生產(chǎn)單位制作影像地圖主要通過人工方式采用計(jì)算機(jī)輔助制圖模式進(jìn)行,利用具備強(qiáng)大圖形編輯、文字處理和符號制作功能的軟件如CorelDRAW、Adobe Illustrator等完成影像及相關(guān)專題地圖的制作。這類制圖軟件雖然具有豐富的地圖符號、注記和色彩表現(xiàn)等功能,但由于軟件沒有地理坐標(biāo)的概念,圖形圖像要素不能與地理信息關(guān)聯(lián),導(dǎo)致生產(chǎn)中作業(yè)效率不高、準(zhǔn)確率難以保證,而且存在重復(fù)作業(yè)、自動化程度低等問題。本文針對這些問題,在影像地圖的制作技術(shù)、規(guī)范化、標(biāo)準(zhǔn)化方面進(jìn)行了探索和試驗(yàn),提出了基于Arcpy的影像地圖自動處理技術(shù)并在生產(chǎn)中得到實(shí)際應(yīng)用。
二、Arcpy與影像地圖模板
Python是一種通用的開源編程語言,易于學(xué)習(xí)和使用,在ArcGIS地理處理中用作腳本語言,在ArcGIS 9.3版本以前使用Python腳本擴(kuò)展地理處理框架(GP,GeoProcessing),需要引用arcgisscripting,通過其提供的方法、屬性和函數(shù)完成自定義的GP開發(fā)與定制,而在ArcGIS 10中則不需要引用arcgisscripting命名空間,而是采用新的Arcpy命名空間,通過引用Arcpy站點(diǎn)包可以直接調(diào)用其提供的一系列方法、類和模塊。
Arcpy主要由制圖模塊、數(shù)據(jù)訪問模塊、空間分析模塊及擴(kuò)展模塊和基本函數(shù)功能組成。通過Arcpy可以訪問并使用來自多個不同領(lǐng)域的GIS專業(yè)人員和程序員開發(fā)的大量Python模塊,用戶可以在交互式環(huán)境中快速創(chuàng)建腳本原型并進(jìn)行測試,通過Arcpy訪問地理處理工具和其他函數(shù)、類和模塊,可以快速地創(chuàng)建各種簡單或大型應(yīng)用程序,靈活高效地實(shí)現(xiàn)各類業(yè)務(wù)邏輯。在Python腳本中引用Arcpy的方式如下:
import arcpy
需要注意的是,Arcpy作為地理處理框架的一部分,旨在作為自動化處理工具,而不是自定義應(yīng)用程序框架,Arcpy設(shè)計(jì)的出發(fā)點(diǎn)并不是用來代替ArcObject,因此不能通過Arcpy定義ArcGIS用戶界面的按鈕、對話框、菜單選項(xiàng)等功能,訪問的對象和函數(shù)也是有限制的,如不能通過Arcpy新建地圖文檔或更改地圖文檔的頁面大小和方向,這些功能必須通過ArcObject來實(shí)現(xiàn)。
Arcpy制圖模塊(arcpy.mapping)提供了對AO的高級封裝,通過一系列方法實(shí)現(xiàn)地圖范圍、比例尺、符號化、圖廓整飾等要素的修改,完成自動化的地圖打印或?qū)С觯茍D模塊設(shè)計(jì)側(cè)重于修改已有的地圖文檔或圖層文件中的現(xiàn)有元素,不允許新建地圖文檔,因此在實(shí)現(xiàn)影像地圖自動處理之前必須先在ArcGIS中創(chuàng)建一個包含相應(yīng)元素的影像地圖模板,然后再通過arcpy.mapping操作相關(guān)要素和內(nèi)容。
影像地圖模板是一個Esri MXD文件,其目的在于方便Python腳本程序處理實(shí)現(xiàn)制圖處理的自動化。模板可以包含底圖圖層,也可以創(chuàng)建各種常用的頁面布局。創(chuàng)建地圖模板前應(yīng)先確定地圖投影,然后按照設(shè)計(jì)要求設(shè)置紙張大小、確定制圖比例尺、圖名、圖例、坐標(biāo)格網(wǎng)、指北針等一系列制圖要素的放置。
下面以A3幅面圖廓為例,簡述建立影像地圖模板的過程:在頁面布局視圖將頁面尺寸設(shè)置為42 cm×29.7 cm,將數(shù)據(jù)框的尺寸設(shè)置為39 cm×26.7 cm,然后按照文獻(xiàn)[2]設(shè)置圖名、圖廓線、指北針、圖例和注記等要素的位置、規(guī)格和顏色。圖式中一般情況下線劃粗細(xì)為0.15 mm,ArcGIS中線寬設(shè)置的默認(rèn)尺寸單位為磅(1磅=1 mm×2.845),線寬數(shù)值應(yīng)輸入0.427磅。創(chuàng)建的影像地圖模板如圖1所示,其中外圍黑線為頁面尺寸范圍,內(nèi)圖廓矩形為數(shù)據(jù)框范圍。
圖1 影像地圖模板
三、影像地圖自動處理的實(shí)現(xiàn)
影像地圖一般以真彩色航空或衛(wèi)星數(shù)字正射影像圖為基礎(chǔ),輔助符號和注記要素進(jìn)行圖面表達(dá)。本文以ArcGIS為平臺,保證影像底圖和矢量數(shù)據(jù)的準(zhǔn)確疊加,結(jié)合頁面布局技術(shù)制作標(biāo)準(zhǔn)化的影像地圖模板,通過注記模板完成圖面內(nèi)容及標(biāo)注的設(shè)計(jì),根據(jù)數(shù)據(jù)框?qū)ο笠蕴囟ǖ睦L圖順序和地圖投影顯示影像和矢量圖層,并控制制圖比例尺和輸出范圍,最后根據(jù)制圖需要處理圖廓要素并輸出處理成果。影像地圖表達(dá)應(yīng)注重影像和地圖符號層的視覺層次關(guān)系,本文主要涉及影像地圖的自動化處理,符號和注記的形式和色彩設(shè)計(jì)不是本文研究的重點(diǎn)。影像地圖自動處理技術(shù)流程如圖2所示。
圖2 影像地圖自動處理技術(shù)流程
影像底圖數(shù)據(jù)應(yīng)根據(jù)制圖的用途、精度等要求,盡可能地選擇時相最合適、波段最理想的數(shù)字正射影像圖作為影像底圖資料。作為底圖的遙感影像應(yīng)注重處理的視覺效果,而不一定是解譯效果。通常影像數(shù)據(jù)組織包括影像數(shù)據(jù)的分幅處理、影像文件的標(biāo)準(zhǔn)化命名和影像數(shù)據(jù)的存儲方式。影像文件存儲可以按文件方式保存,也可以在ArcGIS中通過柵格數(shù)據(jù)集和柵格目錄兩種方式存儲和管理,柵格數(shù)據(jù)集表現(xiàn)為連續(xù)的單幅影像數(shù)據(jù),而柵格目錄則是多個柵格數(shù)據(jù)的集合。無論影像數(shù)據(jù)以何種方式組織,在Arcpy中處理的方式類似,以下代碼是影像圖層的處理,其中cPath為影像文件路徑名,cName為影像文件名:
lay.replaceDataSource(cPath,"RASTER_WORKSPA
CE", cName) # 重定義圖層數(shù)據(jù)源
lay.name=cName# 重定義圖層名稱
圖面注記是影像地圖必不可少的內(nèi)容,在成圖過程中占用較大的制圖工作量。圖面注記一般通過標(biāo)注(Label)方式實(shí)現(xiàn),在Label Manager中進(jìn)行統(tǒng)一管理。Label對象是一種動態(tài)標(biāo)注,可以自動調(diào)整標(biāo)注位置、解決壓蓋沖突等問題,但Label對象會隨圖面顯示內(nèi)容不同發(fā)生變化,考慮到固定比例尺制圖的需要,應(yīng)在完成字體大小、顏色和方向等屬性設(shè)置后將動態(tài)Label對象轉(zhuǎn)換為該比例尺下的Annotation對象。Annotation是固定比例尺下靜態(tài)標(biāo)注對象,以數(shù)據(jù)庫方式保存,系統(tǒng)會在數(shù)據(jù)庫中創(chuàng)建一個地圖注記類保存靜態(tài)標(biāo)注的Annotation對象。由于地形地物的特殊性和復(fù)雜性,局部區(qū)域注記密集和壓蓋等的問題,仍需要通過人工方式進(jìn)行局部修改。影像地圖的圖面注記具有可重用性,多數(shù)情況下不同時期的影像地圖注記可以略作修改或不需修改直接利用,需要對標(biāo)注字體大小、顏色、方向等參數(shù)修改時,只需對注記模板進(jìn)行適當(dāng)?shù)恼{(diào)整。
影像地圖圖面要素處理主要包括數(shù)據(jù)框操作、書簽要素生成和圖廓要素編輯等內(nèi)容,圖面要素不能在數(shù)據(jù)視圖中操作,需要切換到布局頁面中完成。
首先應(yīng)設(shè)置文檔對象,通過文檔對象才能處理地圖屬性,處理完畢后應(yīng)保存并刪除文檔對象,解除文檔鎖定,釋放系統(tǒng)資源,避免不同地圖文檔引用可能引起的錯誤。根據(jù)Arcpy使用原則,用戶只能處理當(dāng)前文檔或已有文檔,而不能通過Python腳本新建MXD文檔。打開MXD模板文檔的相關(guān)代碼如下,其中pMXD為模板文檔的路徑全名:
mxd=arcpy.mapping.MapDocument(pMXD)
數(shù)據(jù)框?qū)ο笫茿rcpy制圖模塊的重要對象,一幅地圖文檔必須至少包含一個數(shù)據(jù)框?qū)ο?,如果文檔存在圖中圖或圖外圖的情況,則可以創(chuàng)建多個數(shù)據(jù)框?qū)ο?。?shù)據(jù)框具有定義顯示和使用其包含數(shù)據(jù)上下文的屬性,在數(shù)據(jù)視圖中顯示窗口即為數(shù)據(jù)框,系統(tǒng)根據(jù)圖層列表從下往上的順序顯示活動數(shù)據(jù)框的圖層。影像地圖模板中的數(shù)據(jù)框?qū)ο筇幚碇饕强刂频貓D范圍,當(dāng)頁面上數(shù)據(jù)框大小保持不變時,縮放地圖會導(dǎo)致地圖范圍發(fā)生變化。以下代碼是根據(jù)影像文件名cName設(shè)置數(shù)據(jù)框顯示范圍:
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通過書簽對象標(biāo)識要保存和引用的特定地理位置,當(dāng)用戶進(jìn)行平移或縮放操作時,可以通過書簽快速返回該研究區(qū)域。書簽對象必須在MXD模板中建立,然后才能通過制圖模塊進(jìn)行操作,每個數(shù)據(jù)框?qū)ο蠖加凶约旱臅灹斜怼R韵麓a是根據(jù)影像文件名cName設(shè)置書簽范圍,注意書簽對象可以直接修改屬性,而數(shù)據(jù)框顯示范圍只能通過范圍對象賦值:
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
影像地圖圖廓要素操作通過頁面布局元素對象來實(shí)現(xiàn),頁面對象類型包括:數(shù)據(jù)框、文本、圖形、圖像、圖例和其他六大類,不同的圖廓要素分屬不同的圖廓頁面對象類別,但操作方式類似。下面簡述影像地圖圖廓要素的指北針、圖例和圖面注記的位置操作方式,相關(guān)代碼如下:
# 設(shè)定指北針位置
nArrow=arcpy.mapping.ListLayoutElements(mxd, "MAPSURROUND_ELEMENT")[0]
nArrow.elementPositionX=df.elementPositionX + df.elementWidth-10
nArrow.elementPositionY=df.elementPositionY + df.elementHeight-10
# 設(shè)定圖例位置
legend=arcpy.mapping.ListLayoutElements(mxd, "GRAPHIC_ELEMENT")[0]
legend.elementPositionX=df.elementPositionX + df.elementWidth
legend.elementPositionY=df.elementPositionY
# 設(shè)定圖面注記內(nèi)容和位置
txt=arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT")[0]
txt.text="標(biāo)題"
txt.elementPositionX=df.elementPositionX + df.elementWidth/2.0
txt.elementPositionY=df.elementPositionY + df.elementHeight + 10
ArcGIS的地圖輸出方式有3種:第1種是輸出到位圖,第2種是輸出到PDF文件,第3種是通過ArcPress直接打印??紤]到實(shí)際生產(chǎn)中可能會用到專業(yè)的柵格化打印軟件,這里采用直接輸出為JPEG成果文件。通過Arcpy輸出JPEG成果文件的代碼如下:
arcpy.mapping.ExportToJPEG(mxd, jpgPathName, "PAGE_LAYOUT", 4200, 2970, 254)
自動化處理的關(guān)鍵是影像文件的遍歷,程序自動根據(jù)數(shù)字正射影像的范圍信息載入影像地圖模板文件,修改坐標(biāo)標(biāo)注及結(jié)合表信息,更新圖面注記內(nèi)容,實(shí)現(xiàn)了影像地圖處理的自動化操作。圖3是程序自動生成的影像地圖成果數(shù)據(jù)。
圖3 影像地圖自動處理成果
四、結(jié)束語
本文在頁面布局技術(shù)的基礎(chǔ)上完成了影像地圖的創(chuàng)建,通過Arcpy方式實(shí)現(xiàn)了影像地圖制圖與輸出處理的自動化,同時采用地圖模板方式實(shí)現(xiàn)了影像地圖處理的標(biāo)準(zhǔn)化和規(guī)范化,使得影像地圖的制圖更加方便快捷,在很大程度上提高了生產(chǎn)作業(yè)效率。同時, 本文通過Python開發(fā)模式實(shí)現(xiàn), 最終處
理程序以腳本文件方式提供使用,具有較好的可擴(kuò)展性和移植性。
參考文獻(xiàn):
[1]龐小平,趙羲,高峰,等. 真彩色城市影像地圖統(tǒng)一協(xié)調(diào)性研究[J]. 武漢大學(xué)學(xué)報(bào):信息科學(xué)版,2006,31(6):481-488.
[2]中國國家標(biāo)準(zhǔn)化管理委員會.GB/T 20257.1—2007國家基本比例尺地圖圖式 第1部分:1∶500 1∶1000 1∶2000地形圖圖式[S].北京:中國標(biāo)準(zhǔn)出版社,2007.
[3]劉艷,關(guān)雷,韓冬,等. ArcGIS環(huán)境下數(shù)據(jù)裁切技術(shù)研究[J]. 測繪與空間地理信息,2012(5):108-113.
[4]黃昌勝,姜圓盈. 基于ArcGIS的專題圖制作[J]. 城市勘測,2012(2):28-30.
[5]徐穎,趙萍,黃亞萍. 基于ArcGIS標(biāo)準(zhǔn)分幅裁切新方法[J]. 現(xiàn)代測繪,2006(3):43-45.
[6]劉云彤,黃鐵成,吳焱. ArcGIS制圖技術(shù)在森林分類經(jīng)營中的應(yīng)用——以喀什地區(qū)地方公益林區(qū)劃定界為例[J]. 新疆師范大學(xué)學(xué)報(bào):自然科學(xué)版,2011(6):9-12.
引文格式: 余詠勝,彭艷麗,尹言軍,等. 基于Arcpy的影像地圖自動處理技術(shù)研究[J].測繪通報(bào),2015(3):82-85.DOI:10.13474/j.cnki.11-2246.2015.0083
作者簡介:余詠勝(1979—),男,碩士,主要研究方向?yàn)楹綔y遙感數(shù)字影像處理、海量數(shù)據(jù)的集成應(yīng)用與開發(fā)工作。E-mail:104680040@qq.com
收稿日期:2014-02-25
中圖分類號:P28
文獻(xiàn)標(biāo)識碼:B
文章編號:0494-0911(2015)03-0082-04