dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

PHPで外部プログラムを実行する・・・GPSBabelを使ってみる

昨日は久しぶりに那須岳へ登山に行ってきました。春の雪山でリフレッシュ!

さて今日もNetBeansにて「PHP逆引きレシピ」のサンプルコードを教材にPHPの勉強をしました。今日のお題は第1章1-13「外部プログラム」です。そういえば exec() 関数で外部プログラムを直接実行する練習はしていませんでした。外部プログラムとしては GPS の各種データフォーマットを相互変換してくれる GPSBabel を選びました。案外簡単に動いたのでメモしておきます。

<実施手順>
GPSBabel のサイトからダウンロードして c:\xampp\GPSBabel にインストールする。
・ c:\xampp\GPSBabel\temp フォルダを作る。
ここから GPS データのサンプルを入手し、temp フォルダに入れる。
NetBeans にて 225_2_1.php というファイルを作り、内容を下記とする。

<?php
  //このコマンドはWindowsの実行環境でしか動作しません
// header("Content-Type: text/plain; charset=UTF-8");
  $exec = 'c:\xampp\gpsbabel\gpsbabel.exe';
  $infile = 'c:\xampp\gpsbabel\temp\track-176884.gpx';
  $outfile= 'c:\xampp\gpsbabel\temp\track-176884.gpx.kml';
  
  $command = "$exec -i gpx -f $infile -o kml -F $outfile";
  $safe_command = escapeshellcmd($command);
  $last_line = exec($safe_command, $lines, $status);
  
  echo "実行するコマンド => ".$safe_command."<br />\n";
  echo "コマンド出力の最終行 => ".mb_convert_encoding($last_line, "UTF-8", "SJIS")."<br />\n";
  echo "コマンド実行結果のステータス => {$status}<br />\n";

  echo "コマンド出力結果\n";
  foreach($lines as $line) {
    rtrim($line);
    echo mb_convert_encoding($line, "UTF-8", "SJIS")."<br />\n";
  }
?>

 これを実行すると、GPX 形式の GPS データが KML 形式に変換されて temp フォルダに出力されます。PC にGoogle Earth が入っていれば、これをダブルクリックすると水戸の偕楽園付近のお散歩ルートが表示されるはずです・・・(^^;;;