2024-06-02 13:16:44 发布
网友
我正在使用此模块:
https://github.com/inmcm/micropyGPS/blob/master/micropyGPS.py
不幸的是,micropython中的float仅限于5位小数,例如80.12345
如何获得至少6个,例如80.123456
我知道精确到1米,但我需要更精确
谢谢你的回答。问题是,在收到结果后,我必须进一步计算它,例如到另一个点的距离或一个与另一个航路点之间的方向。如果我理解正确的话,你们的例子仅仅是为了展示结果而不是为了进一步的计算吗
我的caluclates的示例代码:
def dist_waypoints(self, lat1, lon1, lat2, lon2): """ Calculate distance betweeen two coordinates. """ try: lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) result = 6371 * (acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon1 - lon2))) meters = int(result * 1000.0); return meters except Exception as e: self.exception_save(e) sys.exit() return 0 def bearing_dest(self, lat1, lon1, lat2, lon2): """ Calculate bearing destination betweeen two coordinates. """ try: theta1 = radians(lat1) theta2 = radians(lat2) delta1 = radians(lat2-lat1) delta2 = radians(lon2-lon1) y = sin(delta2) * cos(theta2) x = cos(theta1)*sin(theta2) - sin(theta1)*cos(theta2)*cos(delta2) brng = atan2(y,x) bearing = degrees(brng) bearing = (bearing + 360) % 360 return bearing except Exception as e: self.exception_save(e) return 0
我查看了类MicropyGPS,并得出结论,如果不将'dms'或'dd'作为构造函数的location_formatting(第三个)参数传递,您将在类的内部表示中直接获得该类的latitude和longitude属性,这是由3项组成的list:
MicropyGPS
'dms'
'dd'
location_formatting
latitude
longitude
list
int
float
str
'N'
'S'
'E'
'W'
因此,在此表示法中,精度比浮点数多2或3位。我不知道你需要如何用经度和纬度来表示你的目的。如果你需要它们成为一个单独的浮动,那么你就输了。如果你可以分别对待学位和分钟,或者如果你需要字符串,你就赢了
我还看了一眼MicroPython,我不知道。看起来,虽然浮点数的精度很低,但整数的精度是无限的。因此,如果这对您的目的来说是可以的,那么您可以做的是将度和分钟转换为整数,单位为10**-6度(微度)。类似于(未经测试):
DEGREES_FACTOR = 1000000 MINUTES_FACTOR = 1000000.0 / 60.0 degrees, minutes, hemisph = my_micropyGPS.longitude microlongitude = degrees * DEGREES_FACTOR + round(minutes * MINUTES_FACTOR) if hemisph == 'W': microlongitude = -microlongitude degrees, minutes, hemisph = my_micropyGPS.latitude microlatitude = degrees * DEGREES_FACTOR + round(minutes * MINUTES_FACTOR) if hemisph == 'S': microlatitude = -microlatitude
结果整数将位于decimal fixed point representation中,小数点位于右边缘的6个小数点位置。这对于可视化来说很方便,但您也可以使用不同的单位,比如按2的幂放大的分钟数,这将消除任何转换错误
还请注意,5位精度意味着您的示例中的数字最好用十进制表示为80.123(所有数字都以浮点计算,而不仅仅是小数点右边的数字)
80.123
谢谢你的回答。问题是,在收到结果后,我必须进一步计算它,例如到另一个点的距离或一个与另一个航路点之间的方向。如果我理解正确的话,你们的例子仅仅是为了展示结果而不是为了进一步的计算吗
我的caluclates的示例代码:
我查看了类
MicropyGPS
,并得出结论,如果不将'dms'
或'dd'
作为构造函数的location_formatting
(第三个)参数传递,您将在类的内部表示中直接获得该类的latitude
和longitude
属性,这是由3项组成的list
:int
度float
分钟str
半球('N'
,'S'
,'E'
或'W'
)因此,在此表示法中,精度比浮点数多2或3位。我不知道你需要如何用经度和纬度来表示你的目的。如果你需要它们成为一个单独的浮动,那么你就输了。如果你可以分别对待学位和分钟,或者如果你需要字符串,你就赢了
我还看了一眼MicroPython,我不知道。看起来,虽然浮点数的精度很低,但整数的精度是无限的。因此,如果这对您的目的来说是可以的,那么您可以做的是将度和分钟转换为整数,单位为10**-6度(微度)。类似于(未经测试):
结果整数将位于decimal fixed point representation中,小数点位于右边缘的6个小数点位置。这对于可视化来说很方便,但您也可以使用不同的单位,比如按2的幂放大的分钟数,这将消除任何转换错误
还请注意,5位精度意味着您的示例中的数字最好用十进制表示为
80.123
(所有数字都以浮点计算,而不仅仅是小数点右边的数字)相关问题 更多 >
编程相关推荐