{"id":50689596,"url":"https://github.com/jclark/convobs-rs","last_synced_at":"2026-06-09T01:34:38.641Z","repository":{"id":362697836,"uuid":"1260044046","full_name":"jclark/convobs-rs","owner":"jclark","description":"Convert between GNSS raw observation formats","archived":false,"fork":false,"pushed_at":"2026-06-05T13:15:07.000Z","size":9426,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T01:34:37.088Z","etag":null,"topics":["gnss","rinex","rtcm","rtk","rust","u-blox","ubx"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jclark.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-05T05:26:28.000Z","updated_at":"2026-06-06T01:17:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jclark/convobs-rs","commit_stats":null,"previous_names":["jclark/convobs-rs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jclark/convobs-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jclark%2Fconvobs-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jclark%2Fconvobs-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jclark%2Fconvobs-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jclark%2Fconvobs-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jclark","download_url":"https://codeload.github.com/jclark/convobs-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jclark%2Fconvobs-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34088013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gnss","rinex","rtcm","rtk","rust","u-blox","ubx"],"created_at":"2026-06-09T01:34:37.973Z","updated_at":"2026-06-09T01:34:38.636Z","avatar_url":"https://github.com/jclark.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# convobs\n\n**convobs** converts raw GNSS observation data emitted by a receiver into a\nRINEX observation file. The resulting file can be sent to a PPP post-processing\nservice such as CSRS-PPP to determine the precise position of the receiver. The\nu-blox UBX-RXM-RAWX and RTCM MSM7 raw formats are supported, and the input\nformat can be auto-detected.\n\n**convobs** also introduces `obsj`, a convenient [JSON Lines](https://jsonlines.org/)\nrepresentation of observation data with RINEX-adjacent semantics, designed for\nprocessing with modern tools such as **jq**. It is supported for both input and\noutput. Each line is one JSON object: a line with a `t` field is an observation,\nand a line without one carries header metadata. The fields mirror RINEX\nconcepts — for example, `sat` and `sig` are RINEX satellite and signal\nidentifiers, and `arc` and `hc` correspond to RINEX loss-of-lock indicator bits.\nFor example:\n\n```\n{\"t\":\"2025-12-17T08:14:06.0080000\",\"sat\":\"G07\",\"sig\":\"1C\",\"pr\":23956830.529584773,\"cp\":125893980.17237933,\"do\":2059.716796875,\"cn0\":34}\n```\n\nSee the [**convobs**(1) man page](docs/convobs.1.md) for the full set of options,\nthe `obsj` field definitions, and the RINEX header metadata format.\n\nA companion command, **diffobs**, compares two observation files (`obsj` or\nRINEX) semantically; run `diffobs --help` for details.\n\nThere is also an implementation in Go that is part of\n[SatPulse](https://satpulse.net/), exposed as the `satpulsetool convobs` command\nand documented in its\n[man page](https://satpulse.net/man/satpulsetool-convobs.1.html). This Rust\nimplementation runs about 5× faster.\n\n## Building\n\nWith a [Rust toolchain](https://rustup.rs/) installed, run `make release`; the\n`convobs` and `diffobs` binaries are written to `target/release`. Run `make` on\nits own to list all targets, or `make install` to install the binaries into\n`~/.cargo/bin`.\n\nThe project is a Cargo workspace of three crates:\n\n- **`obsj`** — the core library: the `obsj` observation model and format, the\n  carrier-phase arc / loss-of-lock logic, a semantic diff, and a self-contained\n  RINEX 3.x reader/writer (the *internal* backend). Optional `rtcm` and `ubx`\n  features add the raw-stream converters.\n- **`rinex-obsj`** — a bridge to the third-party\n  [`rinex`](https://crates.io/crates/rinex) crate (the *external* backend),\n  which adds CRINEX (Hatanaka-compressed) input.\n- **`convobs-cli`** — the `convobs` and `diffobs` binaries.\n\nThe external backend is optional, gated behind the CLI's `rinex-crate` feature.\nThe default build (`make release`) omits it for a lean, fully MIT-licensed\nbinary; `make release-full` (or `make install-full`) enables it, linking the\n`rinex` crate and its MPL-2.0 dependencies and adding CRINEX support.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjclark%2Fconvobs-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjclark%2Fconvobs-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjclark%2Fconvobs-rs/lists"}