你会推荐哪个gps库用于python?

时间:2009-06-05 00:01:58

标签: python gps gpsd

我正在寻找一个免费的python库,它可以根据GPS坐标计算你的方向和你的速度,也许可以计算你是否在某些边界或类似的东西。

您是否知道并且适合您的图书馆?

编辑:好吧,好像我必须稍微指定一下。我们在linux机器上使用python并从gpsd获取数据。所以我希望不需要专门的库来与设备通信。我正在寻找的是python代码,用数据做一些基本的计算。比如比较最后的位置并计算速度和方向。

6 个答案:

答案 0 :(得分:9)

显然,gpsd附带的python模块是我们最好的模块。 首先看看 here (网站重定向到垃圾邮件)。

随gpsd一起提供的gps模块有一些非常有用的功能。第一个是从gpsd获取数据并将这些数据转换为可用的数据结构。 然后模块可以让您访问您的速度,以及您当前相对于北方的航向。 还包括用于计算考虑到地球的球形性质的地球上两个坐标之间的距离的函数。

我们的特殊情况缺少的功能是:

  • 计算点到点之间的标题。意思是我面向北方,我必须转向面向我想要导航的点。

  • 获取第一个函数的数据和我们当前的标题来计算我们必须做的面向期望点的转弯(不是很大,因为它主要只是一个减法)

使用这个库的最大问题是它主要是gpsd的包装器,所以如果你在不同的操作系统上进行编程,那么gpscode应该像Windows或MacOS一样工作,你无法运行代码或者安装模块。

答案 1 :(得分:4)

我不确定我是否理解您的具体要求,但是,根据您的设备& c,似乎有很多可能的候选人,例如:

如果你的意思是你已经获得了GPS'单位输出而只需要解析它& c,我怀疑上面的一个或多个例子(遗憾的是我还没试过)将包含好 - 该任务的隔离模块,根据许可条件,您可以重新调整用途; this SO question如果你正在做的事情也可能会有所帮助。

答案 2 :(得分:3)

“开始Python可视化”一书只包括这样一个例子 - 解析GPS数据并从中推断出速度和位置。其源代码可在http://www.apress.com/

在线获取

答案 3 :(得分:3)

您从GPS设备收到的GPS语句很容易解码,这看起来像一个有趣的项目。我不确定你从gspd得到什么,但如果是这些句子,几周前我实际上不得不为学校做这样的事情(但是在LabView中):

$GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx

hhmmss.ss = UTC of position 
llll.ll = latitude of position
a = N or S
yyyyy.yy = Longitude of position
a = E or W 
x = GPS Quality indicator (0=no fix, 1=GPS fix, 2=Dif. GPS fix) 
xx = number of satellites in use 
x.x = horizontal dilution of precision 
x.x = Antenna altitude above mean-sea-level
M = units of antenna altitude, meters 
x.x = Geoidal separation
M = units of geoidal separation, meters 
x.x = Age of Differential GPS data (seconds) 
xxxx = Differential reference station ID 

所以你可以做一个gpsstring.split(','),然后你将得到一个你可以解析的所有元素的数组。要查看有关这些句子的更多信息(还有其他我认为的速度和方向),请点击here

例如,要获得两点之间的近似距离,您可以使用Haversine Formula

distance=R*2*asin(sqrt((sin((lat1-lat2)/2))**2
               +cos(lat1)*cos(lat2)*(sin((long1-long2)/2))**2))

其中R是您想要得到结果的测量单位中地球的半径(例如R = 6372km)。该实际行取自我所处的LabView程序,但语法非常类似于Python(可能需要检查division运算符,您可能希望“来自 future import division ”

此外,lat1,lat2,long1和long2必须以弧度表示。你得到它们的格式非常奇怪(hhmm.ff,其中ff是分钟的分数,因此它们从0到99而不是0到59(以秒为单位))。

我用的代码是:

h=floor(x/100);
m=floor(x-(h*100));
s=(x-floor(x))*60;
deg=sgn*(h+(m/60)+(s/3600));
rad=deg*pi/180;

北部和东部的标志为1,南部和东部的标志为-1。再次注意分裂。

检查边界是我认为最简单的部分。如果你已经得到弧度或度数的位置,你可以检查纬度是否在两个纬度边界之间,并且经度相同。

在所有内容周围写一个包装器,你就拥有了你的GPS库:)

答案 4 :(得分:1)

大多数优秀的GPS装置(我们使用Oncore M12M)实际上会为您提供速度和航向作为输出。我首先检查您的GPS接收器的文档,看看是否已经发送了这些信息,或者是否可以启用此类消息。根据我的经验,这些数据通常是接收器给你的标准遥测的一部分。

如果这不起作用,我认为最好的办法是使用WGS-84(GPS坐标系)的细节来获得实际的(x,y,z)坐标,然后将其与下一个坐标区分开来。一个找到你的标题并在时间间隔内取出差异的大小来找到你的速度。这里有一些细节: http://topex.ucsd.edu/geodynamics/14gravity1_2.pdf

如果你真的想要一个可以做到这一切的软件包,我认为pyEphem非常好,虽然我认为你可以节省一点时间搜索并通过自己编写来获得一些好的知识。

(对不起,如果没有帮助,第一次发布海报,还在学习如何堆叠溢出)

答案 5 :(得分:0)

我发现gpsd-py3 library对您描述的任务非常有用。