" />
所屬欄目:軟件開發論文 發布日期:2012-06-08 08:52 熱度:
摘要:本文介紹了城市測量地塊面積計算公式及測量坐標系到計算機屏幕坐標系轉換的數學基礎,然后詳述了VB.NET編寫面積打印程序的思路、處理方法及程序中需要考慮的細節問題,并給出了實現部分功能的程序代碼。
關鍵詞:VB.NET編程城市地塊面積程序設計
1、引言
在城市測量工作中,地塊面積測量是比較常見的測繪工作,面積測量成果一般要附有坐標表、略圖、面積數值、標題、說明、責任欄、相鄰界址點邊長等信息。如果僅編寫單個地塊的面積打印程序,這是比較容易實現的。但是,在實際工作中,一方面,一個總地塊往往包含有多個分類小塊,面積測量成果需要反映各類地塊的信息;另一方面,也需要考慮面積成果的緊湊性,比如有時在頁面上打印一塊面積信息,效果可能比較好,有時在頁面上打印多塊面積信息,看起來比較緊湊,而且比較節約紙張。如果綜合考慮各種因素,編寫一個面積打印效果較好的程序,還是不容易的。
2、坐標法面積計算公式
設ABC……N為任意多邊形,其頂點的坐標分別為(,),(,),……,(,)。
從圖中可以看出,該任意多邊形的面積P為:
由此可得下式:
式中,n為多邊形頂點的個數,,。
3、測量坐標系到計算機屏幕坐標系的換算
如圖3-1和圖3-2所示,對實地點P,測量坐標系轉換到計算機屏幕坐標系中的坐標計算公式如下:
其中,為點P在測量坐標系中的坐標,為要顯示區域的最小坐標(左下角),為最大測量坐標(右上角)。為點P在計算機屏幕顯示區的屏幕坐標,為屏幕顯示區的最小坐標(左上角),為屏幕顯示區最大坐標(右下角),Sx,Sy為測量坐標到屏幕坐標換算的比例系數,計算公式如下:
為了使得在計算機屏幕上顯示的圖形不至變形,從測量坐標到屏幕坐標換算的比例系數Sxy,在X方向和Y方向應采用相同的比例系數,即Sxy=Min(Sx,Sy)。
4、VB.NET打印機制
VB.NET打印時,要調用PrintDocument對象的Print方法,這個方法不生成任何打印輸出,但會發出PrintPage事件,PrintPage事件傳遞e變元,提供當前Printer對象的Graphics屬性以及其他成員,我們就在PrintPage事件處理器中編寫打印輸出代碼。如果需要打印其他頁面,則要在退出事件處理器之前將e.HasMorePages屬性設置為True,這就反復激發PrintPage事件,直到打印完全部頁面。所有頁面打印完成后,將e.HasMorePages屬性設置為False,不再觸發PrintPage事件,打印過程流程如下:
5、面積打印程序流程圖
我們用VB.NET設計面積打印程序時,就是利用VB.NET的打印機制,通過計算信息,在程序運行中控制e.HasMorePages屬性,不斷激發PrintPage事件,在當前頁面上打印信息。流程圖如下:
6、程序設計中需要考慮的細節
6.1作者設計的面積程序打印效果圖
6.2面積數據文件格式
假如面積數據文件中采用如下坐標格式:
……
1, 界址點名,X,Y
2, 界址點名,X,Y
……
在描述某塊面積信息時,這種坐標格式很適用,例如A塊面積由1,2,3,4,5,6連續序號界址點對應的面積,我們在描述其面積打印信息時,可寫成…1-6…。
6.3坐標表頁數的確定
設一行打印兩個坐標,頁數用Page表示,頁面可打印區的高度為PrintHeight、可打印的行數為PageRow、行間距為a、坐標文字高度XYHeight、坐標總數為XY.Count,則
PageRow=Int(PrintHeight/(XYHeight+a))
Page=XY.Count/(2*PageRow)
IfPage>Int(Page)Then
XYPage=Int(Page)+1
Else
XYPage=Int(Page)
EndIf
6.4面積略圖繪制
DimSx,Sy,SkAsDouble
Sx=(MaxXs-MinXs)/(MaxYg-MinYg)
Sy=(MaxYs-MinYs)/(MaxXg-MinXg)
Sk=Math.Min(Sx,Sy)
IfSy>SxThen
MaxYs=MinYs+Sk*(MaxXg-MinXg)
EndIf
DimPlotAsNewSystem.Drawing.Drawing2D.GraphicsPath
DimOldX,OldY,NewX,NewYAsDouble
OldX=MinXs+Sk*(AreaY(0)-MinYg)
OldY=MaxYs-Sk*(AreaX(0)-MinXg)
IfPrintDmName(0)="-2"Then
e.Graphics.DrawString(AreaDm(0),Dhfont,Brushes.Black,OldX,OldY)
EndIf
NewX=MinXs+(AreaY(AreaY.Count-1)-MinYg)*Sk
NewY=MaxYs-Sk*(AreaX(AreaX.Count-1)-MinXg)
IfPrintDmName(AreaX.Count-1)="-2"Then
e.Graphics.DrawString(AreaDm(AreaX.Count-1),Dhfont,Brushes.Black,NewX,NewY)
EndIf
Plot.AddLine(CSng(OldX),CSng(OldY),CSng(NewX),CSng(NewY))
ForI=1ToAreaX.Count-1
NewX=MinXs+(AreaY(I)-MinYg)*Sk
NewY=MaxYs-Sk*(AreaX(I)-MinXg)
IfPrintDmName(I)="-2"Then
e.Graphics.DrawString(AreaDm(I),Dhfont,Brushes.Black,NewX,NewY)
EndIf
Plot.AddLine(CSng(OldX),CSng(OldY),CSng(NewX),CSng(NewY))
OldX=NewX
OldY=NewY
Next
DimPlotpenAsPen=NewPen(Color.Black,0)
e.Graphics.DrawPath(Plotpen,Plot)
Sk為比例縮放系數,為了在繪圖區全部畫出圖形,Sk選取Sx和Sy比例系數最小值,我們用e.Graphics.DrawString方法可以繪制點名,Plot為繪圖軌跡,當我們用Plot.AddLine方法創建完線段后,可以直接用e.Graphics.DrawPath方法繪出。
6.5程序中控制頁面生成
一方面,當前頁面可打印空間已經用完,或者剩下空間不能很好存放后面的信息,則要考慮生成新頁;另一方面,如果打印完一頁坐標表后,當剩下空間較小,而要在頁面上繪制比較大的地塊,點號也較多,這樣的略圖看起來效果很不得體,這種情況也要考慮換頁。為了在程序中控制合理頁面的生成,我們可以使用一個可打印區比PK(即剩下空間高度除以可打印范圍高度)變量,通過判斷PK值,來確定是否要把當前信息打印在當前的頁面上。
6.6頁面上繪制文本
標題、工程號、界址點號、坐標、單位名稱、說明、責任欄、日期等這些都是文本,繪制時都采用e.Graphics.DrawString和e.Graphics.MeasureString方法,其中e.Graphics.MeasureString方法可以測量文本的高度和寬度,而e.Graphics.DrawString可以在一個指定的矩形范圍內繪制文本,這兩個方法結合起來使用。比如在繪制說明時,事先用e.Graphics.MeasureString方法測量說明字體的高度和寬度,確定一個矩形范圍對象,然后用e.Graphics.DrawString方法在這個矩形范圍內繪制文本。
7、結束語
在編寫面積打印程序時,中間還有許多小細節:①如有時想輸出部分相鄰點的邊長信息;有時相鄰點間距很小,為了不影響面積略圖效果,只繪制出部分點號;這就需要有控制任意面積點號輸出的功能。②如果為了使說明位置適當,這需要有能夠任意移動說明位置功能。③有時想橫向輸出成果、標題、工程號、界址點號、坐標、單位名稱、說明、責任欄、日期字體及大小設置等?傊,在程序設計時必須考慮許多細節問題。但只要撐握VB.NET的打印機制和一些基本方法,加上面積計算和坐標變換等數學知識,編寫出適合本單位使用的地塊面積打印的程序是可行的。本文是作者編寫面積打印的實踐經驗和處理方法,僅供讀者參考。
參考資料
[1]丘仲潘等譯.VisualBasic.NET從入門到精通.電子工業出版社,北京
[2]潘正風羅年學.大例尺測圖自動化.原武漢測繪科技大學.1995.12
文章標題:基于VB.NET的城市地塊面積打印程序設計及實現
轉載請注明來自:http://www.56st48f.cn/fblw/dianxin/ruanjiankaifa/12250.html
攝影藝術領域AHCI期刊推薦《Phot...關注:106
Nature旗下多學科子刊Nature Com...關注:152
中小學教師值得了解,這些教育學...關注:47
2025年寫管理學論文可以用的19個...關注:192
測繪領域科技核心期刊選擇 輕松拿...關注:64
及時開論文檢索證明很重要關注:52
中國水產科學期刊是核心期刊嗎關注:54
國際出書需要了解的問題解答關注:58
合著出書能否評職稱?關注:48
電信學有哪些可投稿的SCI期刊,值...關注:66
通信工程行業論文選題關注:73
SCIE、ESCI、SSCI和AHCI期刊目錄...關注:121
評職稱發論文好還是出書好關注:68
復印報刊資料重要轉載來源期刊(...關注:51
英文期刊審稿常見的論文狀態及其...關注:69
電子信息論文范文
智能科學技術論文 廣播電視論文 光電技術論文 計算機信息管理論文 計算機網絡論文 計算機應用論文 通信論文 信息安全論文 微電子應用論文 電子技術論文 生物醫學工程論文 軟件開發論文
SCI期刊分析
copyright © www.56st48f.cn, All Rights Reserved
搜論文知識網 冀ICP備15021333號-3