Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您建议python使用哪个gps库?_Python_Gps_Gpsd - Fatal编程技术网

您建议python使用哪个gps库?

您建议python使用哪个gps库?,python,gps,gpsd,Python,Gps,Gpsd,我正在寻找一个免费的python库,它可以根据GPS坐标计算你的方向和速度,也许可以计算你是否在某些边界或类似的地方 有没有你知道并且对你有用的图书馆 编辑:好吧,看来我必须稍微指定一下。我们正在linux机器上使用python,并从gpsd获取数据。因此,我希望不需要专门的库,只与设备对话。我要寻找的是python代码对数据进行一些基本计算。例如,比较最后的位置并计算速度和方向。我不确定我是否理解您的确切要求,但是,根据您的设备和控制,似乎有许多可能的候选者,例如: (镜子) 如果你的

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

有没有你知道并且对你有用的图书馆


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

我不确定我是否理解您的确切要求,但是,根据您的设备和控制,似乎有许多可能的候选者,例如:

  • (镜子)

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

这本书“开始Python可视化”中包含了这样一个示例—解析GPS数据并从中推断速度和位置。它的源代码可以在

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

因此,只需执行gpsstring.split(','),就可以得到一个包含所有元素的数组,然后可以对其进行解析。要了解更多关于这些句子的信息(我认为还有其他关于速度和方向的句子),请单击

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

式中,R是地球的半径,以您想要得到结果的测量单位为单位(例如R=6372km)。这一行是从我手头的LabView程序中提取的,但是语法与Python非常相似(可能检查操作符,您可能希望执行“fromfutureimport 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库:)

显然,gpsd附带的python模块是我们最好的模块。 请看这里(站点重定向到垃圾邮件)

gpsd附带的gps模块具有一些非常有用的功能。第一种方法是从gpsd获取数据,并将这些数据转换为可用的数据结构。 然后通过模数,你可以获得你的速度,以及你当前相对于北方的航向。 还包括一个计算地球上两个坐标之间距离的函数,该函数考虑了地球的球形性质

我们的特例缺少的功能有:

  • 计算到点之间的航向。这意味着我在一个朝北的点上,我必须转向什么程度才能面对我想要导航到的点

  • 利用第一个函数的数据和我们当前的航向来计算一个转弯角度,我们必须面对一个期望的点(这没什么大不了的,因为它主要只是一个减法)

使用此库的最大问题是,它主要是gpsd的包装器,因此如果您在不同的操作系统上编程,那么您的gpscode应该可以在Windows或MacOS上工作,因为您无法运行代码或安装模块。

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

如果这不起作用,我认为你最好的办法是使用WGS-84(GPS坐标系统)的细节来获得一个实际的(x,y,z)坐标,然后将其与下一个坐标进行差分,以找到你的航向,并在时间间隔内取差的大小来找到你的速度。有关详情如下:

如果你真的想要一个能做到这一切的软件包,我认为pyEphem是相当不错的,尽管我认为你可能会节省一些搜索时间,并通过自己编写来获得一些好的知识


(抱歉,如果没有帮助,第一次张贴,仍在学习如何堆叠溢出)

我发现该脚本对于您描述的任务非常有用。

我在上找到了geo_helper脚本,它似乎是我正在寻找的一点。我会给它一个tryNice脚本,但似乎没有速度。根据gpsd提供的gps.py似乎可以满足您的大部分要求(不是检查您是否在边界内,而是取决于边界格式,可以单独使用计算机)。有关python中gps的更多算法,请查看此页面:
distance=R*2*asin(sqrt((sin((lat1-lat2)/2))**2
               +cos(lat1)*cos(lat2)*(sin((long1-long2)/2))**2))
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;