蔡欣恩,唐詩華,王 睿
(1.桂林理工大學 測繪地理信息學院,廣西 桂林 541004)
城市控制測量成果,是確定地球表面點幾何位置的標志,為測量及有關(guān)部門提供基礎(chǔ)測繪信息[1]。管理測量成果的傳統(tǒng)方法最常見的是文本的點之記,容易出現(xiàn)凌亂、分散不集中,無法做到信息共享。本文以Google地圖作為系統(tǒng)平臺,使用JavaScript語言,開發(fā)基于Google地圖的測量控制點成果管理系統(tǒng)。利用本文開發(fā)的系統(tǒng),能夠?qū)崿F(xiàn)數(shù)據(jù)統(tǒng)一格式管理、查詢等功能,還可以直觀地查看控制點的實際地理位置,最大限度地實現(xiàn)信息資源共享。
系統(tǒng)的目標是以Google地圖為平臺,實現(xiàn)對控制點成果的可視化管理,即實現(xiàn)控制點成果的圖文一體化管理。因在線地圖具有網(wǎng)絡交互性,在設(shè)計過程中要盡量做到操作簡便、互動性強、美觀大方。測量控制點成果管理系統(tǒng)的主要功能如下:
1)地圖顯示功能。以Google地圖作為測量控制點成果管理系統(tǒng)的平臺,因此Google地圖界面是系統(tǒng)必不可少的一個部分,也是系統(tǒng)主界面中的重點。Google地圖自身有著2種地圖類型,既可以直觀地了解所查看地區(qū)的地形,又可以讓使用者輕松獲取周邊的其他地物信息。
2)地圖瀏覽操作功能。地圖瀏覽功能,是實現(xiàn)對地圖的平移、縮放、切換不同類型的地圖及查看比例尺等。能根據(jù)實際情況,通過鼠標操作地圖界面,讓使用者更加方便和自由地查看所需信息。
3)分類圖層顯示功能。分類圖層功能,實現(xiàn)不同屬性地標數(shù)據(jù)的分類查看功能。本系統(tǒng)提供了5類圖層:控制點、三角點、各級導線點、圖根點、各級水準點,方便使用者根據(jù)不同需要分類查詢。
4)建立完善的測量控制點數(shù)據(jù)庫。完善的測量控制點成果數(shù)據(jù)庫包含:控制點的點之記、基線和水準網(wǎng)的數(shù)據(jù)等。完善的成果系統(tǒng)需要保持系統(tǒng)的現(xiàn)勢性和完整性,因此,在對成果數(shù)據(jù)進行更新和維護時還應進行相應的功能補充。
5)查詢功能。在一個擁有大量信息數(shù)據(jù)的系統(tǒng)中,方便快捷的查詢功能是系統(tǒng)必不可少的。利用XML節(jié)點的特點,根據(jù)搜索條件,便可讀取所需查找的成果數(shù)據(jù)以及成果數(shù)據(jù)的相關(guān)信息。
6)權(quán)限管理。在系統(tǒng)的功能設(shè)計中有必要通過密碼驗證的方法,對系統(tǒng)訪問者進行限制,以維護系統(tǒng)中測量控制點成果的安全性。
1)Web 地圖服務API:Google Maps API。本系統(tǒng)需要使用者利用瀏覽器進行瀏覽操作,而Google Maps對于開發(fā)環(huán)境的要求不高,只需要一個支持Google Maps API的瀏覽器即可。幾乎所有的主流瀏覽器均支持Google Maps API。
2)開發(fā)語言:JavaScript。JavaScript是一種適應動態(tài)網(wǎng)頁制作的編程語言,可以開發(fā)交互式的Web網(wǎng)頁,使頁面和使用者形成一種實時性、交互性、動態(tài)性的關(guān)系。JavaScript語言短小精悍,而且具有完善且強大的時間處理機制。
在控制點成果管理系統(tǒng)的設(shè)計和實際開發(fā)中,地圖就是直觀的背景和數(shù)據(jù)顯示平臺。直觀簡潔的地圖界面,是系統(tǒng)必不可少的。
在Google maps API中,Gmap2對象用于實現(xiàn)創(chuàng)建和控制地圖的基本功能[4]。除了一張地圖以外,還需要在控制地圖時,添加一些地圖控件,以方便地圖的瀏覽、移動、縮放。
地圖加載部分代碼如下[4]:
var map;
var CenterLat=21.6858;
var CenterLog=108.3722;
var SZoom=10;
//地圖初始化
function initialize() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map_canvas"));
map.addControl(new GLargeMapControl;//添加導航控件
map.addControl(new GMapTypeControl()); //添加地圖類型控件
map.addControl(new GScaleControl()); //添加比例尺
map.enable ScrollWheelZoom(); //鼠標滑動,地圖縮放
map.enableContinuous();
var mapOptions = new GLatLng(CenterLat, CenterLog);
map.setCenter(mapOptions,SZoom);//設(shè)置地圖中心,中心為 CenterLat,CenterLog
}
}
Window.load=initialize;
Window.onunlaod=GUload;
控制點成果系統(tǒng)設(shè)計的信息種類很多,需要對這些成果進行文字說明。因此,結(jié)合Google Map的功能,使用GMarker地標來標記控制點成果在地圖上的地理位置。GMarker地標的使用方法:
//創(chuàng)建GMarker對象
var marker0 = new GMarker(myLatlng{
title:GPS17(GPS控制點)
});
//myLatlng為該點的經(jīng)緯度
//在地圖上為marker0添加涂層,顯示marker0
map.addOverlay(marker0);
以上方法僅僅在地圖上顯示控制點成果的位置,不具有實用性。為了讓使用者更加直觀和詳細地了解控制點成果的相關(guān)信息,可在控制點地標的位置加入信息窗口,即GInfoWindow信息窗口。除了文字說明,還可添加控制點四周環(huán)境的圖片[5]。除此以外,在信息窗口中添加傳統(tǒng)點之記,如圖1所示。模仿傳統(tǒng)的電子點之記,實現(xiàn)在GInfoWindow信息窗口中顯示控制點的“坐標信息”、“地理位置”、“圖片”等具體信息。
圖1 利用GInfoWindow設(shè)計的控制點信息窗口
由于整個共享平臺的數(shù)據(jù)量相當龐大,因此,逐個添加控制點的地標就顯得十分麻煩。利用Google Maps API的GMarkerManager 地標管理器便可解決處理龐大的數(shù)據(jù)地標信息問題。GMarkerManager 地標管理器以及其特性加載XML文件的大量控制點數(shù)據(jù)即可完成控制點地標信息的添加。
加載XML文件之前,首先創(chuàng)建一個GMarkerManagere對象,完成地標管理器的創(chuàng)建后就可以將GMarker地標添加到GMarkerManager對象中。最后一步,就是實現(xiàn)正在地圖上顯示GMarkerManager對象中的GMarker地標。完成了上述步驟后,就可以使用Ajax技術(shù)獲取數(shù)據(jù)XML文件。加載XML文件首先需要獲取所有的地標信息的節(jié)點,方法為:NODE.getElementsByTagName()。然后根據(jù)取得的數(shù)據(jù)創(chuàng)建Gmarker對象,并將獲取的數(shù)據(jù)存放入全局變量中[4,6]。
加載XML的代碼[4,7]:
var xmlDoc=GXml.parse(doc);
var markers=XmlDoc.documentElement.getElementsByTagName();
XML文件格式:
-
在本系統(tǒng)中,已經(jīng)將控制點成果分類,根據(jù)控制點成果的不同屬性和類別(如控制點、三角點、各級導線點、圖根點、各級水準點)設(shè)置控制點成果的分類查詢功能。下拉列表中的每個選項都連接著不同的XML文件,選擇不同的選項,便可加載相應的XML文件實現(xiàn)查詢。
通過密碼驗證進入系統(tǒng),對系統(tǒng)訪問者進行限制,以維護系統(tǒng)中測量控制點成果的安全性。使用JavaScript語言編寫頁面登錄代碼,實現(xiàn)通過“用戶名”和“密碼”驗證登錄系統(tǒng)頁面。
國內(nèi)所有的電子地圖都是用一種經(jīng)過加密的坐標系統(tǒng)——火星坐標系統(tǒng)。該坐標系基準與常用的坐標基準有明顯的偏差。也就是說,常見的北京1954坐標系、西安1980坐標系、2000國家大地坐標系、地方獨立坐標系在Google地圖上顯示會出現(xiàn)一定的偏差。圖2為糾正偏差與實際地理位置的示意圖。
圖2 Google地圖中坐標的偏差
圖2 中,帶勾號的地標表示控制點實際位置,帶叉號的地標表示北京1954坐標系下相對應的控制點直接導入Google地圖后顯示的位置。圖中顯示Google地圖所使用的坐標系與北京1954坐標系存在明顯偏差。因此,直接使用北京1954坐標系的坐標數(shù)據(jù)無法在Google地圖中標注控制點的真實地理位置。
本文采用以下方法對坐標進行糾正。
Google地圖所使用的是Web墨卡托投影的方式,其特點是:兩極變化加大,中低緯度變形較小,“等角”的特征能夠保證方向和相互位置的正確性[8]。筆者選擇平面四參數(shù)法進行坐標的糾正。思路具體如下:利用已有的北京1954坐標系數(shù)據(jù),選擇地理位置較為明顯,易在Google地圖上識別的點作為糾正的控制點(x,y);在Google地圖中獲取對應以上糾正控制點的經(jīng)緯度(B,L)G;將大地坐標轉(zhuǎn)化為高斯直角坐標(X,Y)G;利用上述數(shù)據(jù)計算四參數(shù)。
平面直角坐標四參數(shù)轉(zhuǎn)換模型的4個參數(shù)為:兩個坐標平移參數(shù)?x、?y,一個旋轉(zhuǎn)參數(shù)ε,一個尺度參數(shù)k,轉(zhuǎn)換公式為:
以4個參數(shù)作為平差參數(shù),誤差方程如下:
式中,
其中?x0、?y0、k0、ε0為轉(zhuǎn)換參數(shù)的近似值。
按最小二乘原理,用間接平差計算出4個轉(zhuǎn)換參數(shù)。然后將需轉(zhuǎn)換的點代入平面四參數(shù)轉(zhuǎn)換公式中,得出在Google地圖上顯示的高斯直角坐標數(shù)據(jù)。因為Google地圖只能識別大地坐標,最后還需將得出的坐標數(shù)據(jù)轉(zhuǎn)為大地坐標數(shù)據(jù)。
實例數(shù)據(jù)來源于某城市的控制測量點。Google地圖是未知的火星坐標系統(tǒng)基準。該城市使用的是北京1954坐標系統(tǒng),在該城市范圍內(nèi)選取分布均勻且地理位置易于識別的5個點,并且在Google地圖上獲取相同5個點的坐標數(shù)據(jù)。
將數(shù)據(jù)代入上述公式中,得出的4個轉(zhuǎn)換參數(shù)分別為:?x=-334.045131;?y=1965.240290;ε=- 278.75676386";k=0.998177996525。
在數(shù)據(jù)中隨意選取30個點,代入平面四參數(shù)轉(zhuǎn)換公式中,并將數(shù)據(jù)導入Google地圖中。圖3中綠色地標為北京1954坐標系統(tǒng)的控制點,紅色地標為經(jīng)過平面四參數(shù)轉(zhuǎn)換后相應的坐標位置,改正后的坐標位置符合實際點所在地理位置。任意選取的30個點經(jīng)過改正后,能附合到實際位置上。
圖3 控制點轉(zhuǎn)化前后比較圖
[1]謝雪梅,郭承,趙彬彬.基于GIS的控制點測量成果管理系統(tǒng)的設(shè)計與實現(xiàn)[J].信息技術(shù)與信息化,2007(3):93-95
[2]楊澤運,王輝.基于GIS的測量控制網(wǎng)成果管理系統(tǒng)的建立[J].測繪通報,2006(6):51-54
[3]朱琳,高飛,張遷.測量標志管理信息系統(tǒng)的設(shè)計與實現(xiàn)[J].測繪科學,2013(7):157-159
[4]江寬,龔小鵬.開發(fā)詳解:Google Maps與Google Earth雙劍合璧[M].北京: 電子工業(yè)出版社,2008
[5]紀彥忠,陳祥蔥,姜波.基于GIS的測量標志管理系統(tǒng)設(shè)計與實現(xiàn)[J].測繪與空間地理信息,2013,36(6): 75-77
[6]吳肖,彭璇,朱明磊.基于Google Map API的校園電子地圖開發(fā)[J].測繪工程,2010,19(3):35-38
[7]趙好好.XML在大地測量數(shù)據(jù)共享環(huán)境中的應用研究[D].武漢:武漢大學,2005
[8]劉馳.基于Google maps交通信息服務平臺研究與設(shè)計[D].廣州:華南理工大學,2010