【问题标题】:Get Strava Activity polyline altitude获取 Strava Activity 折线高度
【发布时间】:2022-08-02 11:10:03
【问题描述】:

我正在使用 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 调用可用于检索此数据?

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

谢谢!

    标签: strava strava-api-v3


    【解决方案1】:

    我遇到了和你一样的问题(也试图获取 Strava 分段折线的高程数据)并通过使用他们的elevation javascript API 向 Google 的高程服务提出请求来解决。

    如果您想使用 Google 的服务,您需要注册(除非您提出大量请求,否则免费)到 Google 的地图服务以获取 API 密钥,然后引用他们的 js 文件:

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

    然后从 Strava 获取解码的折线,提取坐标并从 Google 请求坐标的高程。这就是我所做的:

    /*
    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
      });
    

    来自 Google 的回复以以下格式返回:

    [
        {
            "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
        }
    ]
    

    【讨论】:

    • 确实不错。我试图避免使用 Google,并希望 Strava 能做到这一点。另一种选择是使用这个:open-elevation.com
    【解决方案2】:

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

    • 时间:TimeStream 的一个实例。
    • distance:DistanceStream 的一个实例。
    • latlng:LatLngStream 的一个实例。
    • altitude:AltitudeStream 的一个实例。
    • velocity_smooth:SmoothVelocityStream 的一个实例。
    • heartrate:HeartrateStream 的一个实例。
    • cadence:CadenceStream 的一个实例。
    • watts:PowerStream 的一个实例。
    • temp:TemperatureStream 的一个实例。
    • moving: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"
    }]
    

    这基本上给了我我所追求的东西。

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 1970-01-01
      • 2019-02-10
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2013-07-05
      • 2021-10-18
      相关资源
      最近更新 更多