国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于VB.NET的AutoCAD實時加載正射影像方法研究

2018-11-01 03:15:52郭雷徐彥中焦明東
城市勘測 2018年5期
關鍵詞:數(shù)據(jù)文件射影鼠標

郭雷,徐彥中,焦明東

(1.濟南市勘察測繪研究院,山東 濟南 250013; 2.山東省城市空間信息工程技術研究中心,山東 濟南 250013)

1 引 言

數(shù)字正射影像(DOM)數(shù)據(jù)目前廣泛應用在測繪地理信息行業(yè)各部門,同時具有地圖幾何精度和影像特征,可以通過ArcGIS等各種專業(yè)應用軟件自動加載,進行各種分析應用。當前測繪行業(yè)廣泛使用基于AutoCAD軟件開發(fā)的地形圖生產(chǎn)平臺,其成果為標準格式的DWG數(shù)據(jù)。有時也需要利用正射影像數(shù)據(jù)作為地形圖的底圖數(shù)據(jù),來進行各種設計和分析,但是AutoCAD軟件本身卻沒有自動加載正射影像數(shù)據(jù)的功能。

為解決這一問題,本文擬使用VB.NET程序設計語言結合AutoCAD 2010軟件進行二次開發(fā),設計一款獨立運行的應用程序,通過人機交互的方式,加載正射影像數(shù)據(jù)到AutoCAD的DWG圖形中,并確保坐標正確。程序開發(fā)環(huán)境使用Microsoft Visual Studio 2008集成開發(fā)軟件,具有功能強大、界面友好、編譯好的應用程序可移植性強等優(yōu)點,用其開發(fā)的獨立程序可以很流暢地運行在Windows XP、Win 7等主流操作系統(tǒng)中,比較切合用戶的使用體驗。

2 程序設計思路

2.1 正射影像數(shù)據(jù)坐標文件分析

一般一幅標準分幅的數(shù)字正射影像成果,除了一個TIFF格式的影像文件,還應有一個記錄影像定位坐標信息的文本文件。本文采用的數(shù)據(jù)為 1∶5 000比例尺標準分幅數(shù)字正射影像成果,經(jīng)坐標轉換獲得2000國家大地坐標系的坐標信息文件,其坐標信息文件的主要內(nèi)容如圖1所示:

圖1 正射影像坐標信息文件格式

不同于一般正射影像成果附帶的TFW格式坐標信息文件,本文所使用的坐標信息文件已經(jīng)明確指定了數(shù)字正射影像圖的左下角X、Y坐標,右上角X、Y坐標,實際寬度和實際高度,各參數(shù)均以米為單位。需要注意的是X和Y為數(shù)學坐標(X為東方向,Y為北方向)。

程序設計中加載數(shù)字正射影像的函數(shù)AddRaster使用方法如下所示:

RetVal = object.AddRaster(ImageFileName,InsertionPoint,ScaleFactor,RotationAngle)

需要正確指定數(shù)字正射影像文件名(ImageFileName)、左下角插入點三維坐標(InsertionPoint)、縮放比例(ScaleFactor)、旋轉角度(RotationAngle)等參數(shù),然后才能使用此函數(shù)插入影像數(shù)據(jù)。程序設計的思路即轉換為如何通過坐標信息文件獲取加載影像數(shù)據(jù)所需要的各種參數(shù)。

因為AddRaster函數(shù)是利用影像的左下角插入點縱橫坐標和縮放比例數(shù)值來確定影像的右上角縱橫坐標,所以在保持寬高比不變的情況下,縮放比例數(shù)值即為數(shù)字正射影像數(shù)據(jù)在DWG圖形中的橫向實際寬度,也就是本文使用的坐標信息文件中的實際寬度參數(shù)。由于僅改變DWG地形圖當前比例尺參數(shù),并不會相應改變相關地物要素的實際坐標位置,所以通過這種方法利用坐標信息插入影像數(shù)據(jù)到地形圖以后,總是能夠正確插入到實際的地理坐標位置。也就是說這種方法與地形圖的當前比例尺沒有關系,可以適用于任意比例尺的地形圖數(shù)據(jù)。

2.2 程序界面及功能設計

根據(jù)實際需要,設計程序運行界面如圖2所示。

圖2 程序運行界面

程序主要包括打開地形圖文件,指定正射影像數(shù)據(jù)存放位置,影像插入位置調整,插入影像文件到地形圖中等功能。

(1)打開地形圖文件:自動啟動AutoCAD軟件,并打開需要加載正射影像數(shù)據(jù)的DWG格式地形圖文件。前提條件是地形圖數(shù)據(jù)和正射影像數(shù)據(jù)的平面坐標系統(tǒng)應一致,本例中為2000國家大地坐標系。

(2)指定正射影像數(shù)據(jù)存放位置:填寫正射影像數(shù)據(jù)在計算機中的存儲路徑,作為AutoCAD加載正射影像的路徑參數(shù)。

(3)影像插入位置調整:根據(jù)影像首次插入時的位置偏差,進行平移微調,確保下次插入同一影像時定位誤差最小。

(4)插入影像文件到地形圖:用于在AutoCAD圖形界面獲取當前鼠標點擊位置的坐標信息,并與指定位置的正射影像數(shù)據(jù)進行后臺匹配,實時快速加載影像到圖形中疊加顯示。

3 關鍵方法實現(xiàn)

3.1 打開地形圖

獨立運行的程序需要通過創(chuàng)建對象的方法啟動當前計算機中已經(jīng)安裝的AutoCAD軟件,根據(jù)當初程序設計時引用的AutoCAD類型庫文件版本,決定將要啟動的AutoCAD軟件版本。隨著計算機軟硬件性能的提高,64位操作系統(tǒng)所占比重已經(jīng)越來越大,相應地AutoCAD軟件也有32位與64位兩種,需要根據(jù)操作系統(tǒng)的版本選擇安裝對應的AutoCAD軟件。經(jīng)測試,無論是32位還是64位,AutoCAD 2010軟件安裝到計算機以后,所創(chuàng)建的類型庫文件均為acax18enu.tlb和axdb18enu.tlb,它們一般位于c:program filescommon filesautodesk shared目錄中。要通過Microsoft Visual Studio.NET完全訪問AutoCAD Automation對象,需要創(chuàng)建acax18enu.tlb和axdb18enu.tlb的引用。

這些引用提供了以下主要交互操作部件:Autodesk.AutoCAD.Interop.dll和Autodesk.AutoCAD.Interop.Common.dll。Interop程序集位于全局程序集緩存中,它們會將Automation對象映射到.NET的對等對象。引用了類型庫之后,就可以在Microsoft Visual Studio .NET中聲明基于AutoCAD的變量,進而利用它們完成需要的功能和運算。

單擊打開地形圖按鈕,首先啟動AutoCAD軟件,并打開指定的地形圖dwg文件。打開文件的主要代碼如下:

Dim cadApp1 As Autodesk.AutoCAD.Interop.AcadApplication

Dim docCAD1 As Autodesk.AutoCAD.Interop.AcadDocument

Dim filePath As String

Dim fileOpen = False

Dim setFilePath = False

……

cadApp1 = New Autodesk.AutoCAD.Interop.AcadApplication

docCAD1 = cadApp1.Documents.Open(OpenFileDialog1.FileName)

3.2 指定正射影像數(shù)據(jù)文件存放位置

通過文件瀏覽對話框控件(FolderBrowserDialog)或粘貼輸入的方式指定正射影像數(shù)據(jù)文件的存放位置。需要首先添加此控件到MicroSoft Visual Studio 2008的窗體設計器,然后就可以在程序代碼中引用此控件進行處理,獲取指定路徑信息作為AutoCAD中插入正射影像的路徑參數(shù)。

3.3 影像插入位置調整

正射影像數(shù)據(jù)根據(jù)坐標信息文件加載到AutoCAD圖形中以后,可能與已有正確坐標的地形圖數(shù)據(jù)位置不是完全吻合,例如房角、道路等整體向同一方向偏移一個距離,導致定位存在偏差,不利于地物的判讀。此時就需要根據(jù)實際情況進行插入點的微調,通過指定東移和北移參數(shù)進行調整,將這兩個偏移分量數(shù)據(jù)分別加到正射影像插入定位點的相應坐標分量。在刪除先前插入的正射影像數(shù)據(jù)后,使用新的偏移參數(shù)重新執(zhí)行一次插入操作,就可確保插入位置正確。

為簡化使用,規(guī)定輸入正數(shù)代表東移和北移,輸入負數(shù)代表西移和南移。當然也可以根據(jù)實際測量結果只輸入其中一個分量數(shù)據(jù),默認值0表示不作任何移動。這樣的處理方法增加了程序使用的靈活性,可以手工提前糾正偏差太大的正射影像數(shù)據(jù),不至于某些批次的數(shù)據(jù)因定位精度問題而無法使用。

3.4 插入影像文件到地形圖中

(1)獲取插入點坐標

本文所使用的方法是通過AutoCAD軟件,在需要加載影像數(shù)據(jù)的地形圖任一位置點擊一下鼠標,獲取鼠標點擊位置的縱橫坐標信息,然后根據(jù)此坐標信息去查找影像數(shù)據(jù)的對應坐標數(shù)據(jù)文件,從而獲取符合條件的正射影像數(shù)據(jù)文件。獲取鼠標點擊位置的主要代碼為:

Dim returnPnt As Object

'CAD坐標,X為東,Y為北

Dim currX,currY As Double

Me.Hide()

returnPnt = docCAD1.Utility.GetPoint()

'獲取鼠標點選位置信息

currX = returnPnt(0)

currY = returnPnt(1)

(2)加載影像數(shù)據(jù)到地形圖中

如果點擊鼠標獲取的坐標位置落在某幅正射影像數(shù)據(jù)的左下角和右上角坐標所確定的矩形之間,則代表已經(jīng)找到合適的正射影像數(shù)據(jù)文件,將加載此正射影像到地形圖中。如果已經(jīng)遍歷了指定文件夾下面的所有坐標數(shù)據(jù)文件,并沒有找到一個符合要求的文件,則認為鼠標位置無對應的正射影像數(shù)據(jù),將給出“地形圖指定位置無匹配的正射影像文件”消息提示并退出查找,待用戶重新指定影像數(shù)據(jù)存放位置后再執(zhí)行插入操作。

影像數(shù)據(jù)加載完成以后,將存放在指定的影像數(shù)據(jù)圖層中,可以通過圖層開關控制是否顯示,方便瀏覽使用。加載影像數(shù)據(jù)的主要代碼為:

For Each foundFile As String In My.Computer.FileSystem.GetFiles(filePath,_

FileIO.SearchOption.SearchAllSubDirectories,"*.txt")

Dim fileReader As String

fileReader = My.Computer.FileSystem.ReadAllText(foundFile,_

System.Text.Encoding.Default)

'獲取原始影像的四角坐標和縮放比例

If fileReader <> "" Then

array0 = Split(fileReader,Chr(13))

array1 = Split(array0(0)," ")

Xzuoxia = CDbl(array1(3)) - 39000000.0 + CDbl(TextBox2.Text)

array2 = Split(array0(1)," ")

Yzuoxia = CDbl(array2(3)) + CDbl(TextBox3.Text)

array3 = Split(array0(2)," ")

Xyoushang = CDbl(array3(3)) - 39000000.0

array4 = Split(array0(3)," ")

Yyoushang = CDbl(array4(3))

array5 = Split(array0(4)," ")

suofangBiLi = CDbl(array5(2))

End If

'查找用戶鼠標點選的位置是否落在某幅影像圖的范圍內(nèi),找到后退出循環(huán)

If (Xzuoxia < currX And currX < Xyoushang) And (Yzuoxia < currY And currY < Yyoushang) Then

foundImage = True

insertRaster(0) = Xzuoxia

insertRaster(1) = Yzuoxia

insertRaster(2) = 0

rasterName = Microsoft.VisualBasic.Strings.Left(foundFile,foundFile.Length - 9) + ".tif"

'加載影像數(shù)據(jù)到當前地形圖中

currRaster = docCAD1.ModelSpace.AddRaster(rasterName,insertRaster,suofangBiLi,rotationAngle)

currRaster.Layer = "正射影像-2017"

Exit For

End If

Next

If foundImage = False Then

MsgBox("地形圖指定位置無匹配的正射影像文件!")

End If

4 程序使用效果

使用本程序加載正射影像數(shù)據(jù)到AutoCAD地形圖的效果如圖3所示,可見影像數(shù)據(jù)已經(jīng)以實際坐標正確地疊加到了對應的地形圖數(shù)據(jù)中。可以通過AutoCAD的疊放次序命令選擇將正射影像數(shù)據(jù)放到最底層,便于顯示和使用。

圖3 程序運行效果

5 結 語

使用本文介紹的方法,可以通過在AutoCAD軟件中指定當前地形圖的任意位置坐標,實時準確地插入相應位置所在圖幅的正射影像數(shù)據(jù)??梢酝ㄟ^重復執(zhí)行插入功能,連續(xù)插入多幅相鄰位置的正射影像數(shù)據(jù)并確保拼接正確,能夠迅速獲得大范圍的影像加載結果。對于經(jīng)常需要使用正射影像數(shù)據(jù)作為工作底圖的情況,提高了影像數(shù)據(jù)加載的速度和效率。通過實際工作中的具體應用,取得了較好的效果。

猜你喜歡
數(shù)據(jù)文件射影鼠標
Progress in Neural NLP: Modeling, Learning, and Reasoning
Engineering(2020年3期)2020-09-14 03:42:00
三參數(shù)射影平坦芬斯勒度量的構造
數(shù)據(jù)文件恢復專題問答
數(shù)據(jù)文件安全管控技術的研究與實現(xiàn)
SQL數(shù)據(jù)文件恢復工具
基于已有控制資料的正射影像自動更新
遙感信息(2015年3期)2015-12-13 07:26:50
基于改進射影控制的柔性直流輸電廣域阻尼控制
Tekla Structure數(shù)據(jù)文件交互格式分析
大比例尺真正射影像遮擋檢測和補償
45歲的鼠標
少年科學(2009年1期)2009-01-20 03:25:10
文山县| 府谷县| 平阳县| 长葛市| 乾安县| 永宁县| 嘉兴市| 尖扎县| 垣曲县| 桂东县| 神池县| 江山市| 会昌县| 个旧市| 闵行区| 浏阳市| 荣昌县| 乐山市| 德阳市| 曲水县| 宜良县| 枝江市| 梁山县| 青川县| 舞阳县| 昌平区| 赤水市| 封开县| 阳曲县| 白水县| 恩平市| 鄂伦春自治旗| 余姚市| 彭州市| 东丽区| 菏泽市| 青川县| 江川县| 雅江县| 青神县| 祁连县|