ArcView中指定矩形區(qū)域地圖輸出的實現(xiàn)
ArcView軟件由于其友好的用戶界面和強大穩(wěn)定的GIS功能而擁有較多用戶。在ArcView 3.x軟件中,其Layout模塊提供了圖形輸出功能。利用系統(tǒng)提供的圖形用戶界面可以進行簡單的圖形輸出,如對屏幕區(qū)域范圍進行指定比例尺圖形輸出等。這種圖形輸出的特點是:ArcView的版面設計窗口輸出相應視圖窗口所顯示視圖區(qū)域的圖形。如按缺省狀態(tài),系統(tǒng)產(chǎn)生一個包含整個視圖圖形區(qū)域的版面設計,這樣的圖形輸出不能保證視圖按用戶所需要的比例尺進行輸出;如設定版面的比例尺和圖紙大小,系統(tǒng)可以按照給定的比例尺和圖紙大小輸出。由于ArcView中圖形數(shù)據(jù)的存放是連續(xù)和成片的,手工操作無法保證視圖窗口顯示的視圖區(qū)域就是用戶嚴格要求繪圖輸出的區(qū)域,視圖窗口顯示的視圖區(qū)域與用戶所需的繪圖區(qū)域總有微小的差異。這對于常規(guī)按圖幅使用地形圖的用戶是非常不便的,甚至是無法容忍的。
實際應用當中,地圖輸出一般有兩種情況:①常規(guī)的用圖方法,按照地形圖分幅輸出標準規(guī)格尺寸的地圖;②非常正規(guī)的靈活用圖方法,按照地形圖的比例尺,輸出指定矩形區(qū)域地圖。這個區(qū)域可以是跨圖幅的或一個標準圖幅的某個局部。針對ArcView地圖輸出的不足和地圖輸出的用戶需求,筆者用ArcView的Avenue編程,實現(xiàn)了這兩項地圖的輸出功能,實際上①是②的一個特例。以下給出實現(xiàn)任意指定矩形區(qū)域范圍地圖精確輸出的方法、步驟、程序源代碼及其解釋,與讀者共享。
一、輸出的方法
1.任意指定區(qū)域范圍,地圖精確輸出程序的編寫思路。在ArcView輸出過程中,實際包括兩個坐標系:視圖坐標系和繪圖輸出坐標系。圖形輸出時,就要建立兩者之間的關系并保證所選擇輸出的視圖區(qū)域嚴格按照指定比例尺輸出。
2.給以上所編程序重命名。
系統(tǒng)新編的程序一般以“‘script’+數(shù)字”命名,程序編好并通過編譯后可給其另起一便于記憶的程序名如LayoutAsPointedRectangle。
3.在系統(tǒng)之View模塊的萊單欄或工具欄增加“任意指定區(qū)域范圍,地圖精確輸出”的菜單項或工具項。
利用ArcView的Customize功能,將“任意指定區(qū)域范圍,地圖精確輸出”菜單項或工具項增加至其菜單欄或工具欄中。當用戶單擊該菜單項或工具項時,系統(tǒng)將執(zhí)行LayoutAsPointed Rectangle程序。
以上幾步做好后,該項功能就可以使用了。
二、輸出的步驟
1.指定地圖單位和距離單位。在View模塊的View菜單的Properties菜單項正確指定地圖單位和距離單位(此兩單位我國一般采用m)。
2.選擇與所設計“任意指定區(qū)域范圍,地圖精確輸出”模塊相應的菜單項或工具項。鼠標單擊“任意指定區(qū)域范圍,地圖精確輸出”的菜單項或工具項,系統(tǒng)選定該項輸出功能。
3.選擇要輸出地圖的視圖矩形區(qū)域。用鼠標在計算機屏幕上選擇要輸出地圖的視圖矩形區(qū)域,系統(tǒng)運行以上所編Avenue程序。系統(tǒng)產(chǎn)生一個版面。若為標準圖幅,則輸入圖幅號,系統(tǒng)自動計算要輸出圖幅的地理坐標范圍。
4.繪圖輸出或打印。在繪圖儀或打印機上輸出該區(qū)域地圖。
三、輸出的Avenue程序源代碼
任意指定區(qū)域范圍,地圖精確輸出的Avenue程序源代碼如下:
theView=av.Find(“視圖名”) ’獲取要繪的視圖
theMapDisplay=theView.GetDisplay ’得到地圖顯示器
aRect=theView.ReturnUserRect ’用地圖坐標單位設定地圖顯示器上要繪圖輸出的矩形地圖范圍(地方坐標)
if(aRect.IsNil.Not)then
theMapDisplay.ZoomToRect(aRect) ’將地圖顯示器(視圖)范圍縮放為要繪圖輸出的矩形地圖范圍
theMapDisplay.InvalidateRect(aRect) ’令地圖顯示器(視圖)無效使其重繪
theLayout=Layout.Make ’制作版面設計輸出頁
thePageDisplay=theLayout.GetDisplay ’獲取版面設計輸出頁的頁面顯示器
thePageDisplay.SetPageSize(圖紙橫向長度@圖紙縱向長度) ’設定輸出圖紙
’(頁面顯示器)的頁面尺寸,此尺寸單位應為英寸
thePageExtent=thePageDisplay.ReturnPageExtent ’獲取頁面顯示器的圖紙范圍(英寸)
thePageOrigin=thePageExtent.ReturnOrigin ’獲取頁面顯示器圖紙范圍的左下角坐標(英寸)
theRect=Rect.Make(thePageOrigin,圖紙繪圖區(qū)域的橫向長度@圖紙繪圖區(qū)域的縱向長度)
’指定頁面繪圖矩形區(qū)域(英寸為單位)
thePageDisplay.ZoomToRect(theRect) ’將頁面顯示器縮放至該頁面繪圖矩形區(qū)域
theVFrame = ViewFrame.Make(theRect) ’以該繪圖矩形區(qū)域為界,制作視圖框(viewframe)
theVFrame.SetView(theView,False) ’設定該視圖框不隨視圖顯示范圍的變化而變化
theVFrame.SetScalePreserved(True) ’設定視圖框比例尺保持不變
theVFrame.SetUserScale(用戶指定的比例尺分母) ’設定用戶輸出地圖的比例尺
theLayout.GetGraphics.Add(theVFrame) ’將要輸出圖形加到輸出頁
end
“thePageDisplay.SetPageSize(圖紙橫向長度@圖紙縱向長度)”步驟中的兩個參數(shù)計算方法是
圖紙橫向長度=aRect.GetWidth * Scale + deltaX
圖紙縱向長度=aRect.GetHeight * Scale + deltaY
其中,Scale為用戶輸出地圖的比例尺分母,deltaX和deltaY是不大于地圖邊框到圖紙邊緣距離的某個值。圖紙橫向長度和圖紙縱向長度的最大值應小于等于繪圖紙的長度,圖紙橫向長度和圖紙縱向長度的最小值應小于等于繪圖紙的寬度(這里假定繪圖紙的長度大于寬度)。
“theRect = Rect.Make(thePageOrigin,圖紙繪圖區(qū)域的橫向長度@圖紙繪圖區(qū)域的縱向長度)”步驟中
圖紙繪圖區(qū)域的橫向長度應為aRect. ReturnWidth * Scale,圖紙繪圖區(qū)域的縱向長度應為aRect.ReturnHeight * Scale。
四、結束語
ArcView由于其優(yōu)越的性能而廣為GIS用戶采用,但在圖形輸出和漢字注記方面的缺憾影響了其性能的進一步發(fā)揮。筆者所編程序完善了其圖形輸出功能,并已在北京市測繪供圖信息查詢系統(tǒng)和密云縣城市規(guī)劃管理信息系統(tǒng)中得到廣泛應用。
聲明①:文章部分內容來源互聯(lián)網(wǎng),如有侵權請聯(lián)系刪除,郵箱 cehui8@qq.com