您建议python使用哪个gps库?
我正在寻找一个免费的python库,它可以根据GPS坐标计算你的方向和速度,也许可以计算你是否在某些边界或类似的地方 有没有你知道并且对你有用的图书馆您建议python使用哪个gps库?,python,gps,gpsd,Python,Gps,Gpsd,我正在寻找一个免费的python库,它可以根据GPS坐标计算你的方向和速度,也许可以计算你是否在某些边界或类似的地方 有没有你知道并且对你有用的图书馆 编辑:好吧,看来我必须稍微指定一下。我们正在linux机器上使用python,并从gpsd获取数据。因此,我希望不需要专门的库,只与设备对话。我要寻找的是python代码对数据进行一些基本计算。例如,比较最后的位置并计算速度和方向。我不确定我是否理解您的确切要求,但是,根据您的设备和控制,似乎有许多可能的候选者,例如: (镜子) 如果你的
编辑:好吧,看来我必须稍微指定一下。我们正在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获取数据,并将这些数据转换为可用的数据结构。 然后通过模数,你可以获得你的速度,以及你当前相对于北方的航向。 还包括一个计算地球上两个坐标之间距离的函数,该函数考虑了地球的球形性质 我们的特例缺少的功能有:
- 计算到点之间的航向。这意味着我在一个朝北的点上,我必须转向什么程度才能面对我想要导航到的点
- 利用第一个函数的数据和我们当前的航向来计算一个转弯角度,我们必须面对一个期望的点(这没什么大不了的,因为它主要只是一个减法)
(抱歉,如果没有帮助,第一次张贴,仍在学习如何堆叠溢出)我发现该脚本对于您描述的任务非常有用。我在上找到了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;