基于GPS的里程统计应用实现研究-转载

 

 

大连思绪软件工作室
提供专业的地理信息系统(GIS) 、全球定位系统(GPS)解决方案及开发服务。
电话:86-411-39671789
MSN:rebben@live.cn
QQ: 1055532492

 

基于 GPS 的里程统计应用实现研究

钱春升 石翠仙

(河北行政学院,河北 石家庄 050000

要: GPS 是一种能够使用卫星确立目标对象位置的系统,从 GPS 中可以获取对象连续的坐标轨迹。使用大量的经纬度坐标数据得到轨迹的长度,是许多领域的迫切需求。本文从数学角度推导出一种能够计算两地球坐标点之间物理距离的方法,并利用程序说明了具体实现方法。

关键词: GPS ;轨迹;球面距离计算; SQL Server ;经纬度

1 GPS 技术

    GPS 是基于卫星的导航系统,由美国国防部于 70 年代初研制并交于军方用于军事用途,后来被逐渐应用于民用,最后形成现在的军、民合用的现状。 GPS 可以为世界上任何位置、任何天气状况下的用户能供持续的定位和时序信息。在 GPS 技术快速发展的带动下,许多相关技术也在不断产生、发展。

里程统计

    利用 GPS 的全球定位这一主要功能,交通工具的运动位置、轨迹等信息可以被记录下来。这要求交通工具上安装有 GPS 设备,在运行过程中不断与 GPS 的运转卫星通讯,获取当前地理信息并存储。此技术被广大移动通信公司所采用,使用交通工具作为信号测量的工具,测量所经过途中的信号情况并记录,以方便对当地通信设备的运转情况的及时了解。

    在计算交通工具的运行里程时,怎样才能得出能够真实反映交通工具行驶里程的真实数据呢?如果简单通过查看交通工具的里程表不足以反映汽车真正工作的里程,因为有些路段测量仪器未能工作,应将这段里程在里程表显示的里程扣除。

    考虑到测量仪器工作的过程会生成测量数据点,这些数据表包含 GPS 的地理信息,其中就有地理点在地球上的经、纬度数据。通过连续地理点在经、纬度上的相对位置,可以统计出交通工具在指定路线或时间段内行驶的里程数据。本文将对基于 GPS 的经纬度信息计算里程数的方法给予充分的说明。

算法推导

    地球上任意两点距离的计算其实就是球面两点弧长,计算方法有多种,包括立体几何算法和微积分算法。以下将以立体几何算法为例说明两点弧长的计算方法。

    如果理想地将地球假设为正球体,球体上两点之间的弧长可按如下方法计算。

如图所示: A B 两点为球面任意两点,已知球的半径为 l ,由 A B 两点向赤道平面做垂线,与赤道面的交点分别假定为 C 点和 D 点。由已知 AOC= α 1  BOD= α 2  COD=| β 1 - β 1 | ,求 

应用实例

4.1 环境

    此实例的应用环境为 SQL Server 数据库系统平台,其主要特点是:

    它是典型的关系型数据库系统,与各种语言的兼容性比较好;

    能够保存大量的数据并提供快速的查询;使用标准的 SQL92 语言作为开发语言;

    支持存储过程的编写和调用。

    GPS 产生的采样点记录保存在数据库中的 tSample 表中,此表结构如下表所示:

字段名

类型

长度

描述

Samp_id

int

4

主键

Msg_time

datetime

 

采样时间

logitude

double

 

经度

Latitude

double

 

纬度

4.2 计算过程分析

    GPS 通常会产生大量的采样数据。对这些采样数据的处理应遵循下列步骤:

1 )按时间顺序排序;

2 )读取第 1 2 条采样点记录;

3 )计算两点采样点距离并保存为总里程变量;

4 )读取下一条采样点记录;

    (5) 计算最近两点距离之和并累加至里程变量;

    (6) 重复第 (4) 步骤直至读取完全部数据点记录。

4.2.1 代码实现

    以下是创建名为 dbo.FN_DIST_BTWN_2POS 的脚本,其功能是利用从 tSample 表中取得的记录计算采样点经过轨迹的总里程。

CREATE FUNCTION dbo.FN_DIST_BTWN_2POS

(

@LONG1 float,

@LAT1 float,

@LONG2 float,

@LAT2 float

)

RETURNS float

AS

BEGIN

declare @alpha1 float, @alpha2 float, @beta1 float, @beta2 float;

declare @t float, @DIST float;

set @t = 0.0;

set @alpha1 = (@long1 / 180) * PI();

set @alpha2 = (@long2 / 180) * PI();

set @beta1 = (@lat1 / 180) * PI();

set @beta2 = (@lat2 / 180) * PI();

set @t = (2 * Asin(Sqrt(Sin((@beta1 - @beta2) / 2) * Sin((@beta1 - @beta2) / 2) +

Cos(@beta1) * Cos(@beta2) * Sin((@alpha1 - @alpha2) / 2) * Sin((@alpha1 - @alpha2) / 2)))) * 6371000;

RETURN @t;

END

    在此程序中, @t 变量用于保存里程值,地球的半径使用 6371000 ,函数结果将返回两点之间的距离。

参考文献 :

[1] Ahmed El-Rabbany Introduction to GPS The Global Positioning System Artech House Boston . London

[2] 牛兴文.高等代数与解析几何 [M] .化学工业出版社 ,2005

[3] 赵松涛.深入浅出 SQL Server 2000 系统管理与应用开发 [M] .人民邮电出版社 ,2006

[4] 李调阳. Microsoft SQL Server 2000 中文版标准教程 [M] 海洋出版社 ,2005

——    《中国西部科技》    ——        2007年第3

posted @ 2011-04-24 17:42  大连思绪软件工作室  阅读(1314)  评论(3编辑  收藏  举报