예제 #1
0
 /// <summary>
 /// NMEA読み出し機能およびRectangleFieldクラスのテスト
 /// <para>ダイアログを利用してNMEAファイルを開きます。</para>
 /// <para>NMEA読み取り後に、測位結果を配列化して測位結果全体が収まるRectangleFieldオブジェクトを生成します。</para>
 /// <para>未測位データは除いています。</para>
 /// </summary>
 /// <returns>測位データ全体を覆う長方形領域情報</returns>
 public static RectangleField ReadNmeaToRectangleFeild()
 {
     NmeaReader reader = new NmeaReader();
     reader.OpenWithDialog();                            // NMEAファイル読み出し
     Blh[] pos = reader.GetPositions();                  // 測位情報のうちから位置座標のみを取得
     RectangleField field = new RectangleField();
     foreach (Blh x in pos)                              // 最外領域を求める
     {
         if (x.B != 0.0 && x.L != 0.0) field.Set(x);     // 未測位データは除く
     }
     return field;
 }
예제 #2
0
        /// <summary>
        /// NMEA形式のGPSのログから緯度経度を抜き出し、その地点における標高値をDEMより取得する
        /// <para>DEMクラスの動作テストです。</para>
        /// <para>GPSの高度測定精度の評価目的もあります。</para>
        /// </summary>
        public static void CombineGpsAndDemHeight()
        {
            DEM dem = new DEM();
            dem.AddDirWithDialog();

            if (dem.Count != 0)
            {
                NmeaReader reader = new NmeaReader();
                reader.OpenWithDialog();                                // NMEAファイル読み出し
                if (reader.IsOpen)
                {
                    var pos = reader.GetPositions();                    // 測位情報のうちから位置座標のみを取得
                    var times = reader.GetDateTimes();                  // 測位情報から時刻情報のみを取得
                    var height = dem.GetHeight(pos);
                    StringBuilder sb = new StringBuilder(5000);         // 予め大きなメモリ容量を確保しておく
                    sb.Append("Time,Longitude,Latitude,H,DEM height").Append(System.Environment.NewLine);
                    for (int i = 0; i < pos.Length && i < times.Length; i++)
                    {
                        if(pos[i].B != 0.0 && pos[i].L != 0.0)          // 比較が目的なので未測位データは除く
                            sb.Append(times[i].ToString()).Append(",").Append(pos[i].ToString()).Append(",").Append(height[i].ToString("0.0")).Append(System.Environment.NewLine);
                    }
                    using (System.IO.StreamWriter fwriter = new System.IO.StreamWriter("CombinedNmeaWithDem.csv", false, Encoding.UTF8))
                    {
                        try
                        {
                            fwriter.Write(sb.ToString());
                        }
                        catch
                        {
                            // エラー処理があれば記述
                        }
                    }
                }
            }
            return;
        }
예제 #3
0
        /// <summary>
        /// Pointクラスのテスト
        /// <para>NMEAファイルから測位点情報を読み出し、KMLへPoint情報として出力します。</para>
        /// </summary>
        public static void ReadNmeaToKmlPoint()
        {
            NmeaReader reader = new NmeaReader();
            reader.OpenWithDialog();                                // NMEAファイル読み出し
            if (reader.IsOpen)
            {
                Blh[] pos = reader.GetPositions();                      // 測位情報のうちから位置座標のみを取得
                DateTime[] times = reader.GetDateTimes();               // 測位情報から時刻情報のみを取得

                if (pos.Length != 0 && times.Length != 0)
                {
                    Point point = new Point(pos[0], Icon.shaded_dot);
                    point.description = reader.FileName;
                    point.AddDescription("0");
                    point.AddDescription(pos[0].ToString());
                    point.AddDescription(times[0].ToString());
                    point.Time = new KML.Time.TimeStamp(times[0]);

                    if (pos.Length >= 1 && times.Length >= 1)
                    {
                        for (int i = 1; i < pos.Length && i < times.Length; i++)
                        {
                            if (!(pos[i].B == 0.0 && pos[i].L == 0.0))  // 未測位分は除く…最初の奴は例外(対処しようとすると結構長くなる)
                            {
                                Point p = new Point(pos[i]);
                                p.description = i.ToString();
                                p.AddDescription(pos[i].ToString());
                                p.AddDescription(times[i].ToString());
                                p.Time = new KML.Time.TimeStamp(times[i]);
                                point.Add(p);
                            }
                        }
                    }

                    // ファイル出力
                    // KML出力はUTF8で出力してください。
                    using (System.IO.StreamWriter fwriter = new System.IO.StreamWriter("NMEAtoPoint.kml", false, Encoding.UTF8))
                    {
                        try
                        {
                            fwriter.Write(point.GetKmlCode());
                        }
                        catch
                        {
                            // エラー処理があれば記述
                        }
                    }
                }
            }
            return;
        }