我正在使用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
}
]