宋香平,段動賓,張橋梁
(河南理工大學(xué) 測繪與國土信息工程學(xué)院,河南 焦作 454000)
基于Arcpy專題地圖批量制作方法
宋香平,段動賓,張橋梁
(河南理工大學(xué) 測繪與國土信息工程學(xué)院,河南 焦作 454000)
為解決傳統(tǒng)的專題地圖制作過程存在作業(yè)效率低、重復(fù)性高等問題,提出運用Python腳本語言中Arcpy站點包對專題圖制作方法進(jìn)行改進(jìn)。在制作地圖模板的基礎(chǔ)上,引用專題變量庫,并運用Arcpy對專題要素的引用、圖層符號化與渲染、地圖整飾要素的調(diào)整與修改、批量出圖等環(huán)節(jié)進(jìn)行整合與方法改進(jìn),形成批量處理的流程化制作新工藝。以新鄭市土地生態(tài)評估專題圖制作為例進(jìn)行試驗應(yīng)用,實現(xiàn)流水化制圖作業(yè),該方法比ARCMAP更加自動化,更少人工干預(yù)。
Arcpy;地圖模板;專題變量庫;專題地圖
專題圖是將地圖專題要素和基礎(chǔ)地理信息要素[1],按照一定的比例尺、數(shù)學(xué)法則,以符號、色彩、注記等形式表示在圖面上的一種地圖形式。與普通地圖相比,專題圖僅將某一種或幾種相關(guān)聯(lián)的要素在地圖上突出表達(dá),其他要素則次要顯示,甚至某些要素根本不予表示[2]。專題圖可以突顯事物某種特性的分布以及隨時間變化特征,被廣泛應(yīng)用到土地資源管理與土地規(guī)劃、城市建設(shè)和規(guī)劃、環(huán)境保護(hù)、土壤生態(tài)及農(nóng)業(yè)等領(lǐng)域。傳統(tǒng)的制作方法在數(shù)據(jù)選取、邊框制作、地圖符號選取和制作、圖面注記、圖例設(shè)置等過程中存在作業(yè)量大、重復(fù)性高、效率低、自動化程度低等問題[3]。因此,研究專題圖自動化制作的方法具有重要意義。
近些年,國內(nèi)已有學(xué)者對批量制圖技術(shù)做了研究。余詠勝等利用Arcpy將影像分幅自動添加到地圖模板上,并自動修改標(biāo)題信息,實現(xiàn)了影像地圖自動制作[4];陳志軍等提出制作系列地圖的解決方案,運用Arcpy實現(xiàn)系列地圖批量出圖[5];仇逸清等利用Arcpy提取鉆孔數(shù)據(jù)生成矢量點和線,實現(xiàn)地質(zhì)剖面的繪制[6]。但這些研究均未解決多種專題要素自動化制圖問題[7]。因此,本文在研究基于Arcpy的地圖渲染技術(shù)和地圖整飾自動調(diào)整方法[8]的基礎(chǔ)上,整合ARCMAP中制圖的各個零散環(huán)節(jié),利用已有的批處理程序語言編制出適合的流水化作業(yè)程序和工藝流程。在分析專題數(shù)據(jù)特點的基礎(chǔ)上,建立專題變量庫[5,8],并詳細(xì)闡述專題地圖注記過程、數(shù)據(jù)自動更新、專題數(shù)據(jù)的符號化以及地圖整飾和批量輸出的具體實現(xiàn)過程。
Arcpy是Python語言的一個站點包[9-11],主要由地理處理工具、基本函數(shù)、基本類、內(nèi)部模塊組成。制圖模塊(Arcpy.mapping)[12]作為Arcpy站點包的一部分,是其制圖的核心模塊。本研究是在“地圖模板+專題變量庫”制作方案的前提下進(jìn)行的,并根據(jù)相關(guān)要求和標(biāo)準(zhǔn)制作地圖模板。圖1為具體技術(shù)流程。
圖1 專題地圖自動化制作技術(shù)流程
1.1 地圖模板
地圖模板應(yīng)根據(jù)實際應(yīng)用選取適當(dāng)?shù)幕A(chǔ)地理信息要素,如水系、交通線、行政區(qū)界線等。模板制作前首先按照設(shè)計要求定義地圖投影,在ARCMAP布局視圖里設(shè)置紙張大小,確定圖名、圖例、比例尺、指北針等頁面布局元素的位置。
1.2 專題變量庫建立
專題變量庫主要由專題數(shù)據(jù)、符號化基準(zhǔn)圖層以及地圖整飾要素信息三部分組成。專題數(shù)據(jù)是通過搜集、評估、分析等獲得的矢量和柵格數(shù)據(jù);符號化基準(zhǔn)圖層是一系列專題地圖符號化的樣板圖層,包含預(yù)設(shè)置的屬性信息和符號系統(tǒng);地圖整飾要素信息主要是不同專題地圖的頁面布局元素的變量信息,如標(biāo)題內(nèi)容、圖例大小與位置等。專題變量庫是專題圖自動化制作的基礎(chǔ)。
專題變量庫的建立步驟:
1)專題數(shù)據(jù)準(zhǔn)備、符號化基準(zhǔn)圖層制作、地圖整飾要素屬性信息獲取。專題數(shù)據(jù)準(zhǔn)備工作主要包括數(shù)據(jù)搜集、分析、數(shù)據(jù)格式轉(zhuǎn)換等;符號化基準(zhǔn)圖層制作是實現(xiàn)批量渲染的前提,應(yīng)根據(jù)專題數(shù)據(jù)的特點和制圖要求,設(shè)計圖層的符號系統(tǒng)、選擇合適的渲染方式等;地圖整飾要素屬性信息的獲取,應(yīng)根據(jù)制圖要求和圖面范圍,合理布設(shè)各個元素,避免各元素之間相互壓蓋問題,例如圖例元素位置以及長寬最大值。
2)數(shù)據(jù)分類入庫。根據(jù)專題數(shù)據(jù)的特點和制圖表達(dá)要求進(jìn)行分類,每一類對應(yīng)一種渲染方法,同時對應(yīng)一個符號化基準(zhǔn)圖層。數(shù)據(jù)分類入庫是專題數(shù)據(jù)準(zhǔn)確引用的重要前提。
3)數(shù)據(jù)庫檢查。主要檢查各類專題數(shù)據(jù)和符號化基準(zhǔn)圖層的數(shù)量、屬性等。
2.1 專題數(shù)據(jù)圖層的自動更新方法
2.1.1 幾種基本對象
地圖文檔對象(MapDocument):地圖文檔對象包含地圖文檔的頁面大小屬性、標(biāo)題屬性以及保存和另存為方法等。通過引用地圖文檔對象,可訪問MXD文件的數(shù)據(jù)框、圖層以及頁面布局元素等屬性。
數(shù)據(jù)框?qū)ο?DataFrame):一幅地圖根據(jù)需求可包括若干個數(shù)據(jù)框[10],數(shù)據(jù)框所有操作是在布局視圖里進(jìn)行的。通過引用數(shù)據(jù)框?qū)ο蟮膶傩院头椒ǎ蓪崿F(xiàn)數(shù)據(jù)框的復(fù)制、尺寸設(shè)置、位置調(diào)整等功能。
圖層對象(layer):圖層對象提供了對圖層屬性的訪問以及圖層操作的方法。因數(shù)據(jù)格式的不同,地圖文檔包含的圖層類型也不相同,如要素圖層、柵格圖層、圖層組、注記要素層、尺寸要素層以及少數(shù)數(shù)據(jù)集。不同類型的圖層對象包含的屬性也不相同,如柵格圖層不支持定義查詢而要素圖層支持,因此,在對圖層的屬性進(jìn)行獲取或設(shè)置前,需運用supports方法判斷圖層與屬性的支持關(guān)系。
2.1.2 專題數(shù)據(jù)的自動更新
制圖模塊包含很多類和函數(shù),但僅允許向數(shù)據(jù)框中添加圖層文件(.lyr)。Arcpy提供了MakeRasterLayer_management和MakeFeatureLayer_management兩個工具函數(shù),可創(chuàng)建臨時圖層文件,方便將柵格和矢量數(shù)據(jù)自動加載到地圖文檔數(shù)據(jù)框中。核心代碼如下:
rasterlist = arcpy.ListRasters() #創(chuàng)建專題數(shù)據(jù)列表
for fc in rasterlist: #專題數(shù)據(jù)列表遍歷
layer=arcpy.MakeRasterLayer_management(fc, fc.split(‘.’)[0])[0]
arcpy.mapping.AddLayer(df, layer, ”AUTO_ARRANGE“)
layer.saveACopy(workspace + ‘/’ + fc.split(‘.’)[0]+ “.lyr”)
2.2 專題數(shù)據(jù)圖層渲染與符號化
專題數(shù)據(jù)分為矢量數(shù)據(jù)和柵格數(shù)據(jù)兩種。為了實現(xiàn)專題數(shù)據(jù)渲染和符號化的自動化,筆者在引用圖層對象的基礎(chǔ)上,利用符號化基準(zhǔn)圖層更新專題數(shù)據(jù)圖層的符號系統(tǒng)。利用GraduatedColorsSymbology 和GraduatedSymbolsSymbology 類完成矢量數(shù)據(jù)圖層分級色彩系統(tǒng)和分級符號系統(tǒng)的各種屬性的設(shè)置;通過RasterClassifiedSymbology 類實現(xiàn)圖層的柵格分類符號系統(tǒng)屬性的設(shè)置。
2.2.1 柵格數(shù)據(jù)渲染
ArcMap提供了很多柵格數(shù)據(jù)的渲染方法,如拉伸、分類、唯一值、離散顏色等。標(biāo)準(zhǔn)差方法拉伸渲染適用于正態(tài)分布的數(shù)據(jù);自然間斷點分級法分類渲染是通過查找數(shù)據(jù)值差異,使用統(tǒng)計方法確定分類間隔[12]。通過遍歷專題變量庫,將專題數(shù)據(jù)自動添加到地圖文檔的數(shù)據(jù)框中,然后利用UpdateLayer函數(shù)對專題數(shù)據(jù)層進(jìn)行符號系統(tǒng)更新,以實現(xiàn)專題數(shù)據(jù)的拉伸或分類渲染。以下為實現(xiàn)功能的核心代碼:
for raster in rasterlist:
layer=arcpy.MakeRasterLayer_management(raster,raster.split(‘.’)[0])[0]
arcpy.mapping.AddLayer(df, layer, “BOTTOM”)
updateLayer = arcpy.mapping.ListLayers(mxd, “, df)[-1]
sourceLayer = arcpy.mapping.ListLayers(mxd, ”, df)[-2]
arcpy.mapping.UpdateLayer(df, updateLayer, sourceLayer)
2.2.2 矢量數(shù)據(jù)符號化
與柵格數(shù)據(jù)渲染的不同之處在于矢量數(shù)據(jù)可以對單一屬性表的多個字段進(jìn)行符號化,在符號化過程中需要選取欲表達(dá)的字段。實現(xiàn)矢量數(shù)據(jù)批量符號化的解決思路是通過引用GraduatedColorsSymbology 或GraduatedSymbolsSymbology類確定欲表達(dá)字段,利用符號化基準(zhǔn)圖層對矢量數(shù)據(jù)圖層的符號系統(tǒng)進(jìn)行更新。但是不同要素類的屬性表所包含的字段不盡相同,為了滿足不同要素符號化,筆者通過Python語言編寫腳本程序,將腳本添加到ArcGis工具箱中創(chuàng)建交互式對話框,方便選擇要素屬性表的欲表達(dá)字段。
實現(xiàn)核心代碼如下:
if lyr.symbologyType == “GRADUATED_COLORS” or “GRADUATED_SYMBOLS”:
for field in fieldlist:
lyr.symbology.valueField = field.name
arcpy.mapping.UpdateLayer(df, lyr, sourceLayer)
lyr.symbology.numClasses = numClasses
arcpy.RefreshActiveView()
arcpy.RefreshTOC()
mxd.saveAs(env.workspace + field.name +‘.mxd’)
2.3 地圖整飾與批量輸出
2.3.1 地圖整飾
地圖整飾要素主要包括標(biāo)題、邊框、圖例、插圖、指北針、比例尺、其他文本以及數(shù)據(jù)源信息。Arcpy的制圖模塊提供了DataFrame、GraphicElement、LegendElement、TextElement、MapsurroundElement等類,可以完成頁面布局元素對象行為的控制。通過設(shè)置ListLayoutElements函數(shù)的參數(shù)構(gòu)建不同頁面布局元素的列表,引用其內(nèi)部對象的屬性和方法,實現(xiàn)頁面布局元素的操作。以圖例自動修改為例,筆者編寫anchor_point()和auto_adjust()函數(shù),分別解決圖例錨點位置和固定框下圖例自動調(diào)整大小的問題。auto_adjust()函數(shù)中,parameters為圖例高與寬比例,Width_limit與Height_limit分別為寬高的限值,以下為其核心代碼:
#---按照固定比例自動調(diào)整圖例大小----#
def auto_adjust(parameters):
legend=arcpy.mapping.ListLayoutElements(mxd, “LEGEND_ELEMENT”)[0]
while legend.isOverflowing:
legend.elementWidth=legend.elementWidth + 0.1
legend.elementHeight=parameters * legend.elementWidth
if legend.elementWidth>Width_limit-0.3 or legend.elementHeight>Height_limit-0.3:
while legend.isOverflowing:
removelyr=listLegendItemLayers()[-1]
legend.removeItem(removelyr)
break
return legend.elementWidth, legend.elementHeigh
2.3.2 專題地圖的批量輸出
在專題地圖輸出前,應(yīng)通過地圖文檔對象的saveAsCopy方法對處理后的專題地圖另存到MXD文件中,以方便后期的修改或查看。Arcpy提供了很多函數(shù)如ExportToBMP、ExportToGIF、ExportToJPEG、ExportToPNG、ExportToTIFF、ExportToSVG等,能夠?qū)С霾煌袷胶头直媛实臇鸥竦貓D文件。
3.1 批量制圖過程
實驗通過利用新鄭市第二次土地調(diào)查、土地利用變更調(diào)查、地球化學(xué)調(diào)查、農(nóng)用地分等定級等數(shù)據(jù)源,借助 “3S”技術(shù)、地面調(diào)查、野外采樣和農(nóng)戶調(diào)查等方法,對新鄭市土地生態(tài)狀況信息進(jìn)行提取和評估[13-15]。根據(jù)評估指標(biāo)數(shù)據(jù)制作專題圖,表1為部分評估指標(biāo)具體內(nèi)容。
表1 評估指標(biāo)數(shù)據(jù)
這里通過分析評估指標(biāo)數(shù)據(jù)在新鄭市地理空間上的分布狀況來完成土地生態(tài)狀況評估工作。因評估指標(biāo)數(shù)據(jù)的多樣性,在制圖表達(dá)過程中,一些指標(biāo)數(shù)據(jù)選取的符號系統(tǒng)和渲染方法也存在不同。建立專題變量庫主要用來解決不同評估指標(biāo)數(shù)據(jù)分類表達(dá)問題。首先,應(yīng)將評估指標(biāo)數(shù)據(jù)文件名標(biāo)準(zhǔn)化,方便MXD文件名稱和圖名修改;然后,根據(jù)符號系統(tǒng)和渲染方式將評估指標(biāo)數(shù)據(jù)分類入庫,這里主要按顏色分級渲染和拉伸渲染進(jìn)行分類。
在ArcGIS環(huán)境下,按照實際要求制作專題地圖模板,然后通過Python語言編寫程序,引用地圖文檔對象和數(shù)據(jù)框?qū)ο髮⒂磉_(dá)的專題數(shù)據(jù)自動加載到專題地圖模板中,利用符號化基準(zhǔn)圖層批量更新專題數(shù)據(jù)層符號化系統(tǒng),最后進(jìn)行地圖整飾并批量輸出制圖成果。圖2為Python編寫的流程工藝,圖3為地圖模板和成圖效果。
圖2 流程工藝
圖3 地圖模板與成圖效果
3.2 分析與評價
從不同評估指標(biāo)數(shù)據(jù)的成圖結(jié)果分析,該方法能夠滿足系列專題圖制作的要求。成圖過程變化的要素主要包括圖名、圖例、圖層渲染方式和顏色等。
圖名:圖名隨著不同的評價指標(biāo)而變化,與評價指標(biāo)數(shù)據(jù)具有一致性;批量處理方法實現(xiàn)了圖名自動修改,圖名的修改內(nèi)容源于矢量數(shù)據(jù)表的字段名和柵格數(shù)據(jù)文件名,這也是在專題變量庫中按照制圖要求對字段和柵格數(shù)據(jù)文件名進(jìn)行標(biāo)準(zhǔn)化的主要原因。
圖層渲染方式和顏色:根據(jù)專題圖制圖要求,不同評估指標(biāo)數(shù)據(jù)可能選取的渲染方式和顏色也不相同,因此,將評估指標(biāo)數(shù)據(jù)按顏色分級渲染和拉伸渲染進(jìn)行分類入庫是圖層批量渲染的基礎(chǔ)。
圖例:在批處理過程,圖例內(nèi)容會有變化,導(dǎo)致圖例可能壓蓋數(shù)據(jù)框內(nèi)容和邊界,通過這種制圖工藝實現(xiàn)圖例動態(tài)調(diào)整圖例內(nèi)容、圖例大小、固定圖例位置等功能,使得圖例的大小協(xié)調(diào),位置合適。
1)專題地圖制作是個繁瑣的作業(yè)過程,很難實現(xiàn)全部自動化,筆者僅僅是從表達(dá)數(shù)據(jù)要素中尋找共性,進(jìn)行分類批量處理,達(dá)到節(jié)省人力和作業(yè)時間的目的。
2)整合了ARCMAP中制圖的各個零散環(huán)節(jié),利用已有的批處理程序語言編制出適合的流水化作業(yè)程序和工藝流程,實現(xiàn)比ARCMAP更自動化、更少人工干預(yù)進(jìn)行專題地圖的制作和輸出。
3)仍有不足之處,比如制圖的渲染顏色過于單調(diào),對于不同分布評價指標(biāo)數(shù)據(jù)效果不佳,導(dǎo)致一些評估指標(biāo)專題圖的符號系統(tǒng)未能滿足要求,需人工修改。因此,要實現(xiàn)更好的制圖效果,更加自動化,仍需作進(jìn)一步探索。
[1] 何靜,鄒崢嶸,曾毅.土地調(diào)查專題圖件的制作[J].測繪科學(xué),2012,37(2):66-68.
[2] 鄧躍明,翟婭娟,劉治枝.基于 MapInfo的專題地圖制作[J].測繪通報,2001(7):17-18.
[3] 潘燕.一種基于 GIS 的專題地圖制作模式[J].測繪通報,2005(9):38-40.
[4] 余詠,彭艷麗,尹言軍,等.基于Arcpy 的影像地圖自動處理技術(shù)研究[J].測繪通報,2015(3):82-85.
[5] 陳志軍,陳建國.系列地圖批處理自動成圖解決方案-以勘查地球化學(xué)系列圖為例[J].地質(zhì)學(xué)刊,2013,37(3):456-464.
[6] 仇逸清,宋仁波.基于GIS 和ArcPy 的地質(zhì)剖面半自動繪制方法[J].工程勘察,2015(5):64-68.
[7] 徐京華.專題地圖制作技術(shù)與方法探討[J].測繪通報,2003(3):46-48.
[8] 何學(xué)洲,顧學(xué)明,景祥.地理信息元數(shù)據(jù)驅(qū)動的地圖整飾技術(shù)研究[J].測繪科學(xué)技術(shù)學(xué)報,2014,31(5):543-546.
[9] 戴立乾,高鵬葉,海翔.淺析Pyhton語言在縣級坡度分級圖制作中的應(yīng)用[J].安徽農(nóng)業(yè)科學(xué),2009,37(23):11324-11327.
[10] 湯國安,楊昕.ArcGIS地理信息系統(tǒng)空間分析實驗教程[M].2版.北京:測繪科學(xué)出版社,2012.
[11] PIMPLER E.2013.Programming ArcGIS 10.1 with Python Cookbook[M]. Brimingham, UK: Packt Publishing.
[12] Esri.ArcgGis幫助文檔(10.2、10.2.1和10.2.2)[DB/OL].http://resources.arcgis.com/zh-CN/help/main/10.2,2014-5-15.
[13] 戴靚,姚新春,周生路,等.長三角經(jīng)濟(jì)發(fā)達(dá)區(qū)金壇市土地生態(tài)狀況評價[J].農(nóng)業(yè)工程學(xué),2013,29(8):249-255.
[14] 張利,陳影,王樹,等.濱海快速城市化地區(qū)土地生態(tài)安全評價與預(yù)警-以曹妃甸新區(qū)為例[J]. 應(yīng)用生態(tài)學(xué)報,2015,26(8): 2445-2454.
[15] 黃海,劉長城,陳春.基于生態(tài)足跡的土地生態(tài)安全評價研究[J].水土保持研究,2013,20(1):193-201.
[責(zé)任編輯:郝麗英]
The method of making thematic maps in batch based on Arcpy
SONG Xiangping, DUAN Dongbin, ZHANG Qiaoliang
(School of Surveying and Land Information Engineering, Henan Polytechnic University, Jiaozuo 454000,China)
To solve the problem of low efficiency and high repeatability in process of producing thematic map traditionally, the Arcpy site package of Python is used to improve the method of making thematic map. On the basis of the map template made beforehand, the thematic variable database is used. Arcpy is used to improve the method and consolidate links, such as citing thematic elements, rendering and symbolizing the thematic data, adjusting dynamically the content and layout of the elements of decorating map. A new technology of batch processing streamline production takes shape. Assessing the land ecology in Xinzheng is taken as the case. At the same time, the experiment application is conducted. The streamline operation is realized, with more automatic than ARCMAP, and less artificial intervention.
Arcpy; map template; thematic variable database; thematic map
10.19352/j.cnki.issn1671-4679.2017.02.008
2016-08-22
河南省基礎(chǔ)與前沿技術(shù)研究計劃(自然科學(xué)基金)項目(112300410283);國土資源部土地資源調(diào)查評價類項目(1211410781016)
宋香平(1990-),女,碩士研究生,研究方向:地圖制圖;GIS開發(fā)與應(yīng)用.
P283.7
A
1671-4679(2017)02-0036-06