<wbr id="ede8e"></wbr><bdo id="ede8e"><var id="ede8e"><optgroup id="ede8e"></optgroup></var></bdo>
    1. <sub id="ede8e"></sub>
    2. <sub id="ede8e"></sub>
    3. 18禁无遮挡啪啪无码网站,真人无码作爱免费视频,2018年亚洲欧美在线v,国产成人午夜一区二区三区 ,亚洲精品毛片一区二区,国产在线亚州精品内射,精品无码国产污污污免费,国内少妇人妻偷人精品
      首頁 > 文章中心 > 正文

      谷歌地圖在鐵路選線中的技術研究

      前言:本站為你精心整理了谷歌地圖在鐵路選線中的技術研究范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

      谷歌地圖在鐵路選線中的技術研究

      1引言

      GoogleEarth(以下簡稱GE)是一款由Google公司開發的三維可視化地球軟件,它把衛星影像、航空照片、三維地面模型等GIS信息布置在一個地球的三維模型上[1]。GE提供了豐富、免費的全球不同分辨率的遙感影像數據;GE使用單圓柱投影,并使用WGS84基準面作為其平面基準,GE所采用的坐標系統是WGS-84坐標系;GE采用開放的數據標準和規范,并提供二次開發的API接口。GE所具備的這三個特點說明GE同傳統地圖一樣具備表達和傳遞地形、地物信息的功能;建立在嚴密的數學模型下;擁有二次開發的接口。GE具有這三個特點使它能夠作為鐵路選線設計的一個平臺,滿足鐵路選線設計一定階段內設計需求,并且具有實時三維顯示的巨大優勢,這是傳統基于CAD選線設計平臺所不能比及的[2]。結合傳統的基于CAD平臺鐵路選線設計過程和特點,基于GE平臺進行鐵路選線設計的過程主要分為平面設計和縱斷面設計[3]。區別在于在如何實現在GE平臺中實現選取交點,獲取點位信息;完成平面設計工作,如何提取地面線,進行下一步的縱斷面設計,所有的設計元素都要以一定的形式展示出來,在GE中通過KML文件的格式將各種元素顯示,因此本文重點對基于GE平臺進行鐵路選線設計中,實現平面設計功能、提取地面線進行研究,KML技術進行研究。本文所論述的平臺系統是的開發是采用C#語言,采用的開發平臺是Micro-softVisualStudio2005,在開發過程中將GE客戶端放入到系統自定義的窗體中。

      2平面設計

      要實現在GoogleEarth上進行選線設計,通過鼠標點擊實現在GoogleEarth上進行選點,但是由于GoogleEarth軟件在開發過程對其操作的各種鼠標事件都進行了定義,我們無法完成自己的功能,這里就要利用WindowsAPIHOOK技術,獲取操作系統發送給GoogleEarth地圖窗口的某些消息(如在地圖窗口單擊,縮放滾輪等消息)。GoogleEarthCOMAPI類庫中提供了成員函數用來將客戶端坐標系中點的屏幕坐標轉換為改點的地理坐標(經緯度的形式),利用該函數,最終實現對平面選取的交點地理位置信息的獲取。

      2.1WindowsAPIHook技術微軟的Windows操作系統是建立在事件驅動的機制上的,鉤子(Hook),是Windows消息處理機制的一個平臺,應用程序可以在上面設置子程序以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達后,在目標窗口處理函數之前處理它,鉤子機制允許應用程序截獲處理window消息或特定事件[4]。鉤子實際上是一個處理消息的程序段,通過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先得到控制權。這時鉤子函數即可以加工處理(改變)該消息,也可以不作處理而繼續傳遞該消息,還可以強制結束消息的傳遞。HookAPI是指Windows開放給程序員的編程接口,使得在用戶級別下可以對操作系統進行控制。在本系統的開發中,通過鉤子鉤住了GoogleEarth軟件定義下的鼠標單擊MouseDown事件。在程序中實現的如下:mouseHook.MouseDown+=newMouseEventH-andler(mouseHook_MouseDown);通過Hook技術實現了獲取鼠標點擊目標點時,目標點所在位置的屏幕坐標,這是實現GE平臺平面選線最關鍵的技術之一。

      2.2四種坐標系概述利用Hook技術,獲取到了目標點的屏幕坐標,我們最終目標是獲取目標點的在GE下的地理坐標。在整個系統的開發中,涉及到四種坐標系統:屏幕坐標系、工作區坐標系、GoogleEarth客戶端坐標系,WGS84坐標系。屏幕坐標系是Windows窗體應用程序用屏幕坐標指定窗口在屏幕上的位置。對于屏幕坐標而言,原點是屏幕的左上角。窗口的完整位置通常用Rectangle結構來描述,該結構包含定義窗口的左上角和右下角的兩個點的屏幕坐標[1]。屏幕坐標系如圖1所示。Windows窗體應用程序使用工作區坐標指定窗體或控件中的點的位置。在C#中即Form窗體的坐標系,即系統的界面窗體,工作區坐標的原點是控件或窗體的工作區的左上角,它同Windows窗體坐標系是一致的。工作區坐標確保了無論窗體或控件在屏幕上的位置如何,應用程序在窗體或控件中繪制期間都可以使用一致的坐標值。GoogleEarth客戶端坐標系[5],是GE在當前視圖下,自定義的一種坐標系統,GoogleEarth客戶端坐標系如圖2所示。

      2.3屏幕坐標向工作區坐標的轉換在C#語言中,通過使用Control類中的Point-ToClient和PointToScreen方法就可以實現兩種坐標系下的坐標轉換,要用到的是PointToClient將指定屏幕點的位置計算成工作區坐標,該函數語法為:publicPointPointToClient(Pointp)參數p表示要轉換的屏幕坐標Point,該函數返回一個Point,它表示轉換后的Poin(t以工作區坐標表示)[6]。

      2.4工作區坐標向GoogleEarth客戶端坐標的轉換通過對兩種坐標系的分析,總結出兩種坐標系三點區別。(1)坐標系原點不同。前者在整個坐標系左上角,后者居整個坐標系中心。(2)Y方向相反,坐標值有差異。前者坐標都為正值,后者坐標有正有負。(3)單位不同,前者是以整個工作區大小(寬度和高度),后者的范圍在正1至負1中間。基于以上三點,對兩種坐標系下的坐標做出轉換,首先利用C#提供的函數,獲取當前工作區的寬度和高度,然后找出兩種坐標系的數學關系,具體如下。width=this.FindForm().Width;hight=this.FindForm().Height;x=(X-width/2)/width*2;y=(Y-hight/2)/hight*2;width:當前工作的寬度;hight當前工作區高度;x、y:GoogleEarth客戶端坐標;X、Y:工作區的坐標。2.5GoogleEarth客戶端坐標向WGS84坐標的轉換GECOMAPI的類庫中提供了成員函數[7]:Ge-tPointOnTerrainFromScreenCoords(),該成員函數用來將客戶端視圖中的點的屏幕坐標轉換為經緯度的形式。該函數語法為:IPointOnTerrainGEGetPointOnTerrainFromS-creenCoords(doublescreen_x,doublescreen_y)該函數接受兩個Double類型的參數,表示視圖中心點在GoogleEarth客戶端坐標系中的坐標值,這兩個參數值均在-1和1之間,該函數的返回值為IPointOnTerrainGE型。至此,獲取到了目標點地理坐標,解決了在GE平臺中平面設計最關鍵的問題。

      3地面線的提取

      平面設計工作完成之后,就要進行縱斷面設計工作,而首先是獲取線位的地面線。GoogleEarthCOMAPI的類庫中提供了成員函數SetCameraPa-rams(),該成員函數實現將視圖中心移動到用戶指定位置。該函數語法為:voidSetCameraParams(doublelat,doublelon,doublealt,EARTHLib.AltitudeModeGEaltMode,doubleRange,doubleTilt,doubleAzimuth,doublespeed)。該函數接受八個輸入參數,除了altMode,其余均為double型。函數返回值為void,其中lat、lon和alt表示視圖中心的經緯度和高程;range表示視高;speed表示從當前視圖移動到設定點的速度;tilt表示用戶視線和垂直地平線方向的夾角。Azimuth即測繪學在中的方位角,表示用戶視線和正北方向的夾角,altMode表示高程的形式,為AltitudeM-odeGE型,該類型是一個枚舉變量,包括Absol-uteAltitudeGE和RelativeToGroundAltitudeGE兩個取值,當用戶在當前視圖設置地標時,RelativeTo-GroundAltitudeGE取值等于地標的高程值是相對于該位置地面的高度差異,即相對高程,Absol-uteAltitudeGE代表的高程值是相對于海平面得高度差異,即絕對高程。在平面設計完成之后,可以得到線路上任意一里程的坐標值,要想獲取該里程的地面高程,需要把該里程的坐標值作為參數,傳遞給GoogleEarth的API函數SetCameraParam(s),實現將客戶端的視圖中心移動到該里程點的位置,此時該點在GoogleEarth客戶端坐標系下的坐標是(0,0),即坐標系的原點,然后就可以調用GoogleEarth的API函數GetPointOnTerrainFromScreenCoord(s),來獲取該點的地面高程,這樣就完成了線位上任一點地面高程的獲取,進而獲取整個線位的地面線。需要注意的一點是,獲取地面線的過程,要保證GoogleEarth客戶端處于打開狀態,在讀取地面線的過程中,不要進行其他操作,以免影響客戶端的移動,為了保證獲取地面線的精度,利用SetCa-meraParams()函數時,在設定speed的值時,不要取的太大,一般取為2,在進行程序設計中,讀取點是做一個循環,最好在每一個操作之間設置一個時間間隔,以保證讀取的精度,實現方法是讓主進程休眠一定得時間。

      4KML技術

      KML是一種基于XML語法的標記語言和數據擴展格式,通過生成KML文件,就能夠將點、線、多邊形、圖片等顯示在GE中,所以在系統開發中,要實現對KMl文件的編程控制[8]。C#中類FileStream,這個類提供了在文件中讀寫字節的方法,要創建FileStream對象。該類的構造函數具有許多不同的重載版本,在我們程序中要采用的是:FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.Read)因為在程序設計中,當創建完KML文件后,就要打開,這就要用到FileShare.Read,這種模式代表允許隨后打開文件讀取,其他的重載版本是無法實現這一功能的。KMl文件是類XmlTextWriter的對象,創建的對象包含XML數據(這些數據符合W3C可擴展標記語言(XML)1.0和“XML中的命名空間”建議)的流或文件[9]。該類的定義為:XmlTextWriter(stringfilename,Encodingenco-ding)第一個參數就是要寫入的文件名,第二個參數,表示要生成的編碼方式。GoogleEarth定義的KML文件是UTF-8的形式,所以在程序設計中,創建該類的對象是,這里取的是UTF-8。對KML文件的打開是通過GoogleEarthCOMAPI提供的函數OpenKmlFile來實現的,該函數的定義為:voidOpenKmlFile(stringfileName,intsuppres-sMessages)該函數接受兩個輸入參數,參數一“fileName”,是一個字符的類型,表示需要打開的文件名和包含文件路徑的,例如:@“E:\大論文\Line5.kml”。第二個參數取值為“0”或者“1”,表示當用戶要開的文件和GoogleEarth中已經存在的文件如果有沖突,是否處理這種異常情況,一般取為“1”[10]。

      5結論

      本文分析研究了基于GE平臺進行鐵路選線設計中遇到的關鍵問題,并提出了詳細的解決方法。基于GE平臺進行鐵路選線設計的系統研究,涉及大地測量學、圖形圖像處理、數據庫應用、軟件工程、鐵路選線設計等多個學科的知識體系,限于研究者知識水平所限,對平臺系統的研究才算剛剛起步。但隨著對GE的深入研究,GE在鐵路選線設計中將會發揮巨大的作用。

      主站蜘蛛池模板: 中文字幕日韩人妻一区| 西西人体44WWW高清大胆| 亚洲国产精品一区二区第一页| 国产午夜成人久久无码一区二区| 亚洲综合久久一区二区三区| 最近中文字幕完整版hd| 亚洲熟妇色xxxxx亚洲| 67194熟妇在线直接进入| 日韩中文字幕高清有码| 午夜通通国产精品福利| 日韩有码av中文字幕| 青草成人精品视频在线看| 国产精品福利一区二区三区| 午夜福利免费视频一区二区| 国内熟女中文字幕第一页| 九九热久久只有精品2| 色欧美片视频在线观看| 日本免费观看mv免费版视频网站| 韩国午夜理伦三级| 中文日产幕无线码一区中文| 在线看免费无码的av天堂| 天堂а√在线中文在线| 国内精品久久久久影院蜜芽| A毛片毛片看免费| 九九在线精品国产| 国产性色的免费视频网站| 亚洲国产精品午夜福利| 国产精品中文字幕综合| 国产欧美日韩精品丝袜高跟鞋| 亚洲人成网网址在线看| 亚洲欧美国产日韩天堂区| 亚洲中文一区二区av| 福利视频在线一区二区| 国产精品理论片在线观看| 国产精品不卡一区二区在线| 人妻少妇偷人无码视频| 午夜激情小视频一区二区| 美女把尿囗扒开让男人添| 综合色一色综合久久网| 亚洲欧洲精品一区二区| 午夜免费福利小电影|