" />

久久精品电影网_久久久久久电影_久久99精品久久久久久按摩秒播_天堂福利影院_国产男女爽爽爽免费视频_国产美女久久

基于VB.NET的城市地塊面積打印程序設計及實現

所屬欄目:軟件開發論文 發布日期: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

相關問題解答

SCI服務

搜論文知識網 冀ICP備15021333號-3

主站蜘蛛池模板: 国产精品久久国产精品99 gif | 黄色av免费 | 国产一区二区三区久久 | 国产在线观看网站 | 成人免费淫片aa视频免费 | 亚洲精品久久久久久久久久久久久 | 精品久久久久久久久久久久 | 国产精品1区2区3区 一区中文字幕 | 91精品国产91久久久久久最新 | 欧美日韩高清 | 欧美性视频在线播放 | 久久久久国产一区二区三区四区 | 婷婷五月色综合香五月 | 亚洲精品久久国产高清情趣图文 | 视频一区二区三区在线观看 | av免费观看网站 | 综合久久色 | 欧美综合国产精品久久丁香 | 97综合在线 | 亚洲精品电影在线 | 亚洲欧洲中文 | 久久成人久久 | 国产成人在线观看免费 | 亚洲人成在线播放 | 91色综合| 一级毛片视频 | 刘亦菲国产毛片bd | 国产乱精品一区二区三区 | 四虎国产 | 福利视频日韩 | 久久国产精品免费一区二区三区 | 久久精品国产免费一区二区三区 | 欧美日本韩国一区二区 | 久久国产精品网站 | 国产高清视频在线 | 免费黄色a视频 | 国产97视频在线观看 | 网站国产| 91资源在线 | 黄频免费| 国产精品国产三级国产播12软件 |