GNSSCAL 使用文档
公历(格里高利历)是我们实际生活中使用的历法。但对于 GNSS 数据处理而言,其数据的观测日期通常以年、年积日的方式表示;而产品所对应的日期则常常以 GPS 周、周内日的方式表示。我们经常需要将日期在这几种表示方法之间切换。
本文将介绍一个 Python 库:gnsscal,它既可以作为模块导入,亦提供命令行操作方式。使用这个库可以方便快捷地查询公历、年积日和 GPS 周、BDS 周等对应的信息。
简介
gnsscal 是一个 Python 模块,该模块提供处理 GNSS 数据所需的日期的一些常量和函数。模块支持 Python 2 和 Python 3,代码托管在 Github 网站上。
安装与更新
gnsscal 支持使用 pip 进行安装,安装命令为:
1 | $ pip install gnsscal |
上面的命令将从 PyPI 仓库下载程序包,并将其加入到你的程序库中。要更新 gnsscal,可使用命令:
1 | $ pip install --upgrade gnsscal |
命令行模式
安装 gnsscal 之后,你可以通过命令行模式来使用它:
1 | $ python -m gnsscal [options] |
这里的 [options]
主要用于指定输入的日期,你可以使用如下参数:
-date <year> <month> <day>
:通过年、月、日的方式指定输入的日期;-ydoy <year> <doy>
:通过年、年积日的方式指定输入的日期;-gpswd <week> <dow>
:通过 GPS 周、周内日的方式指定日期;-bdswd <week> <dow>
:通过 BDS 周、周内日的方式指定日期。-v
、--version
:显示程序版本信息;-h
、--help
:显示帮助信息。
示例,输入年、月、日,查看该日对应的年积日、GPS 周、BDS 周等信息:
1 | $ python -m gnsscal -date 2017 9 25 |
输入年和年积日,查看对应的公历和 GPS 周、BDS 周等信息:
1 | $ python -m gnsscal -ydoy 2017 268 |
输入 GPS 周和周内日,查看对应的信息:
1 | $ python -m gnsscal -gpswd 1968 1 |
输入 BDS 周和周内日,查看对应的信息:
1 | $ python -m gnsscal -bdswd 612 1 |
以上示例的输出都是相同的:
Gregorian date: 2017-09-25
year, doy: 2017, 268
GPS week: 1968, 1
BDS week: 0612, 1
作为模块
gnsscal 亦可以作为模块导入,这样你就可以使用其提供的函数库。目前,gnsscal 模块提供了两个常量和一系列的函数。你可以直接调用它们而不需要重新发明轮子。
常量
模块中定义的两个常量为:
GPS_START_DATE
GPS 周计算的起点,该值是一个 datetime.date 型的常量,定义为 1980 年 1 月 6 日。BDS_START_DATE
BDS 周计算的起点,该值是一个 datetime.date 型的常量,定义为 2006 年 1 月 1 日。
作为示例的交互式控制台代码:
1 | from gnsscal import * |
公历与年积日转换
date2doy(date)
将公历转换为年积日,返回一个整数。date2yrdoy(date)
将公历转换为年和年积日,返回一个包含两个整数的元祖。yrdoy2date(year, doy)
将年和年积日转换为公历,返回一个 datetime.date 型的实例。
作为示例的交互式控制台代码:
1 | from datetime import date |
公历与 GPS/BDS 周转换
date2bdswd(date)
将公历转换为 BDS 周和周内日,返回一个包含两个整数的元组。date2gpswd(date)
将公历转换为 GPS 周和周内日,返回一个包含两个整数的元组。bdswd2date(bdsweek, dayofweek)
将 BDS 周和周内日转换为公历,返回一个 datetime.date 型的实例。gpswd2date(gpsweek, dayofweek)
将 GPS 周和周内日转换为公历,返回一个 datetime.date 型的实例。
作为示例的交互式控制台代码:
1 | from datetime import date |
年积日与 GPS/BDS 周转换
bdswd2yrdoy(bdsweek, dayofweek)
将 BDS 周和周内日转换为年和年积日,返回一个包含两个整数的元组。gpswd2yrdoy(gpsweek, dayofweek)
将 GPS 周和周内日转换为年和年积日,返回一个包含两个整数的元组。yrdoy2gpswd(year, doy)
将年和年积日转换为 GPS 周和周内日,返回一个包含两个整数的元组。yrdoy2bdswd(year, doy)
将年和年积日转换为 BDS 周和周内日,返回一个包含两个整数的元组。
作为示例的交互式控制台代码:
1 | from gnsscal import * |
BDS/GPS 周相互转换
bdsw2gpsw(bdsweek)
将 BDS 周转换为 GPS 周,返回一个整数。gpsw2bdsw(gpsweek)
将 GPS 周转换为 BDS 周,返回一个整数。
作为示例的交互式控制台代码:
1 | from gnsscal import * |
测试
如果你需要测试 gnsscal,其测试代码放在 test_gnsscal.py 中。你可以通过执行它来测试位于相同目录下的 gnsscal.py 程序:
1 | $ python test_gnsscal.py |
补充
如果你仅仅想要查看公历和年积日、GPS 周之间的相对应信息,访问 GNSS Calendar 网站也是一个不错的选择。从该网站还可以方便地下载 IGS 提供的产品。另外,如果你需要一个离线可用的 GUI 应用,也可以尝试一下本站下载页面所提供的 “GPS 日历”程序。