/// <summary> /// 指定ファイルに含まれる測位情報を返す /// </summary> /// <returns>測位情報履歴</returns> public PositioningInfos GetPositioningResults(string fname) { PositioningInfos ans = new PositioningInfos(); if (System.IO.File.Exists(fname)) { using (System.IO.StreamReader sr = new System.IO.StreamReader(fname)) { while (sr.EndOfStream == false) // 最後まで読み込む { string line = sr.ReadLine(); // 1行取得 var info = this.Parse(line); if (info!= null) ans.Add(info); } } } return ans; }
/// <summary> /// GPGGAをトリガにして、タイミングごとにまとめた測位情報を返す /// <para>NMEAはセンテンスの出力順序を規定していないので、もしかすると時刻と測位位置がずれるかもしれない。</para> /// </summary> /// <returns>測位情報履歴</returns> public PositioningInfos GetPositioningResults() { PositioningInfos ans = new PositioningInfos(); PositioningInfo pos = new PositioningInfo(); if (this.IsOpen) { for (int i = 0; i < this.text.Length; i++) { string line = this.text[i]; // 1行分データを取得 string[] field = line.Split(','); // スプリットでカンマを使って区切る if (GGA.CheckMatch(line)) { pos = GGA.Parse(line); ans.Add(pos); } else if (ZDA.CheckMatch(line)) { pos.Time = ZDA.Parse(line); } } } return ans; }
/// <summary> /// GGAから緯度・経度を配列で取得する /// </summary> /// <returns>座標を表すBlh構造体の配列</returns> public Blh[] GetPositions() { PositioningInfos ans = new PositioningInfos(); if (this.IsOpen) { for (int i = 0; i < this.text.Length; i++) { string line = this.text[i]; // 1行分データを取得 string[] field = line.Split(','); // スプリットでカンマを使って区切る if (field[0] == "$GPGGA") { PositioningInfo pos = GGA.Parse(line); ans.Add(pos); } } } return ans.GetPositions(); }
/// <summary> /// ZDAから時刻データ列のみを取得する /// GGAのトリガはないのでGetPositioningResults()とは時刻がずれる可能性がある。 /// 日付も考慮してみる。 /// </summary> /// <returns>測位情報履歴に含まれる時刻情報を配列にしたもの</returns> public DateTime[] GetDateTimes() { PositioningInfos ans = new PositioningInfos(); if (this.IsOpen) { for (int i = 0; i < this.text.Length; i++) { string line = this.text[i]; // 1行分データを取得 string[] field = line.Split(','); // スプリットでカンマを使って区切る if (field[0] == "$GPZDA") { PositioningInfo pos = new PositioningInfo(); DateTime time = ZDA.Parse(line); pos.Time = time; ans.Add(pos); } } } return ans.GetTimes(); }