陳春瑩,鄒進貴
(武漢大學測繪學院,湖北 武漢430079)
目前我們正步入信息化的時代,信息的獲得和提取是作出科學決策的關鍵[1]。在信息獲得和提取過程中,獲取信息的速度取決于信息的綜合管理和信息的形象直觀的表達[2]。隨著測量方法和測量精度的提高,數據的獲取變得更加簡單,但是大量的數據造成了數據處理過程中的麻煩,而數據可視化可以將簡單的數字變成可以直觀分析的圖、表等,更有利于信息的存儲和管理。
在互聯網高速發(fā)展的時代,一個網頁可以做很多事情,使得信息共享和分析更加便捷。B/S的結構使得信息交互更加便捷,克服了軟件平臺的限制。研究高效、方便、實用的測量數據網絡處理系統(tǒng)成為一大熱點[3]。
本文主要是結合Google Map API和B/S的結構框架[4],研究基于Google Map的測量數據可視化,使得測量數據可以直觀地顯示在谷歌地圖上,方便后期數據處理;同時,可以隨時將控制點數據可視化表達,便于野外測量等。
Google Map API是利用JavaScript語言,使得用戶在網頁中嵌入Google地圖。它的具體功能是通過API提供的各種接口類實現的,主要包括Map類、LatLng類、Polygon類,以及各種事件響應函數。
(1)Map類
Map類是Google Maps API的核心內容,Map實例是所有Google Maps應用的重點對象,會貫穿整個應用項目的全部。此類的對象可以在頁面上定義一個單個的地圖。Map類的構造函數為:
Map(mapDiv:Node,opts?:mapOptions),用戶可以使用傳遞的任何(可選)參數,在指定的HTML容器(通常為DIV元素)中創(chuàng)建新的地圖。地圖的大小、類型、背景色、拖放的光標類型等基本信息均可以通過構造函數指定。Map類常用的方法有:set-Center、getCenter()、getZoom()、addControl、setMap等。
(2)LatLng類
構造函數為LatLng(lat:float,lng:float),是以緯度和經度表示的地理坐標點。LatLng的坐標不能修改。如果想要計算其他點的坐標,必須新建一個LatLng對象。主要方法有:lat()返回點的緯度值、lng()返回點的經度值。
(3)Polygon類
一系列有序坐標組成了Polygon對象。多邊形定義閉合區(qū)域。多邊形選項包括:多邊形邊緣“筆觸”的粗細程度、自定義的顏色和不透明程度,以及封閉區(qū)域“填充”的不透明程度和自定義的顏色,用十六進制數字HTML樣式表示自定義的顏色。
目前傳統(tǒng)的三維可視化建模方法有:基于攝影測量獲得遙感影像的三維建模方法[5]、基于激光雷達的三維建模方法、基于二維GIS的三維建模方法[6]、基于CAD的三維建模方法[7]等。本文采用一種新的可視化方法,可以隨時在瀏覽器上獲取數據的簡單的三維可視化模型。
(1)坐標轉換
用戶在谷歌地圖上得到的坐標是以經緯度表示的世界坐標。試驗發(fā)現,在較小范圍內,可以將其坐標系看成是平面直角坐標系。因此,可以利用坐標轉換的“四參數”轉換原理,將世界坐標系和測量坐標系進行轉換,坐標關系如圖1所示。坐標轉換公式為
圖1 坐標關系
(2)測量數據可視化
為了在平面的地圖上看出建筑物的簡單輪廓,本文建立了如圖2所示的點位坐標關系圖,各點之間坐標關系為
圖2 點位變換原理
求得P1~P4的坐標之后,根據用戶輸入的建筑物的層數信息,將4個點的緯度值同時增加,從而求得建筑物頂端四邊形的坐標,并建立相應的四邊形,得到建筑物的簡單三維模型。
在以上研究基礎上,在ASP.NET下新建網站[8],以c#和javascript作為開發(fā)語言、SQL Server作為數據庫平臺,生成網頁。在.aspx文件下編寫谷歌數據接口程序,對谷歌地圖進行二次開發(fā);在.aspx.cs文件里編寫對數據的處理程序。
用戶登錄后,可以通過文件上傳,將需要的信息文件上傳到服務器上面,并對上傳的文件添加備注等信息。上傳后的文件可以查看系統(tǒng)為其重新編號的新文件名,后續(xù)使用的文件將用其新文件名。
文件重命名的主要代碼是:
DataView results=(DataView)MaxFileID.Select(DataSourceSelectArguments.Empty);
int FileAddID=Convert.ToInt16(results[0][0]);∥獲取數據庫中最大文件ID fileupload.SaveAs(path+FileAddID+newext);
控制點可視化管理系統(tǒng)主要是將已有的控制點信息通過.xls文件導入并標記在谷歌地圖上。當把鼠標放置在標記點上時會顯示標記點的點號,當點擊標記點時,會顯示標記點的點名,并且在右側空白區(qū)域顯示標記點的經緯度坐標等詳細信息。結果如圖3所示。獲取標記點信息的主要代碼是:
var
nodes=xmldoc.getElementsByTagName("marker");
var msg_lat=nodes[i].getAttribute("緯度");
var DMsg="點名:"+msg_name+' '+"緯度:"+msg_lat+' '+"經度:"+msg_lng+' '+"高程:"+msg_h+' '+"詳細信息:"+msg_msg;
createMarker(point,DMsg,"#"+msg_num);
圖3 控制點信息可視化
建筑物的三維可視化系統(tǒng)主要是利用在谷歌地圖上刺取同名點,求得谷歌地圖經緯度坐標和測量坐標之間的轉換參數;也可以在參數文件框內輸入轉換參數文件,將待轉換的測量點標記在谷歌地圖上。
在地圖上用鼠標拖動框取標記點,并輸入層數信息,就可以對建筑物進行簡單三維建模,結果如圖4所示。用戶操作界面如圖5所示。轉換后的測量點坐標通過xml文件傳遞到前臺.aspx獲取,主要代碼是:
double y2=(1+m)*(sa*x1-ca*y1)+dx;
double x2=(1+m)*(ca*x1+sa*y1)+dy;
XmlElement xe1=xd.CreateElement("coordinate");
xe1.SetAttribute("lat",x2.ToString());
xe1.SetAttribute("lng",y2.ToString());
圖4 武漢大學建筑物的可視化模型
圖5 測量數據可視化操作界面
本文主要是研究如何將已有的測量數據在谷歌地圖上可視化,充分應用在測量前期路線規(guī)劃和后期測量成果展示中。本文主要工作是結合B/S模式,將谷歌地圖作為可視化表達的工具,根據谷歌地圖數據存儲形式,研究現有測量數據在谷歌地圖上表達的轉換模式,將建筑物在地圖上進行三維顯示。
與其他三維建模軟件相比,該系統(tǒng)的優(yōu)勢在于建模簡單,方便,不受限于環(huán)境;網絡化的系統(tǒng),只需要有最簡單的瀏覽器軟件,省略了軟件安裝的各種麻煩和限制。
[1] 何全軍.三維可視化技術在地理信息系統(tǒng)中的應用研[D].吉林:吉林大學地球探測與信息技術學院,2004.
[2] 馬麗麗.探測GIS中三維可視化的研究與設計[D].成都:成都理工大學,2007.
[3] 胡榮明,楊成斌,陳曉娣.測量數據處理的網絡化模式[J].測繪通報,2014(6):71-74.
[4] AKANBI A K.Integration of a City GIS Data with Google Map API and Google Earth API for a Web Based 3D[J].International Journal of Science and Research,2013,2(11):200-203.
[5] 賴玲莉,許妙忠,李明.基于攝影測量的高精度三維城市建筑物建模技術[J].測繪信息與工程.2007,32(5):24-27.
[6] RANZIGNER M,GLEIXNER G.GIS Database for 3D Urban Planning[J].Compute.,Environ.and Urban Systems,1997,21(2):159-173.
[7] 陳誼,孫悅紅,牛兵.基于CAD數據的3D場景建模及演示技術研究[J].系統(tǒng)仿真學報,2007,19(7):1504-1506.
[8] 李千目.ASP.NET程序設計與應用開發(fā)[M].北京:清華大學出版社,2009:3-4.