洪 偉
(1.廣東省國土資源測繪院 衛(wèi)星定位技術應用中心,廣東 廣州 510500)
廣東省國土資源測繪院衛(wèi)星定位技術應用中心(以下簡稱GDCORS)在近幾年為省內各級測繪部門提供了大量的計算服務,充分發(fā)揮了GDCORS的數(shù)據(jù)資源和技術優(yōu)勢,達到了良好的社會和經(jīng)濟效益。為了適應日常的計算工作,GDCORS開發(fā)了基于CORS的GPS數(shù)據(jù)處理平臺,該平臺可以高度自動化地完成整個數(shù)據(jù)處理流程。本文對該平臺的設計思路和實現(xiàn)方法進行了介紹。
平臺的基線解算模塊是采用美國麻省理工學院和斯克里普斯海洋研究所開發(fā)的 GAMIT 軟件,當前版本是10.40。本文主要介紹基線解算部分的設計思路和解決辦法,平差軟件可以采用GAMIT附帶的GLOBK或者武漢大學Powernet等。
運行環(huán)境:由于GAMIT運行在Linux上,因此采用一臺安裝了Linux發(fā)行版本Ubuntu的服務器,并安裝了開源的Web服務器軟件Apache及數(shù)據(jù)庫軟件MySQL作為工作環(huán)境。
開發(fā)語言:GDCORS采用了Python語言和基于Python語言的Web框架Django來進行開發(fā)。Python是一種解釋型、面向對象的高級語言,語法簡潔而清晰,具有豐富和強大的類庫。Django為基于Python語言的一款開源Web框架,能夠快速搭建數(shù)據(jù)庫驅動的網(wǎng)站。平臺的邏輯結構如圖1所示。
圖1 基于CORS的GPS數(shù)據(jù)處理平臺架構圖
1)建立工作項目。建立結構清晰的目錄結構來存放各種文件,其中主要包括計算目錄、用戶數(shù)據(jù)目錄、CORS數(shù)據(jù)目錄、星歷目錄、GAMIT表文件目錄和成果目錄等。
2)項目設置。設計時將主要功能結構進行分解,通過設置參數(shù)來實現(xiàn)功能的完善。主要的設置項目有年份、解算模式(單站解或者網(wǎng)解)、采樣間隔、是否采用其他天線代替未知天線、是否選用GDCORS基準站作為約束以及選取方式等,同時填寫郵箱以接收計算結果。
3) 數(shù)據(jù)檢核。對用戶提交的RINEX數(shù)據(jù)進行檢核,包括點名點號、儀器高、年積日、采樣間隔等,數(shù)據(jù)質量的檢核采用數(shù)據(jù)轉換、編輯、檢核軟件TEQC的Linux版本。檢核結果寫入日志。
4)星歷下載以及GAMIT表文件更新。根據(jù)RINEX文件的年積日以及GPS周,自動下載對應日期的廣播星歷Brdc/Auto文件、精密星歷igs/igr/igu文件等并解壓縮,同時下載更新ut1./pole.等GAMIT表文件。
5)選取并下載CORS基準站數(shù)據(jù)。根據(jù)設置選取周邊GDCORS基準站數(shù)據(jù),選取方式有按照分布選取和按距離選取2種,默認選取距離最近的3個基準站。
6)生成GAMIT相關文件,如lfile.,station.info,sittbl.等。Station.info中的儀器高必須經(jīng)過核查。
7)執(zhí)行批處理命令。自動生成批處理,調用GAMIT進行解算,解算完成后將基線拷貝到項目對應目錄,同時打包一份發(fā)送到用戶的電子郵箱中。
8)基線檢核。對解算基線的主要精度指標進行檢驗,通過后再進行重復性檢驗,統(tǒng)計解算基線的精度。
GDCORS基于CORS的GPS數(shù)據(jù)處理平臺主要流程如圖2所示[1-4]。
圖2 基于CORS的GPS數(shù)據(jù)處理平臺流程圖
視圖是平臺開發(fā)的重點。通過將日常計算工作根據(jù)工程實際情況和需求進行分解,開發(fā)出具有低耦合度的視圖,既可以單獨調用也可以通過參數(shù)傳遞按設定順序執(zhí)行整個流程。下面具體介紹幾個重要視圖模塊的設計思路和實現(xiàn)方法。
在整個流程中會多次使用到時間日期換算、坐標轉換投影、排序算法等函數(shù)以及橢球參數(shù)等數(shù)據(jù),所以將這部分代碼提取出來,單獨封裝成一個視圖func.py,需要時可通過func.py進行調用;也可以在URLconf配置文件中進行配置,配置func.py中函數(shù)的對應URL,這樣就可以通過URL傳遞參數(shù)進行調用。例如,下面通過URL傳遞年份和年積日來獲取某一天的GPS周[5]:
from django.conf.urls.defaults import *
from mysite.views import func
urlpatterns = patterns('',
(r'^gpsweek/(d{2})/(d{1,3})/$', gpsweek),
)
視圖func.py中的GPS周計算函數(shù)如下:
def gpsweek(year,doy): # 計算 gps周
day = (year -1-1980) // 4 + 1 + (year-1980) * 365 + doy-6
week = day // 7
weekday = day % 7
gpsweek = str(week) + str(weekday)
return gpsweek
GDCORS中心服務器存有多種采樣頻率的CORS基準站RINEX格式數(shù)據(jù),要實現(xiàn)自動選取和下載數(shù)據(jù),需要先實現(xiàn)數(shù)據(jù)在Linux和Windows平臺之間的共享,可以通過Linux的mount.cifs模塊完成。假設存儲CORS數(shù)據(jù)的服務器內網(wǎng)地址是192.168.123.21,共享目錄名為rinexdata,賬號密碼分別是admin和123456,目標路徑是Linux平臺的/mnt/corsdata,可以使用超級用戶賬號執(zhí)行命令sudo mount –t cifs –o username=admin,password=123456 //192.168.123.21/rinexdata/mnt/corsdata,即可實現(xiàn)將共享目錄掛載到Linux平臺上[6]。
選取基準站的算法有2種,分別為根據(jù)距離選取和根據(jù)方位選取。根據(jù)距離選取基站的算法思想是將所有基站按距離由小到大排列,然后根據(jù)用戶的設置選擇最近的3~5個站數(shù)據(jù)。根據(jù)分布選取基站的算法則是首先從用戶數(shù)據(jù)中提取出概略坐標,統(tǒng)一投影到同一個中央子午線的高斯平面上,按照用戶觀測點與所有GDCORS基準站的方位角的大小排序,將0~360°分成3~5個區(qū)間,每個區(qū)間內的基站再按照距離由小到大排序,選擇最近的一個即可。無論哪種選取算法,在選擇之前都要對全部基站數(shù)據(jù)進行完整性和可用性檢驗。根據(jù)實際情況,在全省80多個基站全部穩(wěn)定運行的情況下,2種選擇方式差別不大。而如果采用按照分布選取基站的方式,在邊界時可能會出現(xiàn)選取的基站全部集中在一起的現(xiàn)象,因此按照距離選取可能更為實用。
通過RINEX文件的年積日信息,以及由年積日計算的GPS周來下載對應文件,包括廣播星歷brdc/auto文件、精密星歷igs/igr/igu文件等。Sp3文件按照igs/igr/igu的優(yōu)先次序進行下載。幾種星歷的發(fā)布需要1~13 d不等的延遲,在下載時首先根據(jù)當前日期和待計算數(shù)據(jù)觀測日期之間的日期差判斷適合采用何種星歷,觀測日期至少要比當前日期早1 d。
由于GAMIT的表文件大多數(shù)不需要經(jīng)常更新,除了一些每年需更新一次的文件如soltab.、nuntab.等和不定期更新的如leap.sec,每周需要更新的只有ut1.和pole.文件,因此可以在每次下載星歷時同時更新這2個文件,其他文件則在需要時手工更新。
通??梢栽趃arner.ucsd.edu上完成所有文件的下載,該網(wǎng)站支持HTTP和FTP 2種方式登錄。使用FTP可以匿名登錄,在/pub/products目錄下可找到需要的星歷文件,在/pub/gamit/tables目錄下可找到需要更新的GAMIT表文件。需要注意的是,該FTP服務器有時會存在無法鏈接或者導航文件缺失的情況,這時需要自動切換到其他服務器如cddis.gsfc.nasa.gov去下載,這樣才能保證平臺的穩(wěn)定性。
在實際應用中,用戶采用的儀器和天線種類繁多,一些廠家的天線因為沒有在NGS注冊故而沒有對應天線信息,而在轉換RINEX數(shù)據(jù)時用戶也往往不統(tǒng)一,并沒有歸算到一致的基準如天線參考點ARP,因此在生成station.info時必須注意這些問題。解決辦法有3種:①先設法獲取天線參數(shù),在GAMIT表文件rcvant.dat和antmod.dat文件中手工添加;②選取一種外形相似的天線來代替,將儀器高歸算到天線底,再在station.info里把天線類型改為一種已知天線類型;③不考慮相位中心變化,直接將sestbl.文件中的Antenna Model改為NONE[7]。生成lfile.文件則是從RINEX文件中提取出概略坐標,將空間直角坐標轉換成球坐標。sittbl.文件的生成則是根據(jù)所有時段已經(jīng)選擇的CORS基準站,從中選取使用頻率最高的點作為起算,避免出現(xiàn)相關性過強的情形。
執(zhí)行效率和穩(wěn)健性是考驗平臺實用性的重要指標,要協(xié)調好這兩者的關系,需要在開發(fā)時充分考慮到每個細節(jié),簡化過程并改進算法。
例如在批處理執(zhí)行時可以采用shell的并行方式縮短計算時間,但一些公共文件被頻繁調用可能會導致計算出錯。通常在同一天內如果有多個時段數(shù)據(jù),則2個相鄰時段之間至少會有一個相同的CORS基準站被選中起算點,在調用GAMIT計算時,Model模塊會在Linux系統(tǒng)的/tmp目錄下生成c-file然后移到相關工作目錄,而因為另一個并行進程也需要調用同名的c-file,則導致在執(zhí)行Autcln時找不到對應的c-file而報fatal錯誤并停止計算。在不修改GAMIT源代碼的情況下,可以將有這種情況發(fā)生的時段計算順序改為順序執(zhí)行,完成這些時段的計算后再將其他時段改為并行計算,充分顧及了效率和穩(wěn)健性的協(xié)調。
GAMIT計算是個頗為復雜的過程,即使進行嚴格的數(shù)據(jù)檢核和盡量減少中間環(huán)節(jié),仍然不能杜絕錯誤發(fā)生,因此要保證在實際遇到類似情形時,既不會因為錯誤異常而崩潰,也不能毫無反應任錯誤發(fā)生,解決辦法是將各環(huán)節(jié)報告和GAMIT警告錯誤信息生成日志并通過Web方式反饋給使用者,讓使用者可以有依據(jù)地進行調整處理。
基于Python語言的Web框架Django采用了“模型-視圖-控制器(MVC)”的開發(fā)模式,把代碼的定義和數(shù)據(jù)訪問的方法(模型)與請求邏輯 (控制器)還有用戶接口(視圖)分開來。這種設計模式的優(yōu)勢在于各種組件都是松散結合的,每個由 Django驅動 的Web應用都有著明確的目的,并且可獨立更改而不影響到其他部分[8]。本平臺采用CSS+DIV結構設計Web模板,前端交互使用了JQuery(可以使用成熟的JQuery框架,如JQuery UI)開發(fā),再通過URLconf配置視圖和模板,實現(xiàn)了直觀方便的交互。
基于CORS的GPS數(shù)據(jù)處理Web平臺降低了工作難度,減少了對個人經(jīng)驗的依賴,模塊的低耦合性使得針對復雜的實際情況可以通過設置靈活組合和調用,使平臺具有較好的實用性,提高了工作效率和規(guī)范化程度。該平臺在GDCORS近幾年的日常工作中,從省市級的高精度三維控制網(wǎng)建設到跨市域的像控測量,再到大比例尺數(shù)字化測圖控制點測量以及勘界測量等,經(jīng)受了實用性、可靠性和穩(wěn)健性的考驗,得到了不斷的改進和優(yōu)化,對于省市級CORS的日常數(shù)據(jù)處理工作具有較高的參考和推廣價值。
[1]鄂棟臣,詹必偉,姜衛(wèi)平,等.應用GAMIT/GLOBK軟件進行高精度GPS數(shù)據(jù)處理[J].極地研究,2005,17(3):173-182
[2]王志強,李軍.GAMIT使用指南[J].全球定位系統(tǒng),2002(2):36-39
[3]徐杰,孟黎,唐詩華.GAMIT/GLOBK批處理在高精度海量數(shù)據(jù)處理中的應用[J].測繪科學,2008,33(6):175-188
[4]李健,呂志平.基于CORS的衛(wèi)星定位在線服務系統(tǒng)[J].測繪通報,2007(8):40-44
[5]劉根友.GAMIT/GLOBK軟件使用的坐標系及其相互轉換[J].測繪工程,2003,12(3):21-23
[6]Richard Petersen.Linux完全參考手冊[M].北京:機械工業(yè)出版社,2009
[7]何德平,郭彩立,王艷茹.GAMIT基線解算中天線高處理方法的探討[J].重慶建筑,2012,11(7):46-48
[8]Jeff Forcier , Paul Bissex, 徐旭銘.Django Web開發(fā)指南[M].北京:機械工業(yè)出版社,2009