gnsskit 0.4.0__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gnsskit-0.4.2/PKG-INFO +160 -0
- gnsskit-0.4.2/README.md +126 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/pyproject.toml +7 -1
- {gnsskit-0.4.0 → gnsskit-0.4.2}/pyproject.toml.orig +3 -2
- gnsskit-0.4.0/PKG-INFO +0 -72
- gnsskit-0.4.0/README.md +0 -42
- {gnsskit-0.4.0 → gnsskit-0.4.2}/LICENSE +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/__init__.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/kinematic/__init__.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/kinematic/trajectory.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/ppp/__init__.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/py.typed +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/refsys.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/rinex.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/rtklib/__init__.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/rtklib/config.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/rtklib/pos.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/rtklib/runner.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/static/__init__.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/static/baseline.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/static/closure.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/static/network.py +0 -0
- {gnsskit-0.4.0 → gnsskit-0.4.2}/src/gnsskit/static/solve.py +0 -0
gnsskit-0.4.2/PKG-INFO
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gnsskit
|
|
3
|
+
Version: 0.4.2
|
|
4
|
+
Summary: RTKLIB-based GNSS post-processing toolkit: RINEX tools, RTKLIB wrappers, static baselines and network adjustment, kinematic trajectories
|
|
5
|
+
Keywords: gnss,gps,rtklib,ppk,surveying,least-squares
|
|
6
|
+
Author: Francesco Ioli
|
|
7
|
+
Author-email: Francesco Ioli <francesco.ioli@polimi.it>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Typing :: Typed
|
|
19
|
+
Requires-Dist: numpy
|
|
20
|
+
Requires-Dist: pandas>=2
|
|
21
|
+
Requires-Dist: scipy ; extra == 'all'
|
|
22
|
+
Requires-Dist: pyproj ; extra == 'all'
|
|
23
|
+
Requires-Dist: matplotlib ; extra == 'all'
|
|
24
|
+
Requires-Dist: scipy ; extra == 'network'
|
|
25
|
+
Requires-Dist: pyproj ; extra == 'network'
|
|
26
|
+
Requires-Dist: matplotlib ; extra == 'plot'
|
|
27
|
+
Requires-Python: >=3.10
|
|
28
|
+
Project-URL: Repository, https://github.com/franioli/gnsskit
|
|
29
|
+
Project-URL: Issues, https://github.com/franioli/gnsskit/issues
|
|
30
|
+
Provides-Extra: all
|
|
31
|
+
Provides-Extra: network
|
|
32
|
+
Provides-Extra: plot
|
|
33
|
+
Description-Content-Type: text/markdown
|
|
34
|
+
|
|
35
|
+
# gnsskit
|
|
36
|
+
|
|
37
|
+
Shared tools for post-processing GNSS data with [RTKLIB](https://www.rtklib.com/) `rnx2rtkp`, used by
|
|
38
|
+
[djippk](https://github.com/franioli/djippk) (drone PPK) and [stopgo](https://github.com/franioli/stopgo)
|
|
39
|
+
(stop-and-go surveys).
|
|
40
|
+
|
|
41
|
+
> [!IMPORTANT]
|
|
42
|
+
> **RTKLIB is not included and must be installed separately.** gnsskit runs the RTKLIB
|
|
43
|
+
> command-line program `rnx2rtkp` (the CLI of RTKPOST) for the GNSS processing; `pip`/`uv` do
|
|
44
|
+
> not install it. See [RTKLIB](#rtklib-required-separately) below.
|
|
45
|
+
|
|
46
|
+
- **RTKLIB wrappers** (`gnsskit.rtklib`): `RtkConfig`, a typed, immutable set of `rnx2rtkp` options
|
|
47
|
+
(`from_file`, `updated`, `with_options`, `with_base_llh`, `write`); `run_rnx2rtkp` and `find_rnx2rtkp`;
|
|
48
|
+
`read_pos` (llh, xyz and enu `.pos` files).
|
|
49
|
+
- **RINEX** (`gnsskit.rinex`): `rinex_span`, `header_llh`, `trim_rinex`; inspection with `obs_summary`
|
|
50
|
+
(span, sampling, gaps, satellites), `read_visibility` and `plot_visibility` (RTKPLOT-style satellite
|
|
51
|
+
visibility, needs the `plot` extra).
|
|
52
|
+
- **Static** (`gnsskit.static`): `solve_static` (one solution over a time window), `process_baseline`
|
|
53
|
+
(static baselines with covariance), baseline IO and `loop_closures` (misclosure of every triangle of baselines); least-squares adjustment of a redundant baseline
|
|
54
|
+
network in `gnsskit.static.network` (needs the `network` extra).
|
|
55
|
+
- **Kinematic** (`gnsskit.kinematic`): trajectory interpolation and averaging.
|
|
56
|
+
- **Reference systems** (`gnsskit.refsys`): GPST/UTC, ellipsoids, ECEF/geodetic conversions and
|
|
57
|
+
`ENUFrame`, a local east-north-up frame at a point (points, vectors and covariances, both ways).
|
|
58
|
+
|
|
59
|
+
## Install
|
|
60
|
+
|
|
61
|
+
With [uv](https://docs.astral.sh/uv/) (recommended), in your project:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
uv add gnsskit # library
|
|
65
|
+
uv add "gnsskit[network]" # + network adjustment (scipy, pyproj)
|
|
66
|
+
uv add "gnsskit[network,plot]" # + satellite visibility plots (matplotlib)
|
|
67
|
+
uv add "gnsskit[all]" # every extra
|
|
68
|
+
uv add git+https://github.com/franioli/gnsskit # development version
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
or in an existing environment, `uv pip install gnsskit` (same extras).
|
|
72
|
+
|
|
73
|
+
With pip:
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
pip install gnsskit
|
|
77
|
+
pip install "gnsskit[all]" # with every extra
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### RTKLIB (required separately)
|
|
81
|
+
|
|
82
|
+
The processing functions (`run_rnx2rtkp`, `process_baseline`, `solve_static`) call the RTKLIB
|
|
83
|
+
command-line program **`rnx2rtkp`**, which must be installed on your system and found on your
|
|
84
|
+
`PATH` (or passed with `exe=`); `trim_rinex(use_convbin=True)` also needs RTKLIB `convbin`.
|
|
85
|
+
The [demo5 fork](https://github.com/rtklibexplorer/RTKLIB) is
|
|
86
|
+
recommended; gnsskit is developed with `rnx2rtkp ver.EX 2.5.1`.
|
|
87
|
+
|
|
88
|
+
- **Windows**: download a [demo5 release](https://github.com/rtklibexplorer/RTKLIB/releases),
|
|
89
|
+
unzip it and add the folder with `rnx2rtkp.exe` to your `PATH`.
|
|
90
|
+
- **Linux / macOS**: build it from source:
|
|
91
|
+
```sh
|
|
92
|
+
git clone https://github.com/rtklibexplorer/RTKLIB
|
|
93
|
+
cd RTKLIB/app/consapp/rnx2rtkp/gcc && make && sudo make install
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Check it with `rnx2rtkp -?`. If it is missing, `run_rnx2rtkp` raises an error with these
|
|
97
|
+
instructions. The rest of gnsskit (RINEX tools, `read_pos`, loop closures, network adjustment,
|
|
98
|
+
reference systems) is pure Python and works without RTKLIB, e.g. on baselines computed elsewhere.
|
|
99
|
+
|
|
100
|
+
## Example
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from gnsskit import RtkConfig, read_pos, run_rnx2rtkp
|
|
104
|
+
|
|
105
|
+
config = RtkConfig(posmode="static", navsys="GEC", solformat="llh").with_base_llh(46.2, 9.8, 2300.0)
|
|
106
|
+
pos_file = run_rnx2rtkp(rover_obs, base_obs, [nav], config, "out.pos")
|
|
107
|
+
pos = read_pos(pos_file)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
See [example/](https://github.com/franioli/gnsskit/tree/main/example) for complete static, kinematic and network adjustment examples.
|
|
111
|
+
|
|
112
|
+
## Contributing
|
|
113
|
+
|
|
114
|
+
Issues are welcome on [GitHub](https://github.com/franioli/gnsskit/issues). To contribute code:
|
|
115
|
+
|
|
116
|
+
1. Fork the repository on GitHub and clone your fork:
|
|
117
|
+
```sh
|
|
118
|
+
git clone https://github.com/<your-username>/gnsskit && cd gnsskit
|
|
119
|
+
git checkout -b my-feature
|
|
120
|
+
```
|
|
121
|
+
2. Set up the environment, make your changes and check them:
|
|
122
|
+
```sh
|
|
123
|
+
uv sync # environment with the dev dependencies (incl. ruff)
|
|
124
|
+
uv run pytest # tests
|
|
125
|
+
uv run ruff format . # format the code
|
|
126
|
+
uv run ruff check --fix . # lint, fixing what can be fixed automatically
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
3. Push the branch to your fork and open a pull request against `main` of
|
|
130
|
+
`franioli/gnsskit`.
|
|
131
|
+
|
|
132
|
+
## Releasing a new version
|
|
133
|
+
|
|
134
|
+
For the current maintainers only (it needs write access to the repository and to the PyPI
|
|
135
|
+
project).
|
|
136
|
+
|
|
137
|
+
Publishing a GitHub release runs [`.github/workflows/publish.yml`](.github/workflows/publish.yml),
|
|
138
|
+
which checks that the tag matches the version, runs the tests, builds and uploads to PyPI:
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
uv version --bump patch # or minor / major: updates pyproject.toml
|
|
142
|
+
uv run pytest
|
|
143
|
+
git commit -am "Release $(uv version --short)" && git push
|
|
144
|
+
gh release create "v$(uv version --short)" --generate-notes # tag + release -> PyPI
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`gh release create` creates the tag on the pushed commit; without the GitHub CLI, push a tag
|
|
148
|
+
(`git tag -a vX.Y.Z -m "gnsskit X.Y.Z" && git push origin vX.Y.Z`) and create the release from it
|
|
149
|
+
on GitHub. PyPI never accepts the same version twice.
|
|
150
|
+
|
|
151
|
+
One-time setup of the automatic upload (PyPI Trusted Publishing, no token): on pypi.org, project
|
|
152
|
+
gnsskit -> Settings -> Publishing -> add a GitHub publisher with owner `franioli`, repository
|
|
153
|
+
`gnsskit`, workflow `publish.yml` and environment `pypi`.
|
|
154
|
+
|
|
155
|
+
Manual upload, if needed, with a project-scoped token kept outside the repository:
|
|
156
|
+
|
|
157
|
+
```sh
|
|
158
|
+
rm -rf dist && uv build
|
|
159
|
+
UV_PUBLISH_TOKEN=$(cat ~/.config/pypi/gnsskit.token) uv publish
|
|
160
|
+
```
|
gnsskit-0.4.2/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# gnsskit
|
|
2
|
+
|
|
3
|
+
Shared tools for post-processing GNSS data with [RTKLIB](https://www.rtklib.com/) `rnx2rtkp`, used by
|
|
4
|
+
[djippk](https://github.com/franioli/djippk) (drone PPK) and [stopgo](https://github.com/franioli/stopgo)
|
|
5
|
+
(stop-and-go surveys).
|
|
6
|
+
|
|
7
|
+
> [!IMPORTANT]
|
|
8
|
+
> **RTKLIB is not included and must be installed separately.** gnsskit runs the RTKLIB
|
|
9
|
+
> command-line program `rnx2rtkp` (the CLI of RTKPOST) for the GNSS processing; `pip`/`uv` do
|
|
10
|
+
> not install it. See [RTKLIB](#rtklib-required-separately) below.
|
|
11
|
+
|
|
12
|
+
- **RTKLIB wrappers** (`gnsskit.rtklib`): `RtkConfig`, a typed, immutable set of `rnx2rtkp` options
|
|
13
|
+
(`from_file`, `updated`, `with_options`, `with_base_llh`, `write`); `run_rnx2rtkp` and `find_rnx2rtkp`;
|
|
14
|
+
`read_pos` (llh, xyz and enu `.pos` files).
|
|
15
|
+
- **RINEX** (`gnsskit.rinex`): `rinex_span`, `header_llh`, `trim_rinex`; inspection with `obs_summary`
|
|
16
|
+
(span, sampling, gaps, satellites), `read_visibility` and `plot_visibility` (RTKPLOT-style satellite
|
|
17
|
+
visibility, needs the `plot` extra).
|
|
18
|
+
- **Static** (`gnsskit.static`): `solve_static` (one solution over a time window), `process_baseline`
|
|
19
|
+
(static baselines with covariance), baseline IO and `loop_closures` (misclosure of every triangle of baselines); least-squares adjustment of a redundant baseline
|
|
20
|
+
network in `gnsskit.static.network` (needs the `network` extra).
|
|
21
|
+
- **Kinematic** (`gnsskit.kinematic`): trajectory interpolation and averaging.
|
|
22
|
+
- **Reference systems** (`gnsskit.refsys`): GPST/UTC, ellipsoids, ECEF/geodetic conversions and
|
|
23
|
+
`ENUFrame`, a local east-north-up frame at a point (points, vectors and covariances, both ways).
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
With [uv](https://docs.astral.sh/uv/) (recommended), in your project:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
uv add gnsskit # library
|
|
31
|
+
uv add "gnsskit[network]" # + network adjustment (scipy, pyproj)
|
|
32
|
+
uv add "gnsskit[network,plot]" # + satellite visibility plots (matplotlib)
|
|
33
|
+
uv add "gnsskit[all]" # every extra
|
|
34
|
+
uv add git+https://github.com/franioli/gnsskit # development version
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
or in an existing environment, `uv pip install gnsskit` (same extras).
|
|
38
|
+
|
|
39
|
+
With pip:
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
pip install gnsskit
|
|
43
|
+
pip install "gnsskit[all]" # with every extra
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### RTKLIB (required separately)
|
|
47
|
+
|
|
48
|
+
The processing functions (`run_rnx2rtkp`, `process_baseline`, `solve_static`) call the RTKLIB
|
|
49
|
+
command-line program **`rnx2rtkp`**, which must be installed on your system and found on your
|
|
50
|
+
`PATH` (or passed with `exe=`); `trim_rinex(use_convbin=True)` also needs RTKLIB `convbin`.
|
|
51
|
+
The [demo5 fork](https://github.com/rtklibexplorer/RTKLIB) is
|
|
52
|
+
recommended; gnsskit is developed with `rnx2rtkp ver.EX 2.5.1`.
|
|
53
|
+
|
|
54
|
+
- **Windows**: download a [demo5 release](https://github.com/rtklibexplorer/RTKLIB/releases),
|
|
55
|
+
unzip it and add the folder with `rnx2rtkp.exe` to your `PATH`.
|
|
56
|
+
- **Linux / macOS**: build it from source:
|
|
57
|
+
```sh
|
|
58
|
+
git clone https://github.com/rtklibexplorer/RTKLIB
|
|
59
|
+
cd RTKLIB/app/consapp/rnx2rtkp/gcc && make && sudo make install
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Check it with `rnx2rtkp -?`. If it is missing, `run_rnx2rtkp` raises an error with these
|
|
63
|
+
instructions. The rest of gnsskit (RINEX tools, `read_pos`, loop closures, network adjustment,
|
|
64
|
+
reference systems) is pure Python and works without RTKLIB, e.g. on baselines computed elsewhere.
|
|
65
|
+
|
|
66
|
+
## Example
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
from gnsskit import RtkConfig, read_pos, run_rnx2rtkp
|
|
70
|
+
|
|
71
|
+
config = RtkConfig(posmode="static", navsys="GEC", solformat="llh").with_base_llh(46.2, 9.8, 2300.0)
|
|
72
|
+
pos_file = run_rnx2rtkp(rover_obs, base_obs, [nav], config, "out.pos")
|
|
73
|
+
pos = read_pos(pos_file)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
See [example/](https://github.com/franioli/gnsskit/tree/main/example) for complete static, kinematic and network adjustment examples.
|
|
77
|
+
|
|
78
|
+
## Contributing
|
|
79
|
+
|
|
80
|
+
Issues are welcome on [GitHub](https://github.com/franioli/gnsskit/issues). To contribute code:
|
|
81
|
+
|
|
82
|
+
1. Fork the repository on GitHub and clone your fork:
|
|
83
|
+
```sh
|
|
84
|
+
git clone https://github.com/<your-username>/gnsskit && cd gnsskit
|
|
85
|
+
git checkout -b my-feature
|
|
86
|
+
```
|
|
87
|
+
2. Set up the environment, make your changes and check them:
|
|
88
|
+
```sh
|
|
89
|
+
uv sync # environment with the dev dependencies (incl. ruff)
|
|
90
|
+
uv run pytest # tests
|
|
91
|
+
uv run ruff format . # format the code
|
|
92
|
+
uv run ruff check --fix . # lint, fixing what can be fixed automatically
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
3. Push the branch to your fork and open a pull request against `main` of
|
|
96
|
+
`franioli/gnsskit`.
|
|
97
|
+
|
|
98
|
+
## Releasing a new version
|
|
99
|
+
|
|
100
|
+
For the current maintainers only (it needs write access to the repository and to the PyPI
|
|
101
|
+
project).
|
|
102
|
+
|
|
103
|
+
Publishing a GitHub release runs [`.github/workflows/publish.yml`](.github/workflows/publish.yml),
|
|
104
|
+
which checks that the tag matches the version, runs the tests, builds and uploads to PyPI:
|
|
105
|
+
|
|
106
|
+
```sh
|
|
107
|
+
uv version --bump patch # or minor / major: updates pyproject.toml
|
|
108
|
+
uv run pytest
|
|
109
|
+
git commit -am "Release $(uv version --short)" && git push
|
|
110
|
+
gh release create "v$(uv version --short)" --generate-notes # tag + release -> PyPI
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
`gh release create` creates the tag on the pushed commit; without the GitHub CLI, push a tag
|
|
114
|
+
(`git tag -a vX.Y.Z -m "gnsskit X.Y.Z" && git push origin vX.Y.Z`) and create the release from it
|
|
115
|
+
on GitHub. PyPI never accepts the same version twice.
|
|
116
|
+
|
|
117
|
+
One-time setup of the automatic upload (PyPI Trusted Publishing, no token): on pypi.org, project
|
|
118
|
+
gnsskit -> Settings -> Publishing -> add a GitHub publisher with owner `franioli`, repository
|
|
119
|
+
`gnsskit`, workflow `publish.yml` and environment `pypi`.
|
|
120
|
+
|
|
121
|
+
Manual upload, if needed, with a project-scoped token kept outside the repository:
|
|
122
|
+
|
|
123
|
+
```sh
|
|
124
|
+
rm -rf dist && uv build
|
|
125
|
+
UV_PUBLISH_TOKEN=$(cat ~/.config/pypi/gnsskit.token) uv publish
|
|
126
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "gnsskit"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.2"
|
|
4
4
|
description = "RTKLIB-based GNSS post-processing toolkit: RINEX tools, RTKLIB wrappers, static baselines and network adjustment, kinematic trajectories"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -40,6 +40,11 @@ network = [
|
|
|
40
40
|
"pyproj",
|
|
41
41
|
]
|
|
42
42
|
plot = ["matplotlib"]
|
|
43
|
+
all = [
|
|
44
|
+
"scipy",
|
|
45
|
+
"pyproj",
|
|
46
|
+
"matplotlib",
|
|
47
|
+
]
|
|
43
48
|
|
|
44
49
|
[project.urls]
|
|
45
50
|
Repository = "https://github.com/franioli/gnsskit"
|
|
@@ -48,6 +53,7 @@ Issues = "https://github.com/franioli/gnsskit/issues"
|
|
|
48
53
|
[dependency-groups]
|
|
49
54
|
dev = [
|
|
50
55
|
"pytest",
|
|
56
|
+
"ruff",
|
|
51
57
|
"scipy",
|
|
52
58
|
"pyproj",
|
|
53
59
|
"matplotlib",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "gnsskit"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.2"
|
|
4
4
|
description = "RTKLIB-based GNSS post-processing toolkit: RINEX tools, RTKLIB wrappers, static baselines and network adjustment, kinematic trajectories"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -24,13 +24,14 @@ dependencies = ["numpy", "pandas>=2"]
|
|
|
24
24
|
[project.optional-dependencies]
|
|
25
25
|
network = ["scipy", "pyproj"]
|
|
26
26
|
plot = ["matplotlib"]
|
|
27
|
+
all = ["scipy", "pyproj", "matplotlib"] # every extra above
|
|
27
28
|
|
|
28
29
|
[project.urls]
|
|
29
30
|
Repository = "https://github.com/franioli/gnsskit"
|
|
30
31
|
Issues = "https://github.com/franioli/gnsskit/issues"
|
|
31
32
|
|
|
32
33
|
[dependency-groups]
|
|
33
|
-
dev = ["pytest", "scipy", "pyproj", "matplotlib"]
|
|
34
|
+
dev = ["pytest", "ruff", "scipy", "pyproj", "matplotlib"]
|
|
34
35
|
|
|
35
36
|
[build-system]
|
|
36
37
|
requires = ["uv_build>=0.12.23,<0.13.0"]
|
gnsskit-0.4.0/PKG-INFO
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: gnsskit
|
|
3
|
-
Version: 0.4.0
|
|
4
|
-
Summary: RTKLIB-based GNSS post-processing toolkit: RINEX tools, RTKLIB wrappers, static baselines and network adjustment, kinematic trajectories
|
|
5
|
-
Keywords: gnss,gps,rtklib,ppk,surveying,least-squares
|
|
6
|
-
Author: Francesco Ioli
|
|
7
|
-
Author-email: Francesco Ioli <francesco.ioli@polimi.it>
|
|
8
|
-
License-Expression: MIT
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Science/Research
|
|
12
|
-
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
13
|
-
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Classifier: Typing :: Typed
|
|
19
|
-
Requires-Dist: numpy
|
|
20
|
-
Requires-Dist: pandas>=2
|
|
21
|
-
Requires-Dist: scipy ; extra == 'network'
|
|
22
|
-
Requires-Dist: pyproj ; extra == 'network'
|
|
23
|
-
Requires-Dist: matplotlib ; extra == 'plot'
|
|
24
|
-
Requires-Python: >=3.10
|
|
25
|
-
Project-URL: Repository, https://github.com/franioli/gnsskit
|
|
26
|
-
Project-URL: Issues, https://github.com/franioli/gnsskit/issues
|
|
27
|
-
Provides-Extra: network
|
|
28
|
-
Provides-Extra: plot
|
|
29
|
-
Description-Content-Type: text/markdown
|
|
30
|
-
|
|
31
|
-
# gnsskit
|
|
32
|
-
|
|
33
|
-
Shared tools for post-processing GNSS data with [RTKLIB](https://www.rtklib.com/) `rnx2rtkp`, used by
|
|
34
|
-
[djippk](https://github.com/franioli/djippk) (drone PPK) and [stopgo](https://github.com/franioli/stopgo)
|
|
35
|
-
(stop-and-go surveys).
|
|
36
|
-
|
|
37
|
-
- **RTKLIB wrappers** (`gnsskit.rtklib`): `RtkConfig`, a typed, immutable set of `rnx2rtkp` options
|
|
38
|
-
(`from_file`, `updated`, `with_options`, `with_base_llh`, `write`); `run_rnx2rtkp` and `find_rnx2rtkp`;
|
|
39
|
-
`read_pos` (llh, xyz and enu `.pos` files).
|
|
40
|
-
- **RINEX** (`gnsskit.rinex`): `rinex_span`, `header_llh`, `trim_rinex`; inspection with `obs_summary`
|
|
41
|
-
(span, sampling, gaps, satellites), `read_visibility` and `plot_visibility` (RTKPLOT-style satellite
|
|
42
|
-
visibility, needs the `plot` extra).
|
|
43
|
-
- **Static** (`gnsskit.static`): `solve_static` (one solution over a time window), `process_baseline`
|
|
44
|
-
(static baselines with covariance), baseline IO and `loop_closures` (misclosure of every triangle of baselines); least-squares adjustment of a redundant baseline
|
|
45
|
-
network in `gnsskit.static.network` (needs the `network` extra).
|
|
46
|
-
- **Kinematic** (`gnsskit.kinematic`): trajectory interpolation and averaging.
|
|
47
|
-
- **Reference systems** (`gnsskit.refsys`): GPST/UTC, ellipsoids, ECEF/geodetic conversions and
|
|
48
|
-
`ENUFrame`, a local east-north-up frame at a point (points, vectors and covariances, both ways).
|
|
49
|
-
|
|
50
|
-
## Install
|
|
51
|
-
|
|
52
|
-
```sh
|
|
53
|
-
pip install gnsskit # library
|
|
54
|
-
pip install "gnsskit[network]" # + network adjustment (scipy, pyproj)
|
|
55
|
-
pip install "gnsskit[network,plot]" # + satellite visibility plots (matplotlib)
|
|
56
|
-
pip install git+https://github.com/franioli/gnsskit # development version
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
`rnx2rtkp` is not installed by pip. Build the [demo5 fork](https://github.com/rtklibexplorer/RTKLIB) and put it on
|
|
60
|
-
your `PATH`; if it is missing, `run_rnx2rtkp` raises an error with instructions. Developed with `rnx2rtkp ver.EX 2.5.1`.
|
|
61
|
-
|
|
62
|
-
## Example
|
|
63
|
-
|
|
64
|
-
```python
|
|
65
|
-
from gnsskit import RtkConfig, read_pos, run_rnx2rtkp
|
|
66
|
-
|
|
67
|
-
config = RtkConfig(posmode="static", navsys="GEC", solformat="llh").with_base_llh(46.2, 9.8, 2300.0)
|
|
68
|
-
pos_file = run_rnx2rtkp(rover_obs, base_obs, [nav], config, "out.pos")
|
|
69
|
-
pos = read_pos(pos_file)
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
See [example/](https://github.com/franioli/gnsskit/tree/main/example) for complete static, kinematic and network adjustment examples.
|
gnsskit-0.4.0/README.md
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# gnsskit
|
|
2
|
-
|
|
3
|
-
Shared tools for post-processing GNSS data with [RTKLIB](https://www.rtklib.com/) `rnx2rtkp`, used by
|
|
4
|
-
[djippk](https://github.com/franioli/djippk) (drone PPK) and [stopgo](https://github.com/franioli/stopgo)
|
|
5
|
-
(stop-and-go surveys).
|
|
6
|
-
|
|
7
|
-
- **RTKLIB wrappers** (`gnsskit.rtklib`): `RtkConfig`, a typed, immutable set of `rnx2rtkp` options
|
|
8
|
-
(`from_file`, `updated`, `with_options`, `with_base_llh`, `write`); `run_rnx2rtkp` and `find_rnx2rtkp`;
|
|
9
|
-
`read_pos` (llh, xyz and enu `.pos` files).
|
|
10
|
-
- **RINEX** (`gnsskit.rinex`): `rinex_span`, `header_llh`, `trim_rinex`; inspection with `obs_summary`
|
|
11
|
-
(span, sampling, gaps, satellites), `read_visibility` and `plot_visibility` (RTKPLOT-style satellite
|
|
12
|
-
visibility, needs the `plot` extra).
|
|
13
|
-
- **Static** (`gnsskit.static`): `solve_static` (one solution over a time window), `process_baseline`
|
|
14
|
-
(static baselines with covariance), baseline IO and `loop_closures` (misclosure of every triangle of baselines); least-squares adjustment of a redundant baseline
|
|
15
|
-
network in `gnsskit.static.network` (needs the `network` extra).
|
|
16
|
-
- **Kinematic** (`gnsskit.kinematic`): trajectory interpolation and averaging.
|
|
17
|
-
- **Reference systems** (`gnsskit.refsys`): GPST/UTC, ellipsoids, ECEF/geodetic conversions and
|
|
18
|
-
`ENUFrame`, a local east-north-up frame at a point (points, vectors and covariances, both ways).
|
|
19
|
-
|
|
20
|
-
## Install
|
|
21
|
-
|
|
22
|
-
```sh
|
|
23
|
-
pip install gnsskit # library
|
|
24
|
-
pip install "gnsskit[network]" # + network adjustment (scipy, pyproj)
|
|
25
|
-
pip install "gnsskit[network,plot]" # + satellite visibility plots (matplotlib)
|
|
26
|
-
pip install git+https://github.com/franioli/gnsskit # development version
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
`rnx2rtkp` is not installed by pip. Build the [demo5 fork](https://github.com/rtklibexplorer/RTKLIB) and put it on
|
|
30
|
-
your `PATH`; if it is missing, `run_rnx2rtkp` raises an error with instructions. Developed with `rnx2rtkp ver.EX 2.5.1`.
|
|
31
|
-
|
|
32
|
-
## Example
|
|
33
|
-
|
|
34
|
-
```python
|
|
35
|
-
from gnsskit import RtkConfig, read_pos, run_rnx2rtkp
|
|
36
|
-
|
|
37
|
-
config = RtkConfig(posmode="static", navsys="GEC", solformat="llh").with_base_llh(46.2, 9.8, 2300.0)
|
|
38
|
-
pos_file = run_rnx2rtkp(rover_obs, base_obs, [nav], config, "out.pos")
|
|
39
|
-
pos = read_pos(pos_file)
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
See [example/](https://github.com/franioli/gnsskit/tree/main/example) for complete static, kinematic and network adjustment examples.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|