예제 #1
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;
        }
예제 #2
0
        /// <summary>
        /// フォルダを指定して、走査されたDEMファイルの一覧をKMLファイルへ出力する
        /// <para>DEMクラスのDEM読み込みテストです。</para>
        /// <para>全種類のDEMが種類毎にファイル出力されます。</para>
        /// <para>ファイル名はDEMmaps_nn.kmlです(nnは番号)。</para>
        /// <example>
        /// <code>
        /// GIS.GisTest.SaveDemFileInfoAsKml2();
        /// </code>
        /// </example>
        /// </summary>
        public static void SaveDemFileInfoAsKml2()
        {
            DEM dem = new DEM();
            dem.AddDirWithDialog();

            if (dem.Count != 0)
            {
                dem.SaveDemInfo("DEMmaps");
            }
            return;
        }
예제 #3
0
        /// <summary>
        /// DEMクラスの読み込みテストおよびマネジメント機能のテスト、さらにマップの結合テストを実施します
        /// <para>指定した座標で張る長方形領域を含む地図を生成します。</para>
        /// <para>座標を省略すると、Blh(33.0432, 130.559), Blh(32.6159, 130.9659)(熊本県付近)が使用されます。</para>
        /// <para>Taskクラスを利用して処理がすぐに戻るようにしておりますが、実際には若干の間をおいてファイルが生成されることにご注意ください。</para>
        /// </summary>
        /// <param name="x1">座標1</param>
        /// <param name="x2">座標2</param>
        public static void SaveBigMapAsBmp(Blh x1 = new Blh(), Blh x2 = new Blh())
        {
            DEM dem = new DEM();
            try
            {
                dem.AddDirWithDialog();
                if (dem.Count != 0)
                {
                    MapDem map = null;
                    var tsk = Task.Factory.StartNew(() =>
                    {
                        if (x1 == new Blh() && x1 == x2)
                            map = dem.CreateMap(new RectangleField(new Blh(33.0432, 130.559), new Blh(32.6159, 130.9659)));
                        else
                            map = dem.CreateMap(new RectangleField(x1, x2));

                        //System.Diagnostics.Stopwatch sw2 = System.Diagnostics.Stopwatch.StartNew();

                        if (map != null) map.SaveAsImage("ToBmpTest.bmp", 0.0f);

                        //sw2.Stop();                                                         // ストップウォッチを止める
                        //Console.WriteLine("マップ画像出力にかけた処理時間: " + sw2.Elapsed); // 結果を表示する
                    });
                }
            }
            catch (SystemException e)
            {
                Console.WriteLine(e.Message);
            }
            return;
        }