" />

久久精品99_国产精品视频免费一区_91精品视频播放_国产伦精品一区二区三区视频免费

基于VB.NET的城市地塊面積打印程序設(shè)計及實現(xiàn)

所屬欄目:軟件開發(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

相關(guān)問題解答

SCI服務(wù)

搜論文知識網(wǎng) 冀ICP備15021333號-3

主站蜘蛛池模板: 午夜精品一区二区三区在线视频| 久久久久久噜噜噜久久久精品| www.亚洲一区| 久久精品国产欧美激情| 国产精品视频白浆免费视频| 国产精品美女免费看| y111111国产精品久久婷婷| 成人国产精品久久久久久亚洲| 日韩一二三区不卡在线视频| 国产精品久久久久久久久久久久午夜片| 亚洲最新免费视频| 日韩一二三区不卡在线视频| 日韩av中文字幕第一页| 久久免费国产视频| 欧美极品日韩| 亚洲精品女av网站| 国语自产精品视频在线看| 日韩最新av在线| 久久精品国产91精品亚洲| 国产在线高清精品| 日韩精品无码一区二区三区免费 | 日韩啊v在线| 国产欧美精品xxxx另类| 日本欧美一二三区V| 国产在线xxxx| 欧日韩不卡在线视频| 国产精品一级久久久| 99在线观看视频| 97国产suv精品一区二区62| 国产成人a亚洲精品| 国产激情视频一区| 国产精品久久久久久亚洲影视| 国产精品网站免费| 91精品国产91久久久久福利| 91免费国产网站| 久久精品国产v日韩v亚洲| 欧美中文在线观看国产| 91久久久在线| 久久在线精品视频| 国产精品久久久久久婷婷天堂 | 欧美亚洲激情在线|