#fit #garmin #data #json #output #read #convert

程序+库 rusty-but-fit

读取 Garmin 的 .FIT 文件并将它们输出为 JSON

3 个版本 (破坏性更新)

0.5.0 2024年7月2日
0.4.0 2024年6月21日
0.3.0 2024年6月21日

#692解析器实现

每月31次下载

MIT 许可证

215KB
7K SLoC

Garmin .FIT 解析器

crates.io

一个项目,旨在更好地熟悉 rust-lang。

该工具本身解析 .FIT 文件并将其转换为 JSON 格式的消息。

目前正在进行大量工作...但您已经可以尝试它了。

安装

cargo install rusty-but-fit

命令

Parsing for Garmin's FIT file format

Usage: rusty-but-fit [OPTIONS] --file <FILE> <COMMAND>

Commands:
  summary   Create summary of all messages and their count
  messages  Return messages defined by the -m parameter
  raw       Outputs all messages, incl. unknown messages and invalid fields
  help      Print this message or the help of the given subcommand(s)

Options:
  -f, --file <FILE>     FIT file to parse
  -d                    Debug output (cannot be piped to jq)
  -u, --unknown-fields  Output unknown fields
  -i, --invalid-values  Output invalid values
  -h, --help            Print help
  -V, --version         Print version

示例

summary 命令

输出文件中的消息类型及其数量
rusty-but-fit -f activity2.fit summary
{
  "Lap": 1,
  "Session": 1,
  "Time in zone": 2,
  "GPS Metadata": 1826,
  "Totals": 1,
  "Record": 382,
  "Unknown": 2004,
  "Sport": 1,
  "Training file": 2,
  "Activity": 1,
  "Zones target": 1,
  "Device settings": 1,
  "Connected devices (undocumented)": 1,
  "Event": 7,
  "User profile": 1,
  "Device info": 20,
  "File Id": 1,
  "File creator": 1
}

messages 命令

messages 参数
Return messages defined by the -m parameter

Usage: rusty-but-fit --file <FILE> messages [OPTIONS]

Options:
  -m, --message_type <MESSAGE_TYPE>  Message types as enumerated from 'summary' command. Can be repeated for multiple messages.
  -h, --help                         Print help
获取特定类型的消息
rusty-but-fit -f activity2.fit messages -m "Activity"
{
  "local_timestamp": 1078141854,
  "num_sessions": 1,
  "type": "Manual",
  "event": "Activity",
  "timestamp": 1078138254,
  "event_type": "Stop",
  "total_timer_time": 1717468
}
Record 类型读取位置数据

这可能需要从半圆转换为度。

rusty-but-fit -f activity2.fit messages -m 'Record' | jq --argjson conversion "$((2**31))" '.[].message | {lon: (."position_long" * 180/$conversion), lat: (."position_lat" * 180/$conversion)}'
...
{
  "lon": 10.557905668392777,
  "lat": 52.23186925984919
}
{
  "lon": 10.557780275121331,
  "lat": 52.231866996735334
}
{
  "lon": 10.557699054479599,
  "lat": 52.23186397925019
}
{
  "lon": 10.55741960182786,
  "lat": 52.231861716136336
}
...

依赖项

~2–3MB
~60K SLoC