| GPS连续运行参考站网在线定位软件研制 |
基于卫星定位连续运行参考站(continuously operating reference stations, CORS)的在线定位服务系统,能够充分发挥CORS系统的作用和全球导航卫星系统(global navigation satellite system,GNSS)定位的优势。目前,世界上有许多国家和科研机构对在线定位服务进行研究,如美国国家大地测量局(National Geodetic Survey,NGS)的OPUS(on-line positioning user service)系统、美国永久阵列中心的SCOUT(Scripps coordinate update tool)系统和澳大利亚的AUSPOS(Australian online GPS processing system)[=1]等。近年来,中国大部分省份基本完成了省级CORS建设,大中型城市也基本完成CORS覆盖,这大大促进了国内对在线定位服务的研究。如武汉大学GNSS研究中心基于Internet和Bernese研发的GPS数据自动处理系统Auto-Bernese[2];李健等[3]提出了基于CORS的卫星在线定位服务系统软件架构;文献[1-4]对基于区域CORS的GNSS数据处理系统进行了设计,探讨了基于区域CORS的GNSS数据处理系统的可行性。
本文研究开发了基于CORS的mm级由服务器端和客户端两套软件组成的GPS定位解算服务平台。用户通过客户端上传静态GPS观测数据,用户数据与CORS基准站数据联合组网解算,数据组织由服务器自动完成,可省去已知点的观测工作,并为解算提供起算数据。服务器端同时响应多个用户的数据通讯与解算请求,用户无需接触到CORS基准站坐标等敏感数据。采用网络计算模式,用户自主进行高精度GPS网解算,并接收解算结果,较好地解决数据保密与使用需求相矛盾的问题。解算软件部署在服务器上,用户不必为购买、安装、升级和维护相关软件而费心[5]。服务器端在UNIX系统中采用GAMIT/GLOBK计算模块解决基线解算和网平差问题;并采用基于Socket多线程并发通信技术,降低系统结构复杂性,解决多用户等待时间过长问题[6],缩短返回结果所需的用户等待时间,提高整个服务平台的运行效率,强化测绘数据的网络管理力度,增强了数据系统的安全性。
1 Socket多线程技术与CORS-GPS网解算服务平台1) Socket多线程技术。Socket是用来描述IP地址和端口的一种通信机制。一个完整的Socket由协议、本地地址、本地端口和远程端口来描述。在客户端/服务器通信的模型中,通过套接字实现客户端和服务器端程序之间的网络连接和数据交换。一般套接字由系统分配,并且只有唯一的本地Socket号[7, 8]。
UNIX系统支持多种类型的套接字,主要有流式套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)等3种[6]。流式套接字提供面向连接的、无差错的网络信息包的传输;数据报套接字提供无连接的服务,以独立的数据报进行网络传输;原始套接字提供对网络下层通信协议(如IP协议)的直接访问,一般不提供给普通用户。在应用中根据实际需求来选择合适的套接字类型。
在Unix系统中,可以支持多线程、多进程和I/O多路复用等3种并发方式。其中,多线程技术需要的成本少、效率高,占用系统资源较少,是并发技术常用方式[7, 8]。Socket一般应用于重复性服务器,只有处理完上一个客户请求以后,才能处理下一个客户请求,运行效率较低[7]。采用基于Socket多线程并发通信技术,服务器可以同时完成多个客户发出的请求,比套接字实现的基本方法效率要高,能够进一步提高服务器的工作效率。
2) CORS-GPS网解算平台NetSolution服务器端是在UNIX操作系统下基于QT Creator2.5环境以及C++语言开发,服务器集成基线处理与网平差GAMIT/GLOBK10.6解算模块;客户端是在Windows操作系统下,基于C++语言开发。
NetSolution服务端实现用户数据上传管理、CORS基准站数据下载、各种解算控制文件生成、自动解算并将解算结果发送给用户。NetSolution服务端软件具有如下功能:①用户管理:新加用户、修改编辑用户信息、删除用户;②安全模块:解算结果均经加密发送,确保用户数据安全;③数据组织:自动组织用户数据、合法性校验;④基线解算:进行中长GPS基线解算;⑤GPS网平差:通过网平差,获得高精度的大地坐标。
服务器端软件主界面如图 1所示。
![]() |
| 图 1 服务器端软件主界面 Fig.1 Main Interface of Server Software |
管理员在服务器端输入服务器IP和端口号,点击“启动服务”按钮来启动服务器,在系统管理菜单“添加用户”或者工具栏中点击“A加用户”按钮,在弹出的窗口中来添加客户。如果想更改用户信息只要点击“编辑用户”按钮,在弹出的相应窗口中进行更改。还可以在短信服务窗口键入相应的信息,点击“发送”按钮发送信息给用户与用户通信。
NetSolution客户端完成以下功能:①通过用户名与密码连接到服务器;②发送各种数据文件到服务器;③发送基线解算与网平差解算请求;④通过接收命令自动获取服务器计算结果文件、对加密结果进行解密,并自动以文件形式保存到本机硬盘中。
用户在客户端软件界面如图 2所示。
![]() |
| 图 2 客户端软件主界面 Fig.2 Main Interface of Client Software |
首先,用户在客户端输入服务器IP和端口号,点击连接按钮与服务器连接;然后,登录服务器,登录只在菜单中操作,工具栏无快捷方式。
用户开始一个解算任务的步骤如下:
① 需要填写项目基本信息(项目代码、项目缩写号、观测日期和计算的年积日)发送给服务器端,服务器将在用户数据区自动建立用户数据目录;
② 上传RINEX格式GPS观测数据文件、星历文件等文件;
③ 在短信/命令栏键入解算命令StartSolutin发送给服务器端开始解算;
④ 输入接收解算结果命令GetResult来获得解算结果。
2 CORS-GPS网解算平台中多线程并发通信的实现1) CORS-GPS网解算平台中服务器与客户端协作流程如图 3所示。
![]() |
| 图 3 服务器与客户端协作流程图 Fig.3 Flow Chart of Server and Client Cooperation |
由图 3可知,要完成一个CORS-GPS网的解算,用户需在客户端进行连接服务器、登录、发送数据和获取解算结果等4个步骤。复杂的解算过程由服务器端自动完成。服务端后台响应用户的请求均以多线程方式自动进行,无需管理员的人工操作配合。用户请求通常有以下3类:①向服务器发送观测数据及精密星历等解算附属文件,服务器自动将数据保存到用户目录;②收到用户解算请求时,服务器自动搜索与用户测点周边最近3个CORS基准站观测数据,由ftp方式从数据服务器下载基准站观测文件到解算服务器,与用户观测数据联合组网,并对联合数据进行基线解算、网平差,结果保存到用户目录下;③向服务器请求发送解算结果,服务器收到此请求命令后,若解算完毕结果可用,则将解算结果文件发送给到客户端。
在进行坐标解算时,尽量选取均匀分布在测站周围的CORS基准站[9],将坐标值的解统一到坐标框架,如ITRF2014框架。加入基准站的坐标差值在mm级,坐标向量之间的差值随着基准站数量的增加而减小,当基准站点个数达到一定个数时,其坐标差值趋于稳定。计算时间随着基准站数量的增多而增加,造成网形的强约束,这会给解算带来影响。若基准站过少,可能会造成测点坐标不能固定及网形扭曲。因此,根据不同的用户需求选取基准站的数量,在保证精度的同时快速完成数据解算。
服务器所有对用户命令的响应均在后台进行。当某一用户进行某项请求时,服务器为其开辟一个工作线程;请求任务结束时,工作线程自动销毁,释放线程资源,为下一个请求作准备。当用户断开与服务器连接时,服务器自动释放该用户占用的所有资源,但保留用户的工作目录及数据文件。周跳探测、基线解算、网平差等的解算过程均自动进行,解算时间取决于服务器性能、空闲程度和在线用户提交的任务数。
2) 多线程并发通信实现。采用基于Socket多线程并发通信技术,服务器端面对客户端发出的不定时长任务请求,对每个客户请求由服务器开辟一个单独的线程处理。在服务器端中,线程被用来建立请求驱动的服务程序,一个程序需要循环的等候客户发出的请求,这种请求是连续性的,一旦出现多用户同时访问服务器时,可以开启多个线程来处理客户的相关请求[10]。获取、处理客户的信息后,将其再次发送到客户端。在完成上述操作后,主线程又回到初始状态,等待其他客户发出的请求。在某一个时刻,由同一服务器进程所产生的多个并发线程同时对多个客户的并发请求进行处理,从而解决了并发请求问题[11]。各个线程既能独立操作,又可以协同作业,实现了简单而高效的服务器架构。
在并发系统中,为保护共享数据,互斥锁(mutual exclusion)是最基本的方式。多个线程或进程共享一个互斥锁时,这个互斥锁只能被其中一个线程或进程所获得。如果其他线程或进程试图获得已经锁定的互斥锁时,将被阻塞或返回“设备正忙”的界面,这样就能保证在任何时刻只有一个线程或进程执行临界区中的指令[11-13]。
但互斥锁的缺点是只有锁定和非锁定两种状态。条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,可以与互斥锁进行关联。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程解开相应的互斥锁并等待条件发生变化。当其他某个线程改变了条件变量时,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程,这些线程将重新锁定互斥锁并重新测试条件是否满足[12, 13]。
通过互斥锁和条件变量的协调使用来解决并发服务器中的同步通信问题,并发服务器的工作流程如下:①服务器端建立套接字,并在某一约定端口上等待接收客户请求;②当接收到来自客户端的服务请求后,服务器端建立一个新线程,同时主线程继续等待其他客户连接;③当服务器端新线程处理完成后,关闭新线程与客户的通信链路并终止新线程。
面向连接方式的并发服务器端和客户端的具体实现流程如图 4所示。
![]() |
| 图 4 面向连接的并发服务器流程图 Fig.4 Flow Chart of Pattern of Connection-Oriented Concurrent Server |
当服务器只有一个处理器时,虽然多个线程不能真正的并行执行[7],但经过固定的时间间隔或当一个线程处于等待状态时,就可从一个线程切换到另一线程,实现多个线程重叠执行,这样在某种程度上实现了多个线程的并发执行。在有多个CPU的服务器中,如果底层系统支持,多个CPU能够同时执行不同的线程,这样能够使服务器实现真正的并发执行。并发服务器采用基于多线程的UNIX系统时,能够同时并有效地运行多个任务,既增加了服务器程序的功能,又提高了服务器的运行效率[14]。
3 CORS-GPS网络计算实验在湖南省境内选取C级及以上GPS网点1625、0225、1632、0265、1627等5个测站点数据,采用LC_AUTCLN观测值。高度截止角为15°,5个未知点坐标的约束水平方向和垂直方向均为20 m。基于GAMIT基线解算结果,采用GLOBK进行网平差计算,以8 h时段的坐标结果为例,列出5个点在ITRF框架下的坐标及中误差,如表 1所示(表中坐标已作涉密处理)。
| 表 1 ITRF框架下的坐标及点位中误差 Tab.1 Coordinates and Mean Square Error of Points in ITRF Framework |
![]() |
由表 1可知,5个点的X、Y、Z方向的坐标中误差分别在±2.9 mm、±1.8 mm、±2.7 mm左右。高度角太低时路径延迟对水汽变化非常敏感,通常采用15°截止高度角较适宜。天顶延迟参数变化对长基线的精度影响不明显,虽然估计参数增多能提高对流层天顶延迟改正值精度,但同时也会延长解算时间。天顶延迟参数通常取13,即每2 h产生一个天顶延迟估值较合适。测站坐标约束是通过对3个以上基准站的坐标分量加以约束,为数据解算定义参考系统。随着测站坐标约束由紧到松,基线精度由高到低变化,测站约束对基线精度的影响较明显。但较强的约束导致基线分量误差比站点坐标约束更大,从而降低基线成果的可靠性。因此, 一般不采用过强的坐标分量约束。
任何CORS覆盖范围内的GPS静态观测点,都可以选择其周边最邻近的CORS基准站联网解算,其距离通常在30~40 km,通过联合解算求得精密坐标。如果能正确地组织数据则可在数分钟内顺利完成并获得高精度的解算结果。
4 结束语本文采用网络计算技术模式,研制了CORS-GPS静态定位解算平台服务端与客户端软件。在安全可靠的基础上,使用户能够使用CORS进行mm级高精度GPS定位;保障敏感数据,如基准站坐标及高频观测值的安全性;解决成果保密性要求与应用广泛性之间的矛盾,实现异地、多用户、实时的高精度GPS解算服务,克服传统应用方式在精确性、安全性和便捷性等方面的诸多问题。现阶段有许多工作需要后台管理员手动完成,CORS-GPS系统的自动化与后台智能化管理有待进一步加强,基于CORS的网解算服务平台是一项系统工程,涉及服务器部署、CORS基准站数据管理与组织、高精度解算控制文件的更新维护等,需要完成大量的工作。在系统运行过程中,需要持续建设和维护系统的基础设施,经常更新和升级系统处理软件,逐步改进数据处理方法, 以促进系统的发展与应用。
| [1] |
刘智敏, 窦世标, 熊卫东, 等. 区域CORS数据自动化处理系统建设[J]. 全球定位系统, 2016, 41(4): 70-76. |
| [2] |
金蕾, 胡友健, 梁新美. GPS在线数据处理软件的精度分析[J]. 地理空间信息, 2007, 5(2): 85-87. DOI:10.3969/j.issn.1672-4623.2007.02.031 |
| [3] |
李健, 吕志平. 基于CORS的卫星定位在线服务系统[J]. 测绘通报, 2007(8): 40-44. DOI:10.3969/j.issn.0494-0911.2007.08.013 |
| [4] |
陈豪, 李剑, 杨华先, 等. CORS服务中在线坐标转换系统的设计与实现[J]. 测绘通报, 2012(10): 48-50. |
| [5] |
夏玲, 王伟平. 客户端与服务器端的Socket通信[J]. 电脑知识与技术, 2009, 5(4): 812-813. DOI:10.3969/j.issn.1009-3044.2009.04.017 |
| [6] |
尹德春. 多线程技术在串口通信中的应用[J]. 微计算机信息, 2005(14): 129-130. |
| [7] |
关锐, 李明珠. UNIX下基于C++的Socket模型的并发通信的实现[J]. 信息通信, 2012(4): 177-178. DOI:10.3969/j.issn.1673-1131.2012.04.107 |
| [8] |
阚能琪. VC++串口通信中多线程技术的应用研究[J]. 西华大学学报(自然科学版), 2005, 24(4): 84-85. DOI:10.3969/j.issn.1673-159X.2005.04.027 |
| [9] |
王刘准, 花向红, 岳海斌, 等. 莆田市GPS复测控制网解算中基准站选取的研究[J]. 测绘地理信息, 2015, 40(5): 33-35. |
| [10] |
徐克宝, 武慧, 文艺成. 基于Socket的Windows与Linux平台异步通信[J]. 计算机系统应用, 2015, 24(7): 232-235. DOI:10.3969/j.issn.1003-3254.2015.07.043 |
| [11] |
张志佳, 于立国, 李海滨, 等. 基于多线程的Linux下并发服务器的实现研究[J]. 微计算机应用, 2007, 28(4): 368-371. DOI:10.3969/j.issn.2095-347X.2007.04.007 |
| [12] |
张南平, 徐静. 基于进程池的Linux并发服务器的研究[J]. 计算机与数字工程, 2009, 37(1): 159-161. DOI:10.3969/j.issn.1672-9722.2009.01.044 |
| [13] |
Blasco S, Bustos J, Rivera D. Detection and Containment Amortization UDP Sockets for Multithreading on Multicore Machines[J]. IEEE Latin America Transactions, 2016, 14(6): 2853-2856. DOI:10.1109/TLA.2016.7555264 |
| [14] |
Kasim H, March V, See S. Performance Comparison of Four-Socket Server Architecture on HPC Workload[C]. The 2009 International Conference on Computational Science and Engineering, Vancouver, Canada, 2009
|
2019, Vol. 44






