歐丁丁,張 琪,劉世好,曹 虹,文 汲,周 維,尹祺卿,胡春香
(1.國(guó)家林業(yè)和草原局中南調(diào)查規(guī)劃設(shè)計(jì)院,長(zhǎng)沙 410014; 2.中南林業(yè)科技大學(xué),長(zhǎng)沙 410004)
林業(yè)制圖是林業(yè)工作中的一項(xiàng)基礎(chǔ)性工作,也是向大眾直觀展示林業(yè)調(diào)查、規(guī)劃設(shè)計(jì)成果的重要途徑[1-3],但傳統(tǒng)的林業(yè)制圖工作量大、技術(shù)要求高[4-7],特別具體到每個(gè)小班的現(xiàn)狀和設(shè)計(jì)情況的圖件制作,圖件數(shù)量多,制圖時(shí)間周期長(zhǎng),嚴(yán)重?cái)D占項(xiàng)目時(shí)間?;诖耍糠謱W(xué)者開(kāi)始思考如何進(jìn)行自動(dòng)出圖,并尋求適合特定條件下的自動(dòng)出圖方法。有的學(xué)者對(duì)單個(gè)小班的出圖方法進(jìn)行了研究,如:李霄等[8]基于Arcgis內(nèi)置站點(diǎn)包ArcPy對(duì)違法礦山小班的現(xiàn)狀進(jìn)行自動(dòng)出圖方法研究,通過(guò)建立地圖模板,遍歷要素的每一個(gè)小班,使用動(dòng)態(tài)文本對(duì)小班現(xiàn)狀進(jìn)行描述,最后導(dǎo)出圖片,相比人工制圖節(jié)省了大量的時(shí)間;陽(yáng)昭[9]利用ArcGIS10.2的數(shù)據(jù)驅(qū)動(dòng)頁(yè)面,對(duì)低效林改造作業(yè)設(shè)計(jì)項(xiàng)目小班進(jìn)行了自動(dòng)分幅出圖,實(shí)現(xiàn)了林業(yè)項(xiàng)目專題圖的自動(dòng)分幅出圖。雖然已有不少有關(guān)ArcGIS自動(dòng)出圖的研究,但目前依然存在尚未解決的問(wèn)題,如:在對(duì)多個(gè)小班自動(dòng)出圖的時(shí)候,如何避免圖面框線與小班界線相交的問(wèn)題、如何在出圖時(shí)自動(dòng)生成小班屬性簡(jiǎn)表,以及同時(shí)一張已定紙張大小的范圍能內(nèi)包含最多的小班,從而節(jié)約紙張并且保持出圖界面的美觀等。本研究將通過(guò)結(jié)合ArcGIS內(nèi)置站點(diǎn)包ArcPy和基于Excel的編程語(yǔ)言VBA解決上述問(wèn)題,為林業(yè)自動(dòng)化制圖提供一種新的方法。
長(zhǎng)順縣位于貴州省中南部,地處烏蒙山—苗嶺生態(tài)屏障中段及烏江生態(tài)保護(hù)帶中段,距省城貴陽(yáng)市 87 km,據(jù)黔南自治州首府都勻市178 km,北靠貴陽(yáng)市及平壩縣,東鄰長(zhǎng)順縣,東南抵羅甸縣,西南抵紫云苗族布依族自治縣,西北抵安順,東北抵貴陽(yáng)市花溪;屬濕潤(rùn)地區(qū)的亞熱帶季風(fēng)氣候,具有山岳型氣候特點(diǎn),冬春干燥,夏季濕潤(rùn),四季分明。
近年來(lái),長(zhǎng)順縣積極推進(jìn)國(guó)家儲(chǔ)備林建設(shè)進(jìn)度,已完成國(guó)家儲(chǔ)備林建設(shè)一期項(xiàng)目可研,為全面完成貴州省國(guó)家儲(chǔ)備林建設(shè)任務(wù),科學(xué)經(jīng)營(yíng)和精準(zhǔn)提升長(zhǎng)順縣森林質(zhì)量,增強(qiáng)區(qū)域內(nèi)優(yōu)質(zhì)木材和生態(tài)產(chǎn)品的供應(yīng)能力,鞏固全縣脫貧攻堅(jiān)成果,深入論證長(zhǎng)順縣國(guó)家儲(chǔ)備林二期建設(shè)的必要性和可行性,長(zhǎng)順縣林業(yè)局委托國(guó)家林業(yè)和草原局中南調(diào)查規(guī)劃設(shè)計(jì)院編制《長(zhǎng)順縣國(guó)家儲(chǔ)備林二期建設(shè)項(xiàng)目可行性研究報(bào)告》。
數(shù)據(jù)來(lái)源于《長(zhǎng)順縣國(guó)家儲(chǔ)備林二期建設(shè)項(xiàng)目可行性研究報(bào)告》中劃定的國(guó)家儲(chǔ)備林建設(shè)小班。
1)ArcPy簡(jiǎn)介
ArcPy是一個(gè)以成功的 arcgisscripting 模塊為基礎(chǔ)并繼承了 arcgisscripting 功能進(jìn)而構(gòu)建而成的站點(diǎn)包。目的是為以實(shí)用高效的方式通過(guò) Python 執(zhí)行地理數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動(dòng)化創(chuàng)建基礎(chǔ)。在ArcGIS的內(nèi)置Python窗口中可以導(dǎo)入AArcPy站點(diǎn)包,進(jìn)行數(shù)據(jù)的處理和分析。
使用數(shù)據(jù)驅(qū)動(dòng)框架進(jìn)行小班自動(dòng)出圖的關(guān)鍵是小班索引圖層的創(chuàng)建,而ArcGIS中自帶的索引圖層創(chuàng)建功能難以滿足出圖要求,如按鄉(xiāng)鎮(zhèn)出圖、邊框與小班界不相交等。本研究將使用ArcPy進(jìn)行小班索引圖層的創(chuàng)建。
2)VBA簡(jiǎn)介
VBA(Visual Basic for Applications)是微軟公司基于VB(Visual Basic)和office開(kāi)發(fā)的自動(dòng)化辦公語(yǔ)言,VBA與VB編程語(yǔ)言的編程語(yǔ)法、開(kāi)發(fā)機(jī)制和語(yǔ)言結(jié)構(gòu)幾乎一致,主要能用來(lái)擴(kuò)展office的應(yīng)用程序功能。
小班屬性是小班設(shè)計(jì)圖的重要組成部分,用于補(bǔ)充每個(gè)小班的屬性及設(shè)計(jì)情況,通??梢杂脛?dòng)態(tài)文本和小班簡(jiǎn)表的方式實(shí)現(xiàn)。對(duì)于一個(gè)小班的小班設(shè)計(jì)圖而言,動(dòng)態(tài)文本的實(shí)現(xiàn)方式相對(duì)簡(jiǎn)單,文本布局可根據(jù)需求自行排版,但是不能同時(shí)顯示多個(gè)小班的屬性信息。使用小班簡(jiǎn)表可同時(shí)顯示多個(gè)小班的屬性信息,但是對(duì)于自動(dòng)出圖而言,如何根據(jù)小班屬性表桉小班索引圖層定制的分幅自動(dòng)生成小班簡(jiǎn)表是需要解決的重點(diǎn)及難點(diǎn)。本研究基于Excel使用VBA編程語(yǔ)言自動(dòng)生成小班簡(jiǎn)表。
1)圖層的添加。根據(jù)國(guó)家儲(chǔ)備林相關(guān)技術(shù)規(guī)程,使用地形圖作為底圖,行政界線包括鄉(xiāng)鎮(zhèn)界和村界,在ArcMAP中依次添加地形圖、鄉(xiāng)鎮(zhèn)界線、村界線、設(shè)計(jì)小班和索引圖層。其中:設(shè)計(jì)小班和索引圖層可為任意面圖層,并將其圖層名稱分別更改為XB_JX和qdfz,同時(shí)為qdfz添加tplj字段和page字段。
2)數(shù)據(jù)驅(qū)動(dòng)頁(yè)面設(shè)置。在設(shè)置數(shù)據(jù)驅(qū)動(dòng)頁(yè)面中,勾選啟用數(shù)據(jù)驅(qū)動(dòng)頁(yè)面數(shù)據(jù)框?yàn)槟J(rèn)圖層,索引圖層為qdfz圖層,名稱字段為page,排序字段為OBJECTID字段,調(diào)整當(dāng)前比例為1∶10000,然后在范圍中選擇居中并保持當(dāng)前比例。
3)頁(yè)面設(shè)置。轉(zhuǎn)為布局視圖,并在文件—頁(yè)面和打印設(shè)置中將紙張?jiān)O(shè)置為A3橫向,將數(shù)據(jù)框調(diào)整為合適大小,添加公里格網(wǎng),再依次添加指北針、圖例和比例尺,然后插入圖片,將圖片錨點(diǎn)設(shè)置為左上定點(diǎn),并能進(jìn)行移動(dòng)和縮放,保證圖片左上頂點(diǎn)與數(shù)據(jù)框頂點(diǎn)重合,圖片大小以100%縮放時(shí)能看清圖片中的文字為宜,然后右擊圖片查看屬性,在源中選擇數(shù)據(jù)驅(qū)動(dòng)頁(yè)面的簡(jiǎn)單路徑,索引圖層的字段設(shè)置為tplj。
然后為小班設(shè)計(jì)圖添加動(dòng)態(tài)標(biāo)題,在插入中選擇插入標(biāo)題,代碼如圖1所示。
圖1 小班設(shè)計(jì)圖標(biāo)題動(dòng)態(tài)文本
4)頁(yè)面定義查詢。右擊XB_JX,在定義查詢選擇頁(yè)面定義,啟用頁(yè)面定義查詢頁(yè)面名稱字段選擇page,選擇匹配。這樣可保證在出圖時(shí),XB_JX圖層只顯示與數(shù)據(jù)驅(qū)動(dòng)頁(yè)面中page字段屬性一樣的小班。
5)小班標(biāo)注。利用小班標(biāo)注可以將小班界與屬性信息相關(guān)聯(lián),本研究使用分子式進(jìn)行小班信息的標(biāo)注,其中:[bz]為小班號(hào)字段。如圖2所示。
圖2 標(biāo)注樣式
6)圖層范圍指示器。圖層范圍指示器可用于標(biāo)識(shí)出圖范圍在總范圍中的位置,本研究中還可用來(lái)檢驗(yàn)出圖效果(通過(guò)查看小班界線與指示范圍是否相交來(lái)檢驗(yàn))。實(shí)現(xiàn)步驟為:插入數(shù)據(jù)框、添加小班數(shù)據(jù)、添加鄉(xiāng)鎮(zhèn)界、更改數(shù)據(jù)顯示樣式、右擊新建的圖層選擇范圍指示器選中圖層并勾選使用簡(jiǎn)單范圍。
設(shè)置完后將出圖模板保存?zhèn)溆谩?/p>
小班索引圖層創(chuàng)建的關(guān)鍵是在1∶10000的比例尺下,將完全被A3紙覆蓋的小班的page字段命名為相同的值。
1)獲取屬性表。在ArcPy中對(duì)小班的屬性進(jìn)行查詢分析有兩種方法:一種是使用游標(biāo)依次進(jìn)行遍歷,另一種是將屬性表導(dǎo)出為數(shù)組進(jìn)行操作,本步驟只能選擇第一種方式進(jìn)行,所需要的小班屬性包括小班坐標(biāo)點(diǎn)、OBJECTID、page字段和鄉(xiāng)鎮(zhèn)字段,在使用游標(biāo)遍歷小班并保存所需的屬性信息至數(shù)組后,對(duì)數(shù)組按照鄉(xiāng)鎮(zhèn)名稱進(jìn)行排序,方便后面按鄉(xiāng)鎮(zhèn)進(jìn)行位置距離的搜索。實(shí)現(xiàn)代碼如圖3所示。
圖3 獲取屬性表代碼
2)賦值屬性表。將所需要的屬性提取出來(lái)后,要對(duì)page字段進(jìn)行賦值,對(duì)屬性表中的每一行,提取每個(gè)小班的四至坐標(biāo),如果鄉(xiāng)鎮(zhèn)名字相同,則進(jìn)行遍歷,遍歷分兩次進(jìn)行,第一層是遍歷每一個(gè)小班,第二層是針對(duì)這一個(gè)小班對(duì)比鄉(xiāng)鎮(zhèn)內(nèi)其他小班的四至坐標(biāo)與本小班的四至坐標(biāo)的x方向?qū)嶋H距離的最大值和y方向上實(shí)際距離的最大值,如果此距離均小于A3紙張的實(shí)際距離的某個(gè)比例(因?yàn)樾“喾秶粫?huì)鋪滿整張A3紙),則將其page字段賦相同的值,同時(shí),進(jìn)行檢測(cè),若添加了一個(gè)新的小班后,整體的范圍超過(guò)了A3紙張的實(shí)際距離的某個(gè)比例,則不賦同樣的值。實(shí)現(xiàn)代碼如下:
def fz_sxb(sxb_list,cs):
i =0
ss_list=[]
xz_list=[]
for shp in sxb_list:
x1=[]
y1=[]
if shp[2] is None:
i+=1
x_z=[]
y_z=[]
if shp[3] not in xz_list:
i=1
xz_list.append(shp[3])
for plts in shp[0]:
x1.append(plts[0])
y1.append(plts[1])
shp[2]=i
x_z=x1
y_z=y1
for row1 in sxb_list:
x2=[]
y2=[]
if row1[2] is None and row1[3]==shp[3]:
for pltss in row1[0]:
x2.append(pltss[0])
y2.append(pltss[1])
x_z=x_z+x2
y_z=y_z+y2
x_min=min(x_z)
x_max=max(x_z)
y_min=min(y_z)
y_max=max(y_z)
x_jl=x_max-x_min
y_jl=y_max-y_min
if x_jl<=(4200*float(cs)) and y_jl <=(2970*float(cs)):
row1[2]=i
else:
for x in x2:
x_z.remove(x)
for y in y2:
y_z.remove(y)
ss_list.append((shp[1],shp[2]))
return ss_list
CS表示出圖范圍相對(duì)A3紙的比例。
3)賦值字段。進(jìn)行屬性表(數(shù)組)賦值后,需將結(jié)果賦值給小班屬性表的字段,本步驟使用游標(biāo)進(jìn)行賦值。實(shí)現(xiàn)代碼如下:
def fz_zd(fc,field,xzfield,cs):
k_list=fz_sxb(hq_sxb(fc,field,xzfield),cs)
with arcpy.da.UpdateCursor(fc,["OID@",field,xzfield])as cursor:
for row in cursor:
for k in k_list:
if row[0]==k[0]:
row[1]=str(row[2])+"_"+str(k[1])
cursor.updateRow(row)
完成上述步驟后,將字段賦值后的小班按照page字段進(jìn)行小班融合,生成數(shù)據(jù)驅(qū)動(dòng)頁(yè)面的索引圖層。本研究將此步驟放到自動(dòng)出圖方法中實(shí)現(xiàn)(3.4節(jié))。
1)轉(zhuǎn)為Excel。將賦值字段后的小班屬性表,使用轉(zhuǎn)換工具箱中的表轉(zhuǎn)Excel轉(zhuǎn)成Excel。
2)數(shù)據(jù)清理與格式設(shè)置。導(dǎo)出的屬性表中,包含了一些不需要顯示在小班簡(jiǎn)表中的信息,需手動(dòng)進(jìn)行刪除,同時(shí),行列的寬度和長(zhǎng)度、字體格式和大小等需手動(dòng)進(jìn)行調(diào)節(jié)。最后將page字段移動(dòng)至最后一列方便圖片保存。
3)使用VBA自動(dòng)生成小班簡(jiǎn)表圖片。首先生成page字段的唯一值字典,然后對(duì)page字段進(jìn)行篩選,把篩選的內(nèi)容復(fù)制成圖片然后新建空白的圖表,把內(nèi)容粘貼進(jìn)圖表,再使用VBA圖表的導(dǎo)出功能可將內(nèi)容轉(zhuǎn)換成圖片。實(shí)現(xiàn)代碼如下:
Sub xbjb()
Dim arr()
Dim dic
Dim pa
Dim a As Range
Dim i, j As Integer
Dim arr2()
Dim shp As Shape
Dim oChartObject As ChartObject
Dim oChart As Chart
sPath = Excel.ThisWorkbook.Path & "”
arr = Sheet2.Range("a3:" & Chr(Range("z3").End(xlToLeft).Column + 64) & Range("a65536").End(xlUp).Row)
Set dic = CreateObject("scripting.dictionary")
pa = Chr(Range("z2").End(xlToLeft).Column + 64)
arr2 = Range(pa & "3:" & pa & Range(pa & "65536").End(xlUp).Row)
For i = LBound(arr2) To UBound(arr2)
dic(arr2(i, 1)) = 1
Next
Rows("2:2").Select
Range("F2").Activate
Selection.AutoFilter
For Each d In dic.keys
ActiveSheet.Range("$A$2:" & "$" & pa & "$" & Range("a65536").End(xlUp).Row).AutoFilter Field:=Range("z3").End(xlToLeft).Column, Criteria1:=d
Range("A1:" & Chr(Range("z3").End(xlToLeft).Column + 63) & Range("a65536").End(xlUp).Row).CopyPicture Appearance:=xlScreen, Format:=xlPicture
ActiveSheet.Paste
For Each shp In Shapes
shp.Title = d
shp.Copy
Set oChartObject = ChartObjects.Add(0, 0, shp.Width, shp.Height)
oChartObject.Activate
ActiveChart.Paste
oChartObject.Chart.Export sPath & d & ".jpg"
shp.Delete
For Each oChartObject In ChartObjects
oChartObject.Delete
Next
Next
Next
End Sub
用ArcPy的融合代碼生成索引圖層,并為索引圖層的tplj和xh字段賦值,tplj表示小班屬性表所對(duì)應(yīng)的絕對(duì)路徑,xh表示該張小班設(shè)計(jì)圖的序號(hào)。根據(jù)之前制作的出圖模板,替換XB_JX及qdfz的數(shù)據(jù)源,最后結(jié)合數(shù)據(jù)驅(qū)動(dòng)導(dǎo)出圖片,保存為jpg格式。出圖代碼如下:
import arcpy
import os
fc=arcpy.GetParameterAsText(0)
mxd=arcpy.mapping.MapDocument((arcpy.GetParameterAsText(1)).decode("utf-8"))
excel_sjqd=arcpy.GetParameterAsText(2)
tp_luj=arcpy.GetParameterAsText(3)
tp_fbl=int(arcpy.GetParameterAsText(4))
wj_lj=os.path.dirname(mxd.filePath)
if os.path.exists(os.path.join(wj_lj,"sjqd_ys.gdb")):
arcpy.Delete_management(os.path.join(wj_lj,"sjqd_ys.gdb"))
arcpy.CreateFileGDB_management(wj_lj,"sjqd_ys")
else:
arcpy.CreateFileGDB_management(wj_lj,"sjqd_ys")
out_gdb=os.path.join(wj_lj,"sjqd_ys.gdb")
arcpy.Dissolve_management(fc, os.path.join(out_gdb,"XB_RH"),
"Page", "", "MULTI_PART",
"DISSOLVE_LINES")
arcpy.AddField_management(os.path.join(out_gdb,"XB_RH"),"xz","TEXT")
arcpy.AddField_management(os.path.join(out_gdb,"XB_RH"),"xh","TEXT")
arcpy.AddField_management(os.path.join(out_gdb,"XB_RH"),"tplj","TEXT")
with
arcpy.da.UpdateCursor(os.path.join(out_gdb,"XB_RH"),["Page","xz","xh","tplj"])as cursor:
for row in cursor:
row[1]=str(row[0]).split("_")[0]
row[2]=str(row[0]).split("_")[1]
row[3]=str(os.path.join(excel_sjqd,row[0]))+".jpg"
cursor.updateRow(row)
arcpy.Copy_management(fc,os.path.join(out_gdb,"XB_FZ"))
df=arcpy.mapping.ListDataFrames(mxd)[0]
lyr_list=arcpy.mapping.ListLayers(df)
for lyr in lyr_list:
if lyr.name == "XB_FZ" or lyr.name == "XB_RH":
arcpy.mapping.RemoveLayer(df,lyr)
if lyr.name == "qdfz":
lyr.replaceDataSource(out_gdb,"FILEGDB_WORKSPACE","XB_RH")
if lyr.name =="XB_JX":
lyr.replaceDataSource(out_gdb,"FILEGDB_WORKSPACE","XB_FZ")
if lyr.name ==os.path.basename(fc):
arcpy.mapping.RemoveLayer(df,lyr)
arcpy.RefreshActiveView
for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
mxd.dataDrivenPages.currentPageID = pageNum
filds=["OID@","xz","xh"]
with arcpy.da.SearchCursor(os.path.join(out_gdb,"XB_RH"),filds) as cursor:
for row in cursor:
if str(row[0])==str(pageNum):
a=str(str(row[1])+"小班設(shè)計(jì)圖"+str(row[2])+".jpg").decode("utf-8")
arcpy.mapping.ExportToJPEG(mxd,os.path.join(tp_luj,a),resolution=tp_fbl)
del mxd
自動(dòng)化制圖的代碼比較復(fù)雜,進(jìn)行成果分享時(shí)需對(duì)代碼進(jìn)行包裝,本研究使用ArcGis的腳本制作工具進(jìn)行代碼包裝,在ArcGis的目錄中新建工具箱,并新建Python腳本工具,由前文步驟可知,共需新建2個(gè)Python腳本,第一個(gè)為小班字段賦值腳本,第二個(gè)為自動(dòng)出圖腳本。結(jié)果如圖4、圖5所示。
圖4 字段賦值腳本
圖5 自動(dòng)出圖腳本
小班設(shè)計(jì)圖全部導(dǎo)出完成后,對(duì)小班設(shè)計(jì)圖進(jìn)行手動(dòng)檢查,檢查小班界是否與圖框相交、是否同時(shí)出現(xiàn)兩個(gè)鄉(xiāng)鎮(zhèn)的小班等不符合要求的小班設(shè)計(jì)圖。
經(jīng)過(guò)檢查后, 121張小班設(shè)計(jì)圖,只有1張小班設(shè)計(jì)圖由于小班簡(jiǎn)表與小班界線存在相交的現(xiàn)象,美觀率99.2%。在具體操作中,不合格小班設(shè)計(jì)圖可手動(dòng)進(jìn)行拖動(dòng)重新出圖,或者調(diào)整參數(shù)的大小或者調(diào)整頁(yè)面元素的布局,從而保證小班設(shè)計(jì)圖與小班簡(jiǎn)表不重疊。
從出圖結(jié)果看,所有小班設(shè)計(jì)圖的小班界均與圖框不相交,不僅實(shí)現(xiàn)了按照鄉(xiāng)鎮(zhèn)出圖,還確保了圖面上小班數(shù)量的最大化,在節(jié)約出圖時(shí)間的同時(shí)保證紙張數(shù)量最少。如圖6所示。
根據(jù)小班的實(shí)際位置與實(shí)際A3紙張的大小確定各小班所在的頁(yè)碼,在保證小班界線與框線不相交的同時(shí),確保一張A3頁(yè)面中的小班個(gè)數(shù)最大化,從而減少了紙張數(shù)量。但頁(yè)面元素中,小班簡(jiǎn)表的位置相對(duì)不固定,小班個(gè)數(shù)越多的頁(yè)面,其小班簡(jiǎn)表所占用的范圍也越大,與小班簡(jiǎn)表交叉的可能性也越高,通過(guò)設(shè)置出圖相對(duì)比例參數(shù)可降低交叉的可能性。
圖6 小班設(shè)計(jì)圖
本研究基于ArcGis內(nèi)置站點(diǎn)包ArcPy和VBA,從圖件美觀和減少紙張數(shù)的角度出發(fā),將自動(dòng)化制圖分解為四個(gè)步驟,使用VBA進(jìn)行索引圖層的制作和自動(dòng)出圖、使用VBA進(jìn)行小班屬性簡(jiǎn)表的自動(dòng)生成,較好地解決了林業(yè)專題圖中多個(gè)小班自動(dòng)出圖所面臨的一些問(wèn)題,實(shí)現(xiàn)了林業(yè)制圖的自動(dòng)化和美觀化,在提高工作效率的同時(shí),不僅確保了所有圖件的統(tǒng)一性,還保證了圖件的美觀。
1)使用傳統(tǒng)的手工制作林業(yè)專題圖,需要重復(fù)的進(jìn)行小班簡(jiǎn)表的插入或手動(dòng)更改圖面文字信息、重復(fù)地導(dǎo)出地圖,不僅過(guò)程繁瑣,還容易出錯(cuò),工作效率極低。本研究通過(guò)結(jié)合ArcPy和VBA,實(shí)現(xiàn)了林業(yè)專題圖的自動(dòng)出圖,在保證圖件美觀的同時(shí)大大提升了工作效率。
2)在以往關(guān)于自動(dòng)出圖的研究中,大都是使用原圖層作為索引圖層,故一個(gè)圖件上只能出一個(gè)小班,本研究使用ArcPy進(jìn)行索引圖層的制作,通過(guò)小班位置距離搜索功能,自動(dòng)調(diào)節(jié)圖上的小班范圍比例,實(shí)現(xiàn)了多個(gè)小班自動(dòng)出圖。
3)與添加動(dòng)態(tài)文本作為小班屬性相比,本研究使用VBA生成小班屬性簡(jiǎn)表作為小班屬性信息,可以添加多個(gè)小班的任意屬性信息,同時(shí)還能使用Excel對(duì)小班簡(jiǎn)表進(jìn)行風(fēng)格化處理,滿足不同的需求。
本研究開(kāi)發(fā)設(shè)計(jì)的自動(dòng)出圖工具對(duì)于提高林業(yè)制圖工作效率具有很重要的現(xiàn)實(shí)意義,結(jié)合ArcPy和VBA,解決了以往自動(dòng)出圖中添加小班屬性信息困難、多個(gè)小班出圖繁瑣等問(wèn)題,能夠節(jié)省大量時(shí)間用于項(xiàng)目成果質(zhì)量的把控,具有很好的推廣意義。但本研究依然存在不足,如小班簡(jiǎn)表的制作過(guò)程中,小班個(gè)數(shù)越多則小班簡(jiǎn)表的長(zhǎng)度越長(zhǎng),與小班界相交的可能性越大,在設(shè)計(jì)代碼的過(guò)程中由于無(wú)法提前知曉每張小班設(shè)計(jì)圖中小班的個(gè)數(shù)和分布情況,故暫時(shí)未能從源頭解決問(wèn)題,只能調(diào)節(jié)頁(yè)面布局情況和相關(guān)參數(shù)大小,在今后的研究中需進(jìn)一步進(jìn)行優(yōu)化。