加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

Python Package of GNSS Data Processing

Create Date: 2017-08-16
Update Date: 2023-11-30
Version: 1.0.12
Authors: 张良
Contact: lzhang2019@whu.edu.cn
Organization: 武汉大学GNSS近地空间环境学课题组(姚宜斌教授课题组)
Copyright: 武汉大学GNSS近地空间环境学课题组

最新更新

  1. 一键下载广播星历、精密轨道、精密钟差、CODE GIM 文件。
$ pip3 install --upgrade ppgnss # 升级/安装
$ ppget --data=gim --from=2023,1 --to=2023,2 --outdir=data # 下载CODE GIM文件到 data目录
$ ppget --data=clk --from=2023,1 --to=2023,2 --outdir=data # 下载钟差文件到data目录
$ ppget --data=brdc --from=2023,1 --to=2023,2 --outdir=data # 下载广播星历到data目录
  1. v1.0.14 以后版本使用 pip3 安装时,无需手动安装依赖

简介

ppgnss 是基于 python 编写的 GNSS 数据处理程序包,提供 GNSS 相关的文件读取、时间转换、坐标转换等基础功能。

本程序包安装方便、调用简单,是 GNSS 科研必备基础库。

如何安装

可以选择 pip 安装或源码安装。

使用 pip 快速安装

使用 pip 可以快速安装:

$ pip3 install ppgnss

可以参考 B站视频:如何在vscode 中使用 ppgnss

使用源码安装

Requirements

The package can only used on Python 3.8. So make sure you have Python 3.8 installed. And then, dependency should be installed.

$ git clone https://gitee.com/snnugiser/ppgnss
$ cd ppgnss
$ pip3 install -r requirements.txt

You can run command in the main directory as follow to install ppgnss package:

$ sudo python setup.py install

If you want to learn more about setup.py files, check out this repository.

How to use

After installed, ppgnss can be used as normal python package.

How to import ppgnss module

In python script file or python interpreter, import ppgnss as follow:

>> import ppgnss
>> from ppgnss import gnss_time # or
>> import ppgnss.gnss_time as gt

ppgnss API document

The ppgnss API document is generated by sphinx. To generate the document can use command as follow:

$ make html

in directory ppgnss/docs. Files generated into directory docs/_build/html

运行示例

tests/ 下有单元测试代码,可以从中查看示例函数调用方式。

小技巧

  1. 读大文件比较耗时,读完可以用 gnss_utils.saveobject 存为对象文件,然后每次使用时用 gnss_utils.loadobject 加载。这样耗时的读文件只进行了一次。

快速入门

时间转换

首先,导入时间转换模块:

from ppgnss import gnss_time
  1. 年积日转年月日
year, doy = 2020, 300
yr, mo, dy = gnss_time.doy2ymd(year, doy)
  1. 年月日转年积日
yr, mo, dy = 2020, 3, 12
year, doy = gnss_time.ymd2doy(yr, mo, dy)

3. 年月日转儒略日

yr, mo, dy = 2020, 2, 15.3
jd = gnss_time.ymd2jd(yr, mo, dy)
  1. 字符串转 datetime
str_time = "2016 10 0 0 0 0.0000"
dt = gnss_time.strtime2datetime(str_time)
  1. 年积日转GPS周
year, doy = 2022, 132
gpsw, dow = gnss_time.doy2gpsw(year, doy)

坐标转换

导入坐标转换模块:

from ppgnss import gnss_geodesy
  1. 经纬度转空间直角坐标系
lat, lon, hgt = 35.82, 120.32, 104
x, y, z = gnss_geodesy.blh2xyz(lat, lon, hgt)
  1. 空间直角坐标系转经纬度
x, y, z = -1250323.7185,  5584256.2418, 2810873.5627
lat, lon, hgt = gnss_geodesy.xyz2blh(x, y, z)
  1. 空间直角坐标系转站心坐标系
base = [-2814241.6307, 4640483.1794, 3339376.6524]
rover = [-2814943.8488, 4640647.3401, 3338562.0520]
dxyz = [rover[0] - base[0], rover[1] - base[1], rover[2] - base[2]]
enu = gnss_geodesy.dxyz2neu(dxyz, base)
  1. 小数度转度分秒
dd = 30.82
deg, mi, sec = gnss_geodesy.dd2dms(dd)

文件读取

导入文件读取模块:

from ppgnss import gnss_io
  1. 读取 RTKLib 结果文件
pos_filename = /path/to/rtklib/pos/file
xr_data = gnss_io.read_rtklib_solution(pos_filename, type="blh") # blh format or
xr_data = gnss_io.read_rtklib_solution(pos_filename, type="xyz") # xyz format
  1. 读取 IONEX 文件
ionex = /path/to/ionex/file
xr_gim = gnss_io.read_ionex_file(ionex)
print(xr_gim)

实用函数

导入 gnss_utils 子模块

from ppgnss import gnss_utils
  1. 离散点转格网数据(平均值法)
lons = [14.79227390, 10.39721509, 14.9914751, 10.46443676, 11.68290042, 12.96251365,
        11.78642979, 11.53964273, 11.077815, 11.64727962]
lats = [30.80652515, 31.79023469, 33.0440297,  30.01529668, 32.89113676, 32.54474648,
        31.86804214, 32.30695447, 32.4015013, 34.83146824]
lons = np.array(lons)
lats = np.array(lats)
xstep, ystep = 0.5, 1
llpoint = (10, 30) # 左下角像元四个角点的左下角点的坐标
urpoint = (15, 35) # 右上角像元四个角点的右上角点的坐标
shape = (int((urpoint[0]-llpoint[0])/xstep), int((urpoint[1]-llpoint[1])/ystep))

values = 3*lons**2 + 2*lats**2
points = np.array([lons, lats, values]).transpose()
print(points.shape)
print(llpoint, shape, (xstep, ystep))
data, inds = gnss_utils.points2grids(points, llpoint, shape, (xstep, ystep))

print(data["mean"])
print(data["std"])
print(data["min"])
print(data["max"])
print(data["std"])
print(data["count"])

大量实用示例陆续更新

示例源码

ppgnss examples.

视频课程

  1. 在 vscode 中使用 ppgnss
  2. 配合 wget 下载GIM文件.
  3. 配合 wget 下载BRDM文件.
  4. 配合 wget 下载SP3文件.

开发说明

开发主分枝

The main version repository is ppgnss. master branch is the main branch for formal version and dev branch is the development branch. Develop code based on the dev branch, you should firstly fork the branch to your own repository.

分叉工程

fork the project to your own repository. The new repository can be named another name to distinguish. For example, ppgnss-dev can be a good name.

修改和编写代码

子模块

所有子模块都应放在 ppgnss 目录下. 子模块名应以 gnss_ 开始.

编码规范

编码应符合 pep-8. 推荐使用 autopep8pylint 工具进行代码检查.通常,编辑器或 IDE 都有相应的 autopep8pylint 支持.

文档字符串

所有函数都应有文档字符串 (docstring). 为使文档字符串可以使用 sphinx 生成文档,建议使用 reST 风格.一个简单的示例为:

def add(para1, para2):
   '''
   Add para1 and para2. ..:math:`c = para_0 + para_2`

   :param para1: The first number.
   :type para1: int or float
   :param para2: the second number.
   :type para2: int or float
   :return: sum of para1 and para2
   :rtyep: float

   Example usage::

     >> add(1, 2)
     3

   '''
   pass

单元测试

如果没有特殊情况,所有函数都应有与之相对应的单元测试.一般地,每个子模块对应一个单元测试文件,每个函数有特定的单元测试语句.在单元测试覆盖的好的情况下,修改代码会比较方便.单元测试一般要包括正常调用和异常调用.具体测试用例可以在开发中慢慢摸索.

Commit code

每次向自己的代码库提交代码要提供提交说明.最好提交的内容可以一句话可以总结.

Pull Request and code review

每次提交后可以向主开发分枝推送.利用 Pull Request 向主开发分枝推送.推送代码量以 200-400 行为宜. 每次向主开发分枝推送必须经过 Code Review 才能合并到主开发分枝.任何一段代码都至少有一个人进行 Code Review . 在 Pull Request 时,可以选择让谁进行 Code Review .

Code Review

代码审查的主要目的是检查代码是否容易读懂.让任何一段代码都有至少两个人熟悉.主要内容有

  1. 代码是否能正常运行
  2. 单元测试是否正常运行.
  3. 代码是否清晰易读, 可维护
  4. docstring 中对输入输出是否描述清楚. docstring 是否可以能够用 sphinx 直接生成说明文档.
  5. 代码风格是否符合 pep-8
  6. 与现有代码是否重叠,是否有重构的空间
  7. 其他觉得可以改进的地方
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

Python Package of GNSS 展开 收起
Python 等 2 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化