" />
所屬欄目:軟件開發(fā)論文 發(fā)布日期: 熱度:
摘要:本文介紹了城市測量地塊面積計算公式及測量坐標(biāo)系到計算機屏幕坐標(biāo)系轉(zhuǎn)換的數(shù)學(xué)基礎(chǔ),然后詳述了VB.NET編寫面積打印程序的思路、處理方法及程序中需要考慮的細(xì)節(jié)問題,并給出了實現(xiàn)部分功能的程序代碼。
關(guān)鍵詞:VB.NET編程城市地塊面積程序設(shè)計
1、引言
在城市測量工作中,地塊面積測量是比較常見的測繪工作,面積測量成果一般要附有坐標(biāo)表、略圖、面積數(shù)值、標(biāo)題、說明、責(zé)任欄、相鄰界址點邊長等信息。如果僅編寫單個地塊的面積打印程序,這是比較容易實現(xiàn)的。但是,在實際工作中,一方面,一個總地塊往往包含有多個分類小塊,面積測量成果需要反映各類地塊的信息;另一方面,也需要考慮面積成果的緊湊性,比如有時在頁面上打印一塊面積信息,效果可能比較好,有時在頁面上打印多塊面積信息,看起來比較緊湊,而且比較節(jié)約紙張。如果綜合考慮各種因素,編寫一個面積打印效果較好的程序,還是不容易的。
2、坐標(biāo)法面積計算公式
設(shè)ABC……N為任意多邊形,其頂點的坐標(biāo)分別為(,),(,),……,(,)。
從圖中可以看出,該任意多邊形的面積P為:
由此可得下式:
式中,n為多邊形頂點的個數(shù),,。
3、測量坐標(biāo)系到計算機屏幕坐標(biāo)系的換算
如圖3-1和圖3-2所示,對實地點P,測量坐標(biāo)系轉(zhuǎn)換到計算機屏幕坐標(biāo)系中的坐標(biāo)計算公式如下:
其中,為點P在測量坐標(biāo)系中的坐標(biāo),為要顯示區(qū)域的最小坐標(biāo)(左下角),為最大測量坐標(biāo)(右上角)。為點P在計算機屏幕顯示區(qū)的屏幕坐標(biāo),為屏幕顯示區(qū)的最小坐標(biāo)(左上角),為屏幕顯示區(qū)最大坐標(biāo)(右下角),Sx,Sy為測量坐標(biāo)到屏幕坐標(biāo)換算的比例系數(shù),計算公式如下:
為了使得在計算機屏幕上顯示的圖形不至變形,從測量坐標(biāo)到屏幕坐標(biāo)換算的比例系數(shù)Sxy,在X方向和Y方向應(yīng)采用相同的比例系數(shù),即Sxy=Min(Sx,Sy)。
4、VB.NET打印機制
VB.NET打印時,要調(diào)用PrintDocument對象的Print方法,這個方法不生成任何打印輸出,但會發(fā)出PrintPage事件,PrintPage事件傳遞e變元,提供當(dāng)前Printer對象的Graphics屬性以及其他成員,我們就在PrintPage事件處理器中編寫打印輸出代碼。如果需要打印其他頁面,則要在退出事件處理器之前將e.HasMorePages屬性設(shè)置為True,這就反復(fù)激發(fā)PrintPage事件,直到打印完全部頁面。所有頁面打印完成后,將e.HasMorePages屬性設(shè)置為False,不再觸發(fā)PrintPage事件,打印過程流程如下:
5、面積打印程序流程圖
我們用VB.NET設(shè)計面積打印程序時,就是利用VB.NET的打印機制,通過計算信息,在程序運行中控制e.HasMorePages屬性,不斷激發(fā)PrintPage事件,在當(dāng)前頁面上打印信息。流程圖如下:
6、程序設(shè)計中需要考慮的細(xì)節(jié)
6.1作者設(shè)計的面積程序打印效果圖
6.2面積數(shù)據(jù)文件格式
假如面積數(shù)據(jù)文件中采用如下坐標(biāo)格式:
……
1, 界址點名,X,Y
2, 界址點名,X,Y
……
在描述某塊面積信息時,這種坐標(biāo)格式很適用,例如A塊面積由1,2,3,4,5,6連續(xù)序號界址點對應(yīng)的面積,我們在描述其面積打印信息時,可寫成…1-6…。
6.3坐標(biāo)表頁數(shù)的確定
設(shè)一行打印兩個坐標(biāo),頁數(shù)用Page表示,頁面可打印區(qū)的高度為PrintHeight、可打印的行數(shù)為PageRow、行間距為a、坐標(biāo)文字高度XYHeight、坐標(biāo)總數(shù)為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為比例縮放系數(shù),為了在繪圖區(qū)全部畫出圖形,Sk選取Sx和Sy比例系數(shù)最小值,我們用e.Graphics.DrawString方法可以繪制點名,Plot為繪圖軌跡,當(dāng)我們用Plot.AddLine方法創(chuàng)建完線段后,可以直接用e.Graphics.DrawPath方法繪出。
6.5程序中控制頁面生成
一方面,當(dāng)前頁面可打印空間已經(jīng)用完,或者剩下空間不能很好存放后面的信息,則要考慮生成新頁;另一方面,如果打印完一頁坐標(biāo)表后,當(dāng)剩下空間較小,而要在頁面上繪制比較大的地塊,點號也較多,這樣的略圖看起來效果很不得體,這種情況也要考慮換頁。為了在程序中控制合理頁面的生成,我們可以使用一個可打印區(qū)比PK(即剩下空間高度除以可打印范圍高度)變量,通過判斷PK值,來確定是否要把當(dāng)前信息打印在當(dāng)前的頁面上。
6.6頁面上繪制文本
標(biāo)題、工程號、界址點號、坐標(biāo)、單位名稱、說明、責(zé)任欄、日期等這些都是文本,繪制時都采用e.Graphics.DrawString和e.Graphics.MeasureString方法,其中e.Graphics.MeasureString方法可以測量文本的高度和寬度,而e.Graphics.DrawString可以在一個指定的矩形范圍內(nèi)繪制文本,這兩個方法結(jié)合起來使用。比如在繪制說明時,事先用e.Graphics.MeasureString方法測量說明字體的高度和寬度,確定一個矩形范圍對象,然后用e.Graphics.DrawString方法在這個矩形范圍內(nèi)繪制文本。
7、結(jié)束語
在編寫面積打印程序時,中間還有許多小細(xì)節(jié):①如有時想輸出部分相鄰點的邊長信息;有時相鄰點間距很小,為了不影響面積略圖效果,只繪制出部分點號;這就需要有控制任意面積點號輸出的功能。②如果為了使說明位置適當(dāng),這需要有能夠任意移動說明位置功能。③有時想橫向輸出成果、標(biāo)題、工程號、界址點號、坐標(biāo)、單位名稱、說明、責(zé)任欄、日期字體及大小設(shè)置等。總之,在程序設(shè)計時必須考慮許多細(xì)節(jié)問題。但只要撐握VB.NET的打印機制和一些基本方法,加上面積計算和坐標(biāo)變換等數(shù)學(xué)知識,編寫出適合本單位使用的地塊面積打印的程序是可行的。本文是作者編寫面積打印的實踐經(jīng)驗和處理方法,僅供讀者參考。
參考資料
[1]丘仲潘等譯.VisualBasic.NET從入門到精通.電子工業(yè)出版社,北京
[2]潘正風(fēng)羅年學(xué).大例尺測圖自動化.原武漢測繪科技大學(xué).1995.12
文章標(biāo)題:基于VB.NET的城市地塊面積打印程序設(shè)計及實現(xiàn)
轉(zhuǎn)載請注明來自:http://m.digitalguess.com/fblw/dianxin/ruanjiankaifa/12250.html
A、B、C類核心期刊是以什么為依據(jù)...關(guān)注:311
sci投稿中關(guān)于online常見的問題匯...關(guān)注:629
攝影藝術(shù)領(lǐng)域AHCI期刊推薦《Phot...關(guān)注:523
Nature旗下多學(xué)科子刊Nature Com...關(guān)注:676
中小學(xué)教師值得了解,這些教育學(xué)...關(guān)注:300
2025年寫管理學(xué)論文可以用的19個...關(guān)注:505
測繪領(lǐng)域科技核心期刊選擇 輕松拿...關(guān)注:183
及時開論文檢索證明很重要關(guān)注:220
中國水產(chǎn)科學(xué)期刊是核心期刊嗎關(guān)注:290
國際出書需要了解的問題解答關(guān)注:244
合著出書能否評職稱?關(guān)注:196
電信學(xué)有哪些可投稿的SCI期刊,值...關(guān)注:182
通信工程行業(yè)論文選題關(guān)注:193
SCIE、ESCI、SSCI和AHCI期刊目錄...關(guān)注:286
評職稱發(fā)論文好還是出書好關(guān)注:164
復(fù)印報刊資料重要轉(zhuǎn)載來源期刊(...關(guān)注:147
電子信息論文范文
智能科學(xué)技術(shù)論文 廣播電視論文 光電技術(shù)論文 計算機信息管理論文 計算機網(wǎng)絡(luò)論文 計算機應(yīng)用論文 通信論文 信息安全論文 微電子應(yīng)用論文 電子技術(shù)論文 生物醫(yī)學(xué)工程論文 軟件開發(fā)論文
SCI期刊分析
copyright © m.digitalguess.com, All Rights Reserved
搜論文知識網(wǎng) 冀ICP備15021333號-3