Fitbitが計測したライドデータとSTRAVAに連携したデータの比較(座標編)

おはようございます。Takum!です。
続いて、緯度・経度情報にも差があるようなので、実際に地図にプロットしてみてみたいと思います。



 地図へのプロットは、Leafletを使います。HTML+JavaScriptで簡単に地図上にラインやピンを落とすことができます。JavaScriptでデータを使うために、作ってあるDataFrameをCSVにします。

df_strava.to_csv('strava.csv')
df_fitbit.to_csv('fitbit.csv')


 出力されたCSVを、JavaScriptで読めるように下記の形に変形します。

2019-01-31 08:22:48,53.1,38.260033,140.8758
[082248,53.1,38.260033,140.8758],

 こういう編集は、サクラエディタ等で正規表現での置換をすると一発です。
^→[
2019-01-31 →空白
:→空白
$→],

 これらをHTMLにコーディングしてやると、実態が見えてきました。

赤いピンがSTRAVA、青いピンがFitbit。
STRAVAの動きに比べてFitbitはなめらかである。
地図の出典は国土地理院。
 赤いピンがSTRAVAで、青いピンがFitbitです。STRAVAのほうが左右にブレているのに対し、青いほうは緩やかに付いて行っているように見えます。各ピンの記録された時刻を見ると、Fitbitのほうが1秒ほど早いタイムスタンプが付いていました。
 このデータから推測されることは、Fitbitの座標は前後数秒間の移動平均を取るなどして、平滑化していそうだということ。それに比べて、STRAVAのほうはダイレクトに座標を保存しているように見えます。
 同じようなアクティビティ記録アプリでもデータの扱いが微妙に異なるんですね。

次はいよいよ走行距離の乖離について調べていきたいと思います。

今回のLeafletを使ったプロットのソースは下記のとおりです。

<!DOCTYPE html>
<html>
・・・
            <div id="mapid" style="width:100%;height:60vh;"></div>
・・・
    <link rel="stylesheet" href="css/leaflet.css" />
    <script src="js/leaflet.js"></script>

    <script type="text/javascript">
    var MAP_URL='https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png';
    var MAP_ATTR='<a href="https://maps.gsi.go.jp/development/ichiran.html">国土地理院</a>';
    var pos = [(初期ビューの緯度), (初期ビューの経度)];
    var blueMarker = L.icon({
    iconUrl:'css/images/marker-icon.png',
    iconSize:[25,41], iconAnchor:[12,20], popupAnchor:[0,-25]});
    var redMarker = L.icon({
    iconUrl:'css/images/marker-icon-red.png',
    iconSize:[25,41], iconAnchor:[12,20], popupAnchor:[0,-25]});

    stravas = [
        [082248,53.1,38.260033,140.8758],・・・・

    ];
    fitbits=[
        [082239,58.7,9394.23,115,38.259937,140.87572],・・・・
    ];
    var mymap = L.map('mapid').setView(pos, 14);
    L.tileLayer(MAP_URL, {
        maxZoom: 20,
        attribution: MAP_ATTR
    }).addTo(mymap);
    for (i=0;i<stravas.length;i++){
     var marker;
     marker = L.marker([stravas[i][2],stravas[i][3]], {draggable:false,icon:redMarker}).addTo(mymap);
     marker.bindPopup(stravas[i][0]+'/'+stravas[i][1]);
    }
    for (i=0;i<fitbits.length;i++){
     var marker;
     marker = L.marker([fitbits[i][4],fitbits[i][5]], {draggable:false,icon:blueMarker}).addTo(mymap);
     marker.bindPopup(fitbits[i][0]+'/'+fitbits[i][1]+'/'+fitbits[i][2]);
    }

    </script>
  </body>
</html>

コメント

このブログの人気の投稿

MS Azure Information Protection を入れたら右クリックの「分類して保護する」がうざい

Zwiftがいきなり楽になってしまった件(顛末)