获取Strava活动折线高度



我正在使用Strava API的Get-Activity ById端点,该端点返回ActivityDetail对象。

我可以解码多段线,但它只返回每个顶点的lat和lng值。

我解码使用:

import polyline from '@mapbox/polyline';
import { LatLngExpression } from 'leaflet';
export const decodePolyline = (
encodedString: string | undefined,
): LatLngExpression[] => {
if (!encodedString) return [];
const decoded = polyline.decode(encodedString);
return decoded;
};

我也想得到海拔高度,以便绘制海拔图。是否有其他API调用可用于检索此数据?

如果您感兴趣,Imj工作的repo在这里:https://github.com/loanburger/strava-react-app

谢谢!

我找到了这个问题的另一个解决方案,并希望分享这种方法。有一个ActivityStream API可以使用。它接收活动Id和您想要的流类型,然后返回具有您想要的类型的流结果:

  • time:TimeStream的一个实例
  • distance:DistanceStream的实例
  • latlng:LatLngStream的一个实例
  • 海拔高度:AltitudeStream的一个例子
  • velocity_smooth:SmoothVelocityStream的一个实例
  • heartrate:HeartrateStream的一个实例
  • 抑扬顿挫:CadenceStream的一个例子
  • watts:PowerStream的一个实例
  • temp:TemperatureStream的一个实例
  • MovingStream的一个实例
  • grade_smooth:SmoothGradeStream的实例

例如,距离流的样本响应看起来像:

[{
"type" : "distance",
"data" : [ 2.9, 5.8, 8.5, 11.7, 15, 19, 23.2, 28, 32.8, 38.1, 43.8, 49.5 ],
"series_type" : "distance",
"original_size" : 12,
"resolution" : "high"
}]

这基本上给了我想要的东西。

我遇到了与您相同的问题(也试图获取Strava段多段线的高程数据(,并通过使用Google的高程javascript API向其高程服务发出请求来解决。

如果你想使用谷歌的服务,你需要注册(免费,除非你有很多请求(到谷歌的地图服务,以获得API密钥,然后引用他们的js文件:

<script async defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY">
</script>

然后从Strava获得解码的多段线,提取坐标,并从谷歌请求坐标的高程。这就是我所做的:

/*
Get your decoded polyline from Strava (formatted as follows)
[
{
"latitude": 55.13186,
"longitude": -6.0442
},
{
"latitude": 55.13202,
"longitude": -6.04401
}
]
*/
const segmentCoordinates = segmentPolylineDecoded;
// Change polyline into correct format for request to Google
let routeCoordinatesInCorrectFormat = segmentCoordinates.map(function(x) {
return { lat: x.latitude, lng: x.longitude };
});
let elevationData;
const elevator = new google.maps.ElevationService();
elevator
.getElevationAlongPath({
path: routeCoordinatesInCorrectFormat,
samples: 256,
})
.then(({ results }) => {
elevationData = results;
plotElevation();
})
.catch((e) => {
// error
});

谷歌的回应以以下格式返回:

[
{
"elevation": 14.16793346405029,
"location": {
"lat": 55.13186,
"lng": -6.0442
},
"resolution": 610.8129272460938
},
{
"elevation": 14.90726280212402,
"location": {
"lat": 55.1321392922906,
"lng": -6.043826473467345
},
"resolution": 610.8129272460938
}
]

最新更新