通过python查询gpsd:度量单位

通过python查询gpsd:度量单位,python,units-of-measurement,gpsd,Python,Units Of Measurement,Gpsd,我有一些python代码,可以用 session=gps.gps(mode &c &c report=session.next() 正如在www上发布的那样,它工作得很好,但给出的高度单位是米,速度单位是公里/小时。在航空业(和自由世界),我想要绳结和脚。当然我可以转换,但这会增加cpu负载并降低精度。有没有办法让gps库产生“正确的”测量单位?它肯定不会将程序减慢到几乎任何可测量的程度,以Python转换单位,也不会降低精度。1节正好等于1.852 km/h,1英尺正好等于0

我有一些python代码,可以用

session=gps.gps(mode &c &c
report=session.next()

正如在www上发布的那样,它工作得很好,但给出的高度单位是米,速度单位是公里/小时。在航空业(和自由世界),我想要绳结和脚。当然我可以转换,但这会增加cpu负载并降低精度。有没有办法让gps库产生“正确的”测量单位?

它肯定不会将程序减慢到几乎任何可测量的程度,以Python转换单位,也不会降低精度。1节正好等于1.852 km/h,1英尺正好等于0.3048米,因此我们得到:

knots = speed / 1.852
altft = alt / 0.3048
这些数字尽可能精确



至于这些运算会产生多大的误差,这类除法是安全的操作w.r.t.精度,让我们假设使用32位IEEE浮点数,并进行1次额外的乘法和1次额外的除法。其中每一个的最大误差为0.5位二进制精度,23位精度中总共有1位二进制误差。因此,误差的最大值肯定不超过1/(2^22)或1/4194304。对于500海里/小时的速度范围,它将产生8.7英寸/小时的差异,对于约30000英尺的高度,它将产生0.86英寸的差异(哎呀,也许你的GPS接收器颠倒了)。如果您认为这些错误很严重,那么您应该知道,任何sane库和Python都已经使用了double,因此错误大约要小1073741824倍。

感谢您的帮助,但无需向我演示如何除法。此外,我相信会有一些精度损失,从来没有听说过没有舍入误差的浮点除法。但这一点是没有意义的,对于传统仪器利润率至少为5%的私人航空来说,准确度仍然足够。这并没有改变我讨厌浪费cpu周期的事实——NMEA将速度以节为单位传递给gpsd(在大多数接收器上,当然是在我的接收器上),为什么它要转换为公里/小时,然后再返回到节?我称之为纯粹的浪费。同样,对于高度。@Karlchen9 gps数据最初是公制的。您的接收器会计算以非度量形式显示相同的数据。如果您希望gps数据不是度量数据,则必须花费“cpu周期”。偶数km/h必须从m/s转换而来。另外,考虑到gps精度的固有误差,您甚至不会注意到浮点除法误差,也不会注意到cpu上的额外负载。@Nodak:我不得不不同意。Hitec 204在NMEA记录中以节为单位输出速度,以英尺为单位输出高度。@Karlchen9…当然,您的接收器对该装置进行转换,该装置支付转换成本。你可以定制
?观察原始数据
,或
NMEA
以这种方式传递数据,但在计算机上计算整个过程的“效率”仍然较低。然后,如果你切换到非Hitec,可能会较低。吸收它,使用JSON并进行浮点除法。它会更干净,(更快),你会更开心。看看吧。它仍然是alpha,但它看起来是一个稍微精简的用于gpsd的python接口,允许俄罗斯方块游戏的剩余cpu周期。关于<暂停,因为不清楚jonrsharpe、Antti Haapala、karthik、Odedra、Piyush提出的问题,请澄清你的具体问题或添加其他细节>我可以重新开始使用report=session.next(),speed=“{.0f}”.format(report['speed'])调整速度(如果报告属于“TPV”类".到目前为止还不错。但是报告的速度是以km/h为单位的,我希望python gps包以节为单位报告速度。可能通过设置环境变量…例如export gpsd.units=imperial或修改gps库的参数。看起来您正在使用python gps,这是随gpsd包提供的模块。详细说明了如何使用不同的gpsd前端选择它们使用的单位。当我需要公制(用于科学)时,我的一个系统以英制单位显示就像另一个系统一样,区别在于LANG环境变量en_US vs en_GB。@elBradford,谢谢!终于有人明白了我的意思。但是我已经停止使用gpsd模块,除了驾驶ntp;出于导航目的,我(在我的应用程序中)找到了它太复杂,不够稳定。@KarelAdams您最终使用了什么?