指定された二つの位置情報間のデータを30秒ごとに補完するには、まず、始点と終点の位置情報と時刻を取得し、それらの間の差を求めます。次に、時間と位置の差を等間隔に分割して、各時点での位置を計算します。
以下のGoプログラムは、始点と終点の情報を基に30秒ごとの位置情報を補完する例です:
package main
import (
"fmt"
"time"
)
// Location は緯度と経度を保持する構造体です
type Location struct {
Lat, Lng float64
}
func main() {
// 初期位置情報
startLocation := Location{Lat: 34.665300, Lng: 135.224100}
endLocation := Location{Lat: 34.664900, Lng: 135.223900}
// 時刻の設定
startTime, _ := time.Parse("2006-01-02 15:04:05", "2023-03-03 07:39:30")
endTime, _ := time.Parse("2006-01-02 15:04:05", "2023-03-03 07:43:30")
// 各差を計算
duration := endTime.Sub(startTime)
latDiff := endLocation.Lat - startLocation.Lat
lngDiff := endLocation.Lng - startLocation.Lng
// 30秒ごとのデータを生成
interval := 30 * time.Second
for t := startTime; t.Before(endTime); t = t.Add(interval) {
fraction := t.Sub(startTime).Seconds() / duration.Seconds()
lat := startLocation.Lat + fraction*latDiff
lng := startLocation.Lng + fraction*lngDiff
fmt.Printf("Lat: %f, Lng: %f %v\n", lat, lng, t.Format("2006-01-02 15:04:05"))
}
}
このプログラムは、指定された時間間隔(この場合は30秒)で始点と終点の間の緯度と経度を計算し、その結果を出力します。始点と終点の間の時間差と距離差に基づき、等間隔に位置情報を補完しています。