久しぶりのプログラミング
Tuesday, May 28, 2019
ほぼ、4年ぶりか。
ええっと、GPSの週数ロールオーバーって、ご存知でしょうか。
GPSで保持している日付のデータが、1024週ごとに、リセットされ、リセットされるのが、今年の4月6日。
で、少し前に買ったGPSロガーだと、採取したログが1024週前の日付になってしまうという。
で、出てくるログが1999年ということになります。
結局、GPXのファイルの日付を、1024週足せばいいんだけど、これには、それなりに、プログラムが必要、と。
で、手抜いて、こんなプログラムだよ。
<?php
require_once("./setup.php");
//echo '<pre>';
//var_dump($_FILES);
$s=file_get_contents($_FILES['userfile']['tmp_name']);
$o_filename=$_FILES['userfile']['name'];
//echo $o_filename;
$n_filename = 'n' . $o_filename;
file_put_contents(ORIG_SAVE_DIR . $o_filename , $s);
$prevpos=0;
//echo '<pre>';
//echo $s;
replace_after( $s, '<name>', '1999' );
replace_after( $s, '<name>', '2000' );
replace_after( $s, '<name>', '2001' );
replace_after( $s, '<time>', '1999' );
replace_after( $s, '<time>', '2000' );
replace_after( $s, '<time>', '2001' );
//echo $s;
file_put_contents( CONV_SAVE_DIR . $n_filename , $s);
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($s));
header('Content-Disposition: attachment; filename="'.$n_filename.'"');
echo $s;
function replace_after( &$s, $name, $year )
{
while(true)
{
$pos=stripos($s, $name . $year, $prevpos+1);
if( !$pos ) break;
$d = substr($s, $pos+strlen($name), 10);
$dd = new DateTime($d);
$dd->add(new DateInterval('P1024W'));
$d = $dd->format('Y-m-d');
$s = substr_replace($s, $name . $d, $pos, strlen($name)+10);
$prevpos = $pos;
}
}
?>
ちなみに、私はいつも、目的地に着くと、
GPSログをGPSロガーから、スマホにダウンロード(SmaillStepで、M241から)
得られたGPXを、地図ロイドで、内容確認。
OKなら、GoogleDriveにGPXをアップロードしバックアップ
となっていますが、今後は、
GPSログをGPSロガーから、スマホにダウンロード(SmaillStepで、M241から)
ダウンロードされたファイルを上記のプログラムにアップロード。この時、バックアップがとられ、
日付を1024週加算したファイルが、スマホにダウンロード
ダウンロードしたファイルを、地図ロイドで内容確認。
となります。操作の手間は、正常ケースでは、ちょっと楽になった感じかな。
本来は、スマホで、日付を1024週足すプログラムが作れればいいんだけど、これは、やったことないので。
(そもそもそんな新しいこと覚える気力あれば、別の仕事探してます。)
ええっと、GPSの週数ロールオーバーって、ご存知でしょうか。
GPSで保持している日付のデータが、1024週ごとに、リセットされ、リセットされるのが、今年の4月6日。
で、少し前に買ったGPSロガーだと、採取したログが1024週前の日付になってしまうという。
で、出てくるログが1999年ということになります。
結局、GPXのファイルの日付を、1024週足せばいいんだけど、これには、それなりに、プログラムが必要、と。
で、手抜いて、こんなプログラムだよ。
<?php
require_once("./setup.php");
//echo '<pre>';
//var_dump($_FILES);
$s=file_get_contents($_FILES['userfile']['tmp_name']);
$o_filename=$_FILES['userfile']['name'];
//echo $o_filename;
$n_filename = 'n' . $o_filename;
file_put_contents(ORIG_SAVE_DIR . $o_filename , $s);
$prevpos=0;
//echo '<pre>';
//echo $s;
replace_after( $s, '<name>', '1999' );
replace_after( $s, '<name>', '2000' );
replace_after( $s, '<name>', '2001' );
replace_after( $s, '<time>', '1999' );
replace_after( $s, '<time>', '2000' );
replace_after( $s, '<time>', '2001' );
//echo $s;
file_put_contents( CONV_SAVE_DIR . $n_filename , $s);
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($s));
header('Content-Disposition: attachment; filename="'.$n_filename.'"');
echo $s;
function replace_after( &$s, $name, $year )
{
while(true)
{
$pos=stripos($s, $name . $year, $prevpos+1);
if( !$pos ) break;
$d = substr($s, $pos+strlen($name), 10);
$dd = new DateTime($d);
$dd->add(new DateInterval('P1024W'));
$d = $dd->format('Y-m-d');
$s = substr_replace($s, $name . $d, $pos, strlen($name)+10);
$prevpos = $pos;
}
}
?>
ちなみに、私はいつも、目的地に着くと、
GPSログをGPSロガーから、スマホにダウンロード(SmaillStepで、M241から)
得られたGPXを、地図ロイドで、内容確認。
OKなら、GoogleDriveにGPXをアップロードしバックアップ
となっていますが、今後は、
GPSログをGPSロガーから、スマホにダウンロード(SmaillStepで、M241から)
ダウンロードされたファイルを上記のプログラムにアップロード。この時、バックアップがとられ、
日付を1024週加算したファイルが、スマホにダウンロード
ダウンロードしたファイルを、地図ロイドで内容確認。
となります。操作の手間は、正常ケースでは、ちょっと楽になった感じかな。
本来は、スマホで、日付を1024週足すプログラムが作れればいいんだけど、これは、やったことないので。
(そもそもそんな新しいこと覚える気力あれば、別の仕事探してます。)
コメントする
トラックバック
この記事へのトラックバックURL:
これまでに受信したトラックバックはありません。