{"id":41105676,"url":"https://github.com/morphism/gpelements","last_synced_at":"2026-01-22T15:18:40.119Z","repository":{"id":57652007,"uuid":"321718508","full_name":"morphism/gpelements","owner":"morphism","description":"Tool for working with element sets","archived":false,"fork":false,"pushed_at":"2020-12-18T18:32:07.000Z","size":108,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-06-20T15:41:53.266Z","etag":null,"topics":["celestrak","omm","satellites","tle"],"latest_commit_sha":null,"homepage":"","language":"Go","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/morphism.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}},"created_at":"2020-12-15T16:03:57.000Z","updated_at":"2021-11-15T13:46:26.000Z","dependencies_parsed_at":"2022-08-28T02:23:04.317Z","dependency_job_id":null,"html_url":"https://github.com/morphism/gpelements","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/morphism/gpelements","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morphism%2Fgpelements","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morphism%2Fgpelements/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morphism%2Fgpelements/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morphism%2Fgpelements/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/morphism","download_url":"https://codeload.github.com/morphism/gpelements/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/morphism%2Fgpelements/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28665037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T14:01:31.714Z","status":"ssl_error","status_checked_at":"2026-01-22T13:59:23.143Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["celestrak","omm","satellites","tle"],"created_at":"2026-01-22T15:18:40.011Z","updated_at":"2026-01-22T15:18:40.106Z","avatar_url":"https://github.com/morphism.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"_Warning: This code is experimental; please see the [LICENSE](LICENSE)_.\n\nA tool to convert to and from various general perturbations orbital\ndata formats.  See [this\ndiscussion](https://celestrak.com/NORAD/documentation/gp-data-formats.php)\nfor some background.\n\nSupported formats:\n\n1. TLE\n1. [OMM](https://public.ccsds.org/Pubs/502x0b2c1e2.pdf) XML\n1. [OMM](https://public.ccsds.org/Pubs/502x0b2c1e2.pdf) KVN\n1. JSON\n1. CSV\n\nCurrently not all round trips starting from Celestrak data are\nperfect.  (Floating point number formatting is only one class of\nchallenge there.)\n\nThis tool can also perform SGP4 propagation (using [this\nimplementation](https://github.com/morphism/sgp4go)), object renaming,\nand random walks.\n\n## Usage\n\n```\nUsage: tletool transform|prop|on-orbit|walk|rename|sample|random ...\n\nSubcommands:\n\n  transform:\n\n  -buf-size int\n    \tBuffer size (default 4096)\n  -help\n    \tJust get help\n  -tolerate\n    \tLog errors instead of stopping\n  -emit string\n    \tOutput represention: csv|csvh|json|jsonarray|tle|kvn|xml (default \"csv\")\n\n\n  csvh emits CSV output with a header line.\n\n  json emits each element set as a single line of JSON.\n\n  jsonarray emits an array of element sets as one big blob of JSON.\n\n\n  prop: Propagate\n\n  -duration duration\n    \tDuration of propagation (instead of -to)\n  -from string\n    \tPropagation start time (default \"2020-12-18T16:42:22.644764256Z\")\n  -higher-precision\n    \tHigher-precision (as able) (default true)\n  -interval duration\n    \tPropagation end time (default 10m0s)\n  -to string\n    \tPropagation end time (default \"2020-12-18T17:42:22.644764256Z\")\n\n  on-orbit: Filter for on-orbit\n\n  -from string\n    \tPropagation start time (default \"2020-12-18T16:42:22.644764256Z\")\n  -interval duration\n    \tPropagation end time (default 10m0s)\n  -to string\n    \tPropagation end time (default \"2020-12-18T17:42:22.644764256Z\")\n\n  walk: Random walk\n\n  -inc-set\n    \tIncrement element set number (default true)\n  -max-steps int\n    \tMaximum number of steps (default 3)\n  -min-steps int\n    \tMinimum number of steps (default 1)\n  -reset-epoch\n    \tSet Epoch to now (default true)\n  -seed int\n    \tRNG seed (defaults to current time in ns) (default 1608309742644776587)\n\n  rename: Update name, catalog number\n\n  -clear\n    \tRemove original name (suffix)\n  -state int\n    \tNext catalog number in Alpha-5 A range\n\n\n  Sample: Sampled based on hash of name+id+num\n\n  -mod int\n    \tSampling hash modulus (default 10)\n  -rem int\n    \tSampling hash remainder\n\n\n  Random: Emit a percentage of the input\n\n  -percent float\n    \tApproximate percent of lines to emit\n\n```\n\n(The default timestamps are acutally the current time.)\n\n## Examples\n\nWith [this\ndata](https://www.space-track.org/basicspacedata/query/class/gp/EPOCH/%3Enow-30/NORAD_CAT_ID/270000--339999/orderby/NORAD_CAT_ID/format/json)\nfrom [`space-track.org`](https://www.space-track.org/):\n\n```Shell\n# We'll needlessly exercise our transformations.\ncat tmp/now.json |\n    tletool transform -emit xml |\n    tletool transform -emit kvn |\n    tletool transform -emit csv |\n    tletool transform -emit json |\n    tletool prop |\n    tail -4 |\n    jq -r -c '{\"NORAD\":.Norad,\"LLA\":.LLA}'\n\n```\n\ngives\n\n```\n{\"NORAD\":270288,\"LLA\":{\"Lat\":65.84531,\"Lon\":-14.565547,\"Alt\":1292.6202}}\n{\"NORAD\":270288,\"LLA\":{\"Lat\":33.46682,\"Lon\":-17.518644,\"Alt\":1285.534}}\n{\"NORAD\":270288,\"LLA\":{\"Lat\":0.9417589,\"Lon\":-20.208746,\"Alt\":1283.9185}}\n{\"NORAD\":270288,\"LLA\":{\"Lat\":-31.554588,\"Lon\":-22.894846,\"Alt\":1292.9807}}\n```\n\nWith\n[data](https://celestrak.com/NORAD/elements/gp.php?GROUP=STATIONS\u0026FORMAT=KVN)\nfrom [Celestrak](https://celestrak.com):\n\n```Shell\nif [ ! -f data/test.kvn ]; then\n\tcurl 'https://celestrak.com/NORAD/elements/gp.php?GROUP=STATIONS\u0026FORMAT=KVN' \u003e data/test.kvn\nfi\n\n# We'll needlessly exercise our transformations, and we'll keep \n# the intermediate output.\n\ncat data/test.kvn |\n  tletool transform -emit json | \n  tee data.json | \n  tletool transform -emit xml | \n  tee data.xml | \n  tletool transform -emit csv | \n  tee data.csv | \n  tletool transform -emit kvn | \n  tee data.kvn | \n  tletool on-orbit | \n  tee on-orbit.json |\n  tletool prop | \n  tee prop.json |\n  head -1 | \n  jq -r .\n```\n\nresults in something that looks like\n\n```JSON\n{\n  \"Age\": 32705.934428877,\n  \"At\": \"2020-12-14T21:29:18.874844877Z\",\n  \"Id\": \"1998-067A\",\n  \"LLA\": {\n    \"Lat\": 17.104858,\n    \"Lon\": 87.40023,\n    \"Alt\": 420.42767\n  },\n  \"Name\": \"ISS (ZARYA)\",\n  \"Norad\": 25544,\n  \"State\": {\n    \"V\": {\n      \"X\": -4.775169,\n      \"Y\": -2.1982052,\n      \"Z\": -5.5731597\n    },\n    \"ECI\": {\n      \"X\": -4493.6265,\n      \"Y\": 4695.992,\n      \"Z\": 1987.5846\n    }\n  }\n}\n```\n\nin addition to several intermediate output files.\n\nThe example above uses [jq](https://stedolan.github.io/jq/).\n\n## References\n\n1. [Consultative Committee for Space Data Systems (CCSDS)](https://public.ccsds.org/default.aspx)\n\n1. [Recommended Standard CCSDS 502.0-B-2](https://public.ccsds.org/Pubs/502x0b2c1e2.pdf)\n\n1. [Celestrak's discussion of element set formats](https://celestrak.com/NORAD/documentation/gp-data-formats.php)\n\n1. The [SGP4 implementation used here](https://github.com/morphism/sgp4go)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorphism%2Fgpelements","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorphism%2Fgpelements","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorphism%2Fgpelements/lists"}