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