APP下载

高精度差分在高德地图上的多点实时定位

2017-10-31李庭威王峰汪进夏佩邱文添龙保任李学易

电脑知识与技术 2017年23期

李庭威 王峰 汪进 夏佩 邱文添 龙保任 李学易

摘要:为了将高精度差分位置信息显示在高德地图上,通过搭建基于Python的服务器读取rtklib传来的位置信息,提取出经纬度并传给浏览器。通过编写基于JavaScfipt的HTML文件,调用高德地图API,利用AJAX技术,在地图上实时更新测量点的位置。实验结果实现了多点高精度差分定位的可视化。

关键词:rtklib;Python服务器;高德地图;JavaScript;实时定位

1背景

GPS(Global Positioning svstem)全球定位系统现在已经广泛应用于各行各业,可以提供覆盖全球的导航以及定位服务。高精度的GPS測量必须要采用载波相位观测值。RTK定位技术基于载波相位观测值,能够实时地提供测量点的三维定位坐标,而且可以精确到厘米级。

本项目用到的RTKLIB是日本东京海洋大学(Tokyo University of Marine Science and Technology)开发的开源程序包,供标准的GNSS全球导航系统使用。高德地图是高德软件开发的一款免费在线导航产品,被广泛应用于智能手机和电脑上。由于RTKLIB一次只能输出一个信号,所以本项目通过打开多个RT—KLIB窗口并设置不同的输出端口,传给基于Python开发的多线程后台。为了能在智能手机和电脑上都能实时显示定位点的位置,本项目开发了适用于多平台多终端的前端页面,并利用AJAX(Asynchronous Javascript And XML,异步的Javascript与XML技术),使得不用刷新页面也能在浏览器页面的高德地图中实时更新位置。

2高德地图多点实时定位的实现

2.1搭建基于Python的服务器

Python是一种面向对象、直译式的电脑程序语言。它包含了一组功能完备的标准库,能够轻松完成很多常见的任务。本项目主要用到了Bottle框架。Bottle是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件。本项目用了Bottle框架的Route和Server特性,Route能把请求映射到函数,建立简洁动态的URLs。在浏览器请求URL的时候,bottle框架会根据URL调用与之相应的函数,然后将函数的返回值发送到浏览器。打开RTKLIB并设置好端口后,需要将数据传给Python后台,这里需要用到TCP(传输控制协议)和IPf网际协议)。所以在Python中需要用到socket编程。可以先创建TCP/IP套接字并绑定本地端口(RTKLIB传送数据来的端口),然后接收从指定端口传送过来的数据。

因为要接受多个RTKLIB端口传送过来的数据,所以这一步骤需要重复几次。由于RTKLIB里的经纬度格式与高德地图中的不相同,所以在这里需要对RTKLIB传来的经纬度信息进行转化。通过在代码中添加print语句,可以在窗口中实时显示各点的经纬度信息(本项目用到了3个点),如图1所示。得到的经纬度信息需要实时传送给前端页面,所以需要用到Pvthon的ison模块。JSON是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式。Python的json模块提供了一种很简单的方式来编码和解码JSON数据,可以利用{son.dumps方法可以对简单数据类型进行编码,然后将编码后的JSON数据返回给前端页面。此外,在运行Pvthon后台时,还需要绑定与前端页面通信的本地端口并自动打开前端的HTML文件。

2.2编写基于Javascfipt的HTML文件

JavaScript是一门面向对象的脚本语言,被广泛应用于web应用开发。它常被用来向网页添加各种各样的动态功能,让用户能享受到流畅美观的浏览器页面。为了提高编写效率,本项目采用了JavaScript的jQuery框架。iQuery封装了JavaScript常用的功能代码,优化了对HTML文档的操作、事件的处理以及Ajax交互。我们利用iQuery框架可以很方便地获取从Pvthon后台传来的json格式的数据。

为了提高网站的美观度以及适应各种大小的浏览器页面,我们采用了时下流行的Bootstrap框架。Bootstrap来自Twitter,是最受欢迎的HTML、CSS和JS框架,用于开发响应式布局、移动设备优先的WEB项目。利用Bootstrap中的栅格系统可以轻松布局适应多种屏幕的浏览器界面。我们还调用了Bootstrap中的字体和按钮样式,让整个页面看上去更美观。

由于我们要在高德地图上显示出测量点的位置,所以必须要调用高德地图JavaSeriptAPI,它是由iavaScript语言编写的应用程序接口。我们需要编写在高德地图中添加点的函数,这些点的图标可以从高德提供的网址上实时下载,为了区分不同测量点的序号,我们必须调用不同的图标。为了实时更新测量点的位置,我们调用了javaScript中的定时器函数,使得前端页面每隔半秒就向后台请求一次数据。为了能把所有测量点合理的全部显示在浏览器视口中,我们写了一个按钮,点击它可以调用高德地图API中的setFitView函数,自动的缩放地图,从而显示所有测量点的位置。

2.3定位结果显示

服务器和浏览器是通过HTTP(Hypertext Transfer Protocol,超文本传输协议)协议通信的。浏览器向服务器发送HTTP请求,服务器会在HTTP响应中回送所请求的数据。所幸的是,使用Pvthon自带的标准库BaseHTTPServer就可以快速地搭建一个微型的HTTP服务器。搭建成功后,点击最下方的地图自适应显示按钮,成功地把高精度差分测量点显示在浏览器中了,如图2所示。

3结束语

高精度差分能实现厘米级的定位,但是rtklib输出的信息并不直观。本项目通过编写多线程的Pvthon服务器,从rtklib输出的信息中提取出经纬度,并传送给浏览器。在编写浏览器HTML文件时,我们采用了最新的Bootstrap框架,调用了高德地图最新的API,将高精度差分测量点的位置信息直观地显示在了高德地图上。