为什么我的 GPX 上传没有显示在我的 Strava 仪表板上?
Why my GPX uploads don't show up on my Strava dashboard?
我正在开发一款移动应用程序,它能够记录室内骑行的 GPS 数据,就像运动员绕赛车场转圈一样。根据动感单车提供的速度测量值计算 GPS 点相对容易(与任意 GPS 路线相比)。
该应用程序正在使用 Strava API 以 GPX 格式上传我记录的活动(gpx.gz 更准确地说是为了加快速度)。该应用程序获取范围为 "activity:write"
的 OAuth
令牌。上传 POST returns 201 并且上传很快完成,并返回 200 成功代码。然而,在我查看我的 Strava 用户仪表板后,没有 activity 出现。当我尝试通过 Strava 的 Swagger API 游乐场查看上述活动时,它告诉我“未找到记录”。
curl -X GET "https://www.strava.com/api/v3/activities/4381960409" -H "accept: application/json" -H "authorization: Bearer zzzzzzzzzzzzzzzzzzzzzzzzzzzz"
https://www.strava.com/api/v3/activities/4381960409
{
"message": "Record Not Found",
"errors": [
{
"resource": "Activity",
"field": "id",
"code": "invalid"
}
]
}
示例 activity “迷失在以太中”的 ID:4381670165、4381744693、4381960409。
我的问题是我没有任何关于可能出错的调试信息。我收到了成功代码,但是这些活动从未真正实现过。此外,我无法通过他们的 Swagger 检查上传的状态,因为那里的 OAuth 令牌只有读取权限。
因为我正在生成 GPX 文件,所以我通过手动上传来测试它们。第一个作为虚拟骑行 (https://www.strava.com/activities/4094942758) and the second one as a Ride tagged as Indoor cycling (https://www.strava.com/activities/4094974788)。它们都没有显示任何 GPS 数据。但是文件包含数据。
所以 GPX 文件可能有问题?这是两个:https://drive.google.com/drive/folders/1dkUvrLxW2r3tvQqvoqAkOB9998N9uLn7?usp=sharing
该应用程序是用 Flutter 编写的,并使用了我的 strava_flutter
和 rw_tcx
.
的派生词
final stravaService = Get.find<StravaService>();
await stravaService.login();
final records = await _database.recordDao.findAllActivityRecords(activity.id);
final statusCode = await stravaService.upload(activity, records);
if (statusCode == statusOk) {
activity.uploaded = true;
await _database.activityDao.updateActivity(activity);
}
正如我提到的,它成功完成,上传 POST 然后返回 200,这是 strava_flutter 的核心。
我犯了很多错误:
- 我正在处理多种文件格式(FIT、GPX、TCX),我上传的实际文件是 TCX。感谢 Strava 开发人员,该系统能够优雅地吞下它并从 TCX 中提取信息,没有 return 错误代码。很流畅
- GPS不显示的主要原因:我调换了lat-lon坐标。不幸的是,这也会让人感到困惑,尤其是当有人累了的时候。 https://macwright.com/lonlat/ After some additional corrections the GPS now shows: https://www.strava.com/activities/4104607928
我正在开发一款移动应用程序,它能够记录室内骑行的 GPS 数据,就像运动员绕赛车场转圈一样。根据动感单车提供的速度测量值计算 GPS 点相对容易(与任意 GPS 路线相比)。
该应用程序正在使用 Strava API 以 GPX 格式上传我记录的活动(gpx.gz 更准确地说是为了加快速度)。该应用程序获取范围为 "activity:write"
的 OAuth
令牌。上传 POST returns 201 并且上传很快完成,并返回 200 成功代码。然而,在我查看我的 Strava 用户仪表板后,没有 activity 出现。当我尝试通过 Strava 的 Swagger API 游乐场查看上述活动时,它告诉我“未找到记录”。
curl -X GET "https://www.strava.com/api/v3/activities/4381960409" -H "accept: application/json" -H "authorization: Bearer zzzzzzzzzzzzzzzzzzzzzzzzzzzz"
https://www.strava.com/api/v3/activities/4381960409
{
"message": "Record Not Found",
"errors": [
{
"resource": "Activity",
"field": "id",
"code": "invalid"
}
]
}
示例 activity “迷失在以太中”的 ID:4381670165、4381744693、4381960409。
我的问题是我没有任何关于可能出错的调试信息。我收到了成功代码,但是这些活动从未真正实现过。此外,我无法通过他们的 Swagger 检查上传的状态,因为那里的 OAuth 令牌只有读取权限。
因为我正在生成 GPX 文件,所以我通过手动上传来测试它们。第一个作为虚拟骑行 (https://www.strava.com/activities/4094942758) and the second one as a Ride tagged as Indoor cycling (https://www.strava.com/activities/4094974788)。它们都没有显示任何 GPS 数据。但是文件包含数据。
所以 GPX 文件可能有问题?这是两个:https://drive.google.com/drive/folders/1dkUvrLxW2r3tvQqvoqAkOB9998N9uLn7?usp=sharing
该应用程序是用 Flutter 编写的,并使用了我的 strava_flutter
和 rw_tcx
.
final stravaService = Get.find<StravaService>();
await stravaService.login();
final records = await _database.recordDao.findAllActivityRecords(activity.id);
final statusCode = await stravaService.upload(activity, records);
if (statusCode == statusOk) {
activity.uploaded = true;
await _database.activityDao.updateActivity(activity);
}
正如我提到的,它成功完成,上传 POST 然后返回 200,这是 strava_flutter 的核心。
我犯了很多错误:
- 我正在处理多种文件格式(FIT、GPX、TCX),我上传的实际文件是 TCX。感谢 Strava 开发人员,该系统能够优雅地吞下它并从 TCX 中提取信息,没有 return 错误代码。很流畅
- GPS不显示的主要原因:我调换了lat-lon坐标。不幸的是,这也会让人感到困惑,尤其是当有人累了的时候。 https://macwright.com/lonlat/ After some additional corrections the GPS now shows: https://www.strava.com/activities/4104607928