{"id":37079511,"url":"https://github.com/kschweiger/track_analyzer","last_synced_at":"2026-01-14T09:37:21.161Z","repository":{"id":46298016,"uuid":"514852171","full_name":"kschweiger/track_analyzer","owner":"kschweiger","description":"Toolbox for analyzing and visualizing geo data tracks","archived":false,"fork":false,"pushed_at":"2026-01-10T11:59:32.000Z","size":86765,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-11T03:43:13.778Z","etag":null,"topics":["analytics","gps-data","gps-tracking","gpx","visualization"],"latest_commit_sha":null,"homepage":"https://kschweiger.github.io/track_analyzer/","language":"Python","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/kschweiger.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2022-07-17T13:32:29.000Z","updated_at":"2025-10-30T22:07:58.000Z","dependencies_parsed_at":"2023-10-05T01:40:53.473Z","dependency_job_id":"52ca6703-055c-4b58-8935-1d109526cba9","html_url":"https://github.com/kschweiger/track_analyzer","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/kschweiger/track_analyzer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kschweiger%2Ftrack_analyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kschweiger%2Ftrack_analyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kschweiger%2Ftrack_analyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kschweiger%2Ftrack_analyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kschweiger","download_url":"https://codeload.github.com/kschweiger/track_analyzer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kschweiger%2Ftrack_analyzer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"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":["analytics","gps-data","gps-tracking","gpx","visualization"],"created_at":"2026-01-14T09:37:20.444Z","updated_at":"2026-01-14T09:37:21.149Z","avatar_url":"https://github.com/kschweiger.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Testing](https://github.com/kschweiger/track_analyzer/actions/workflows/test.yml/badge.svg)](https://github.com/kschweiger/track_analyzer/actions/workflows/test.yml)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/geo-track-analyzer)\n![PyPI - License](https://img.shields.io/pypi/l/geo-track-analyzer)\n![PyPI - Version](https://img.shields.io/pypi/v/geo-track-analyzer)\n\n\n# Track analyzer\n\nThe focus of this package lies on analyzing and visualizing tracks of cycling or similar activities. Depending on the usecase settings like `stopped_speed_threshold` or `max_speed_percentile` may not be appropriate.\n\nInstalling the package with **cli** extra, I.e. using `pip install geo-track-analyzer[cli]`, add utility tools. See the [documentation](https://kschweiger.github.io/track_analyzer/cli/) for details.\n\n## From files\n\nTracks my be initialized from ``.gpx`` and ``.fit`` files using the ``GPXFileTrack`` and ``FITTrack`` object, respectively.\n\n\n## Programmatically\n\nYou can instanciate tracks programmatically inside your code using the `PyTrack` class.\n\n```python\nPyTrack(\n        points: list[tuple[float, float]] = ...,\n        elevations: None | list[float] = ...,\n        times: None | list[datetime] = ...,\n        heartrate: None | list[int] = None,\n        cadence: None | list[int] = None,\n        power: None | list[int] = None,\n    )\n```\n## Extracting track data\n\nThe data of the track can be extracted into a pandas DataFrame object with the columns:\n\n* **latitude**: Track point latitude value\n* **longitude**: Track point longitude value\n* **elevation**: Track point elevation value\n* **speed**: Speed in m/s calculated relative to previous point. Requires time to be present in track.\n* **distance**: Distance in m relative to previous point\n* **heartrate**: Heartrate in bpm (if present in input)\n* **cadence**: Cadence in rmp(if present in input)\n* **power**: Power in W (if present in input)\n* **time**: Time in seconds relative to previous point. Time must be present in track.\n* **cum_time**: Cummulated time of the track/segment in seconds.  Requires time to be present in track.\n* **cum_time_moving**: Cummulated moving time of the track/segment in seconds.  Requires time to be present in track.\n* **cum_distance**: Cummulated distance in track/segement in meters.\n* **cum_distance_moving**:  Cummulated moving distance in track/segement in meters.\n* **cum_distance_stopped**:  Cummulated stopped distance in track/segement in meters.\n* **moving**: Bool flag specifing if the `stopped_speed_threshold` was exceeded for the point.\n\nBecause some values are relative to previous points, the first point in the segment is not represented in this dataframe.\n\n----------------\n\nFurthermore an summary of the segments and tracks can be generated in the form of a `SegmentOverview` containing:\n\n* Time in seconds (moving and totoal)\n* Distance in meters and km (moving and totoal)\n* Maximum and average velocity in m/s and km/h\n* Maximum and minimum elevation in meters\n* Uphill and downhill elevation in meters\n\n## Visualizing the track\n\nVisualizations of a track can be generated via the `plot` method and the ``kind`` parameter. See [documentation](https://kschweiger.github.io/track_analyzer/visualizations/) for further details and examples how to use the visualizations.\n\n## Extras\n\nThe following extras are provided by the lib and may be installed additionally:\n\n- **cli**: Adds cli tools for converting fit files to gpx files (`extract-fit-track`) and updating the elevation in a gpx file with via api (`enhance-elevation`)\n- **postgis**: Add functions for integrating with a PostGIS instance provided in the `geo_track_analyzer.postgis` module\n- **full**: Install package will all extras\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkschweiger%2Ftrack_analyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkschweiger%2Ftrack_analyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkschweiger%2Ftrack_analyzer/lists"}