【C#】.NET で GDAL・gdalwarpを実行するには... [1]

■ はじめに

https://blogs.yahoo.co.jp/dk521123/38092205.html
https://blogs.yahoo.co.jp/dk521123/38100268.html
の続き。

今回は、gdalwarpコマンドを実行することを考える
C#に関しては、ほとんど情報がない...

実装案

【1】 Process.Start() で実行 ★ 今回はこっちを取り扱う ★
【2】GDAL パッケージを利用して実装 ←こっちは、以下の関連記事を参照
.NET で GDAL・gdalwarpを実行するには... [2]
https://blogs.yahoo.co.jp/dk521123/38100111.html

■ サンプル

https://stackoverflow.com/questions/27131981/gdal-warping-in-c-sharp
が参考になる

Form1.cs

using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;

namespace SampleForm
{
  public partial class Form1 : Form
  {
    private const string GdalPath = @"C:\Program Files\GDAL";

    public Form1()
    {
      InitializeComponent();

      string projLibraryPath = Path.Combine(GdalPath, "projlib");
      Environment.SetEnvironmentVariable("PROJ_LIB", projLibraryPath);
    }

    private void button1_Click(object sender, EventArgs e)
    {
      var stopwatch = new Stopwatch();
      stopwatch.Start();
      try
      {
        using (Process process = new Process())
        {
          ProcessStartInfo startInfo = new ProcessStartInfo
          {
            WindowStyle = ProcessWindowStyle.Hidden,
            FileName = Path.Combine(GdalPath, "gdalwarp.exe"),
            //出力とエラーをストリームに書き込むようにする
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
        };

          startInfo.Arguments =
            "-of GTiff -overwrite \"C:/Temp/IMG-HH-ALOS2014410740-140829-UBSL1.5GUA\" \"C:/Temp/Output.tiff\"";
          process.StartInfo = startInfo;

          process.Start();

          // 出力を読み取る
          string standardOutput = process.StandardOutput.ReadToEnd();
          string standardError = process.StandardError.ReadToEnd();

          process.WaitForExit();

          int exitCode = process.ExitCode;

          stopwatch.Stop();
          TimeSpan timeSpan = stopwatch.Elapsed;
          if (exitCode == 0)
          {
            this.Text = "Done! " +
              timeSpan.Minutes + ":" + timeSpan.Seconds + " " + standardOutput;
          }
          else
          {
            this.Text = "Error Code = " + exitCode + " " + 
              standardError + " " + timeSpan.Minutes + ":" + timeSpan.Seconds;
          }
        }
      }
      catch (Exception ex)
      {
        stopwatch.Stop();
        TimeSpan errorTimeSpan = stopwatch.Elapsed;
        this.Text = ex.Message + " " + errorTimeSpan.Minutes + ":" + errorTimeSpan.Seconds;
        return;
      }
    }
  }
}

関連記事

C#

.NET で GDAL を使うには... ~ 環境設定編 ~
https://blogs.yahoo.co.jp/dk521123/38092205.html
.NET で GDAL を使うには... ~ Hello World編 ~
https://blogs.yahoo.co.jp/dk521123/38100268.html
.NET で GDAL・gdalwarpを実行するには... [2]
https://blogs.yahoo.co.jp/dk521123/38100111.html

GISツール

GISツール ~ GDAL / OGR ~
https://blogs.yahoo.co.jp/dk521123/38092840.html
GISツール ~ GDALコマンド ~
https://blogs.yahoo.co.jp/dk521123/38093845.html