張小波,石吉寶,張俊,楊益群,劉剛(成都市勘察測繪研究院,四川成都 610081)
移動GIS系統(tǒng)Android終端地方坐標(biāo)轉(zhuǎn)換模塊開發(fā)
張小波?,石吉寶,張俊,楊益群,劉剛
(成都市勘察測繪研究院,四川成都 610081)
摘 要:基于Android終端的行業(yè)移動GIS應(yīng)用越來越多,而GIS終端獲取的位置數(shù)據(jù)與地理底圖及專題數(shù)據(jù)坐標(biāo)系不匹配,常常困擾GIS開發(fā)人員。本文介紹了坐標(biāo)轉(zhuǎn)換的基本原理,并根據(jù)移動GIS的需要將轉(zhuǎn)換過程簡化,描述了坐標(biāo)轉(zhuǎn)換模塊開發(fā)的過程并列出了核心代碼。
關(guān)鍵詞:移動GIS;Android ;坐標(biāo)轉(zhuǎn)換
隨著移動互聯(lián)網(wǎng)的迅速發(fā)展以及Android智能移動終端設(shè)備的普及,移動GIS也迎來了新的發(fā)展機(jī)遇,并在各行業(yè)得到了廣泛的應(yīng)用,Esri、超圖等GIS軟件廠商均推出了適用于Android的開發(fā)包,用戶能夠基于此搭建自己的行業(yè)移動GIS應(yīng)用。
Android移動GIS終端通過GPS獲取的位置信息為WGS-84坐標(biāo)系下的大地坐標(biāo),而行業(yè)移動GIS系統(tǒng)采用的城市坐標(biāo)系為了滿足投影變形小于2.5 cm/ km的要求,多為任意帶投影的地方坐標(biāo)系,這就需要進(jìn)行坐標(biāo)轉(zhuǎn)換。
高精度的轉(zhuǎn)換,可以在線服務(wù)的形式提供,容易實(shí)現(xiàn)包括用戶管理、區(qū)域管理、精度分級控制、服務(wù)無縫升級等功能,但是移動端必須與服務(wù)器交互數(shù)據(jù),一旦無法連接網(wǎng)絡(luò)將無法使用,影響用戶體驗。在行業(yè)移動GIS應(yīng)用中,廣泛使用的基于Android操作系統(tǒng)的移動終端,單點(diǎn)定位的精度多在5 m~50 m,米級精度的轉(zhuǎn)換即可滿足要求,可以采用本地轉(zhuǎn)換的方式實(shí)現(xiàn):開發(fā)一個坐標(biāo)轉(zhuǎn)換模塊,集成低精度的轉(zhuǎn)換參數(shù),實(shí)現(xiàn)Android移動GIS終端WGS84坐標(biāo)到地方坐標(biāo)的轉(zhuǎn)換。
將WGS-84坐標(biāo)轉(zhuǎn)換為任意帶投影的地方坐標(biāo)系,通常有兩種轉(zhuǎn)換方式,第一種是先進(jìn)行WGS-84橢球到當(dāng)?shù)貦E球的基準(zhǔn)轉(zhuǎn)換,再利用投影帶參數(shù)進(jìn)行高斯投影正算,共涉及基準(zhǔn)轉(zhuǎn)換的3個平移參數(shù)、3個旋轉(zhuǎn)參數(shù)和1個尺度參數(shù)以及投影帶的中央子午線、縱橫軸加常數(shù)和比例因子,總計11個參數(shù);第二種是先進(jìn)行高斯投影正算,得到基于WGS-84橢球平面坐標(biāo),再進(jìn)行解析變換,轉(zhuǎn)換為地方坐標(biāo)系下的平面坐標(biāo),需要高斯投影正算的4個參數(shù)以及解析變換的2個平移參數(shù)、1個旋轉(zhuǎn)參數(shù)和1個尺度參數(shù),總計8個參數(shù)。
以上是高精度的嚴(yán)密轉(zhuǎn)換,涉及參數(shù)較多,轉(zhuǎn)換過程復(fù)雜,若選用合適的轉(zhuǎn)換參數(shù),轉(zhuǎn)換精度可達(dá)±10 cm。在移動GIS終端,可將上述過程簡化,通過擬合的方式求得滿足精度要求的中央子午線、縱橫軸加常數(shù)和比例因子4個近似投影帶參數(shù)后,直接進(jìn)行高斯正算,即可得到地方坐標(biāo)。
設(shè)L0為中央子午線,X0為縱軸加常數(shù),Y0為橫軸加常數(shù),S為比例因子,計算過程如下:
首先投影至橢球面,進(jìn)行高斯正算:
式中:t=tanB;l=L-L0;l(B)為赤道到投影點(diǎn)的子午線弧長。
再進(jìn)一步計算當(dāng)?shù)刈鴺?biāo):
dfx=S×x+X0
dfy=S×y+Y0
坐標(biāo)轉(zhuǎn)換的原理及過程,對于一般GIS開發(fā)人員而言較為抽象,因此將坐標(biāo)轉(zhuǎn)換模塊編譯為JAR包發(fā)布,GIS開發(fā)人員只需要導(dǎo)入此文件,即可調(diào)用坐標(biāo)轉(zhuǎn)換模塊。
Android應(yīng)用程序使用Java作為編程語言進(jìn)行編寫,需要先搭建開發(fā)環(huán)境,包括Java運(yùn)行環(huán)境,Eclipse開發(fā)工具,Android軟件開發(fā)工具包,Android開發(fā)工具等。需要注意的是,Android不是使用傳統(tǒng)的Java虛擬機(jī)執(zhí)行,而是用一個定制的稱為Dalvik的虛擬機(jī)執(zhí)行,因此已編譯的Java類和可執(zhí)行程序不能在不經(jīng)過修改的情況下就運(yùn)行在Android上,若已有基于Java的坐標(biāo)轉(zhuǎn)換模塊,也需要在Android開發(fā)環(huán)境下重新編譯。
建立一個Android應(yīng)用程序工程,勾選“Mark this project as a library”表明建立的為庫文件,新建一個名為cotr84的類,在其中實(shí)現(xiàn)坐標(biāo)轉(zhuǎn)換的功能,坐標(biāo)轉(zhuǎn)換的核心代碼如下:
計算子午線弧長:
private double l(){
double a,b,c,d,e,lb;
a= ((a84 + b84)?(1 + Math.pow(n84,2) /4 + Math.pow (n84,4) /64)) /2;
b=-3?n84/2+9?Math.pow(n84,3) /16-3?Math.pow (n84,5) /32;
c=15?Math.pow(n84,2) /16-15?Math.pow(n84,4) /32;
d=-35?Math.pow(n84,3) /48+105?Math.pow(n84,5) / 256;
e=315?Math.pow(n84,4) /512;
lb=a?(blb+b?Math.sin(blb?2)+c?Math.sin(blb?4)+ d?Math.sin(blb?6)+e?Math.sin(blb?8));
return lb;
}
高斯正算:
public void w84tcd(double inblb,double inbll){
blb=Math.toRadians(inblb);
bll=Math.toRadians(inbll);
N=a84/ Math.sqrt(1-e2?Math.pow(Math.sin(blb),2));
t=Math.tan(blb);
ll=bll-l0;
nn=e12?Math.pow(Math.cos(blb),2);
xyx=l()+t?N?Math.pow(Math.cos(blb),2)?Math.pow (ll,2) /2
+t?N?Math.pow(Math.cos(blb),4)?(5-Math.pow(t, 2)+9?nn+4?Math.pow(nn,2))?Math.pow(ll,4) /24
+t?N?Math.pow(Math.cos(blb),6)?(61-58?Math.pow(t,2)+Math.pow(t,4) +270?nn-330?nn?Math.pow(t, 2))?Math.pow(ll,6) /720
+t?N?Math.pow(Math.cos(blb),8)?(1385-3111?Math.pow(t,2) +543?Math.pow(t,4) -Math.pow(t,6))?Math.pow(ll,8) /40320;
xyy=N?Math.cos(blb)?ll
+N?Math.pow(Math.cos(blb),3)?(1-Math.pow(t,2)+ nn)?Math.pow(ll,3) /6
+N?Math.pow(Math.cos(blb),5)?(5-18?Math.pow(t, 2)+Math.pow(t,4)+14?nn-58?Math.pow(t,2)?nn)?Math.pow(ll,5) /120
+N?Math.pow(Math.cos(blb),7)?(61-479?Math.pow (t,2)+179?Math.pow(t,4)-Math.pow(t,6))?Math.pow(ll, 7) /5040;
}
計算當(dāng)?shù)刈鴺?biāo):
public long getXyx() {
return (long) (s?xyx+x0);
}
public long getXyy() {
return (long) (s?xyy+y0);
}
代碼編寫完成后,按圖1、圖2所示,將該類導(dǎo)出為JAR文件即可。
圖1 導(dǎo)出為JAR文件
圖2 選擇需要導(dǎo)出的類
在移動GIS開發(fā)項目中,開發(fā)人員不需要了解坐標(biāo)轉(zhuǎn)換的原理和參數(shù),直接引用JAR文件,即可方便地將WGS-84坐標(biāo)轉(zhuǎn)換為地方坐標(biāo)。
圖3 利用坐標(biāo)轉(zhuǎn)換模塊保證多源數(shù)據(jù)坐標(biāo)系一致
我院開發(fā)的成都市自來水移動巡檢系統(tǒng),是基于Android移動GIS終端的用于戶外管網(wǎng)設(shè)施巡查維護(hù)工作的應(yīng)用系統(tǒng),通過在移動GIS終端上使用GPS設(shè)備定位,數(shù)碼相機(jī)拍照,數(shù)據(jù)錄入,管網(wǎng)數(shù)據(jù)瀏覽查詢等手段,輔助巡查工作的進(jìn)行,使得巡查的數(shù)據(jù)得以標(biāo)準(zhǔn)化地錄入,為管線設(shè)備的管理和決策工作提供保障。
系統(tǒng)中作為底圖的基礎(chǔ)地理數(shù)據(jù)和管網(wǎng)專題數(shù)據(jù)都是以地圖服務(wù)的形式提供給各子系統(tǒng)使用的,其坐標(biāo)系為成都地方坐標(biāo)。移動巡檢系統(tǒng)智能終端利用坐標(biāo)轉(zhuǎn)換模塊將獲取到的WGS-84坐標(biāo)系下的坐標(biāo)轉(zhuǎn)換為成都地方坐標(biāo)系下的坐標(biāo)信息,可以將用戶的位置信息實(shí)時顯示在基礎(chǔ)地圖和管網(wǎng)專題圖上。
基于Android的移動GIS應(yīng)用越來越普遍,并從面向公眾用戶的弱GIS應(yīng)用擴(kuò)展到面向行業(yè)用戶的強(qiáng)GIS應(yīng)用,行業(yè)用戶的專題數(shù)據(jù)以及地理底圖多是基于當(dāng)?shù)爻鞘凶鴺?biāo)系,坐標(biāo)系如何匹配的問題往往困擾GIS開發(fā)人員,通過地方坐標(biāo)轉(zhuǎn)換模塊,開發(fā)人員無需坐標(biāo)轉(zhuǎn)換的專業(yè)知識,即可開發(fā)出基于地方坐標(biāo)系的應(yīng)用。
參考文獻(xiàn)
[1] 董鴻聞,李國智,陳士銀等.地理空間定位基準(zhǔn)及其應(yīng)用[M].北京:測繪出版社,2004.
[2] 李振杰,聶慶微.GPS-RTK坐標(biāo)與地方施工坐標(biāo)系兩種轉(zhuǎn)換模精度分析[J].測繪與空間地理信息,2013,36 (5):210~212.
[3] Reto Meier.Android 4高級編程(第3版)[M].佘建偉,趙凱(譯).北京:清華大學(xué)出版社.
Development of the Coordinate Transformation Module for Android Mobile GIS System
Zhang Xiaobo,Shi Jibao,Zhang Jun,Yang Yiqun,Liu Gang
(Chengdu Institute of Survey and Investigation,Chengdu 610081,China)
Abstract:The mobile GIS systems based on Android are very popular now ,it’s a problem that how to math the base map with thematic data.This article introduced the theory of coordinate transformation and simplified it for mobile GIS system,then described the development process and listed the main source code.
Key words:mobile GIS;Android;coordinate transformation
文章編號:1672-8262(2015)01-113-03中圖分類號:P226+.3,P209
文獻(xiàn)標(biāo)識碼:B
收稿日期:?2014—11—18
作者簡介:張小波(1980—),男,高級工程師,主要從事工程測量和GPS技術(shù)應(yīng)用、地理信息的研究與應(yīng)用。