Skip to content

Commit

Permalink
GPS 込みのログリードに対応
Browse files Browse the repository at this point in the history
see #7
  • Loading branch information
yoshinrt committed Jan 5, 2019
1 parent 2dbdead commit 45cdc96
Showing 1 changed file with 105 additions and 16 deletions.
121 changes: 105 additions & 16 deletions vsd_filter/vsd_plugins/_log_reader/vsd_log.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ LogReaderInfo.push({

function ReadVsdLog( Files ){

var GpsTime = [];
var Lati = [];
var Long = [];
var Alti = [];

var ParamDef = {
// csv 項目名 Vsd 変数名 function or 乗数
"Date/Time" : [ "Time", StrToUTC ],
Expand All @@ -22,26 +27,49 @@ function ReadVsdLog( Files ){
"LapTime" : [ "LapTime", StrToLapTime ],
};

var Ret = ReadCSV( Files, ParamDef );
var Cnt = ReadVsdSub( Files, ParamDef );

// Accel 偽造
/*
Log.Accel = [ 0 ];
if( GpsTime.length == 0 ) return Cnt;

for( var i = 1; i < Ret; ++i ){
Accel = Log.Tacho[ i + 1 ] - Log.Tacho[ i - 1 ];
if( Accel < 0 ) Accel = 0;
else if( Log.Gy[ i ] < -0.4 ) Accel *= 0.1;
if( Accel > 50 ) Accel = 50;
Log.Accel[ i ] = Accel;
}
*/
// GPS ログを VSD ログにマージ
var ig = -1;
var GpsTimeDiff = 0; // [ms]

Log.Longitude = [];
Log.Latitude = [];
Log.Altitude = [];

if( typeof Log.Longitude == 'object' ){
SmoothLowFreqLogSingle( Log.Longitude, Ret );
SmoothLowFreqLogSingle( Log.Latitude, Ret );
for( var iv = 0; iv < Cnt; ++iv ){

// GPSTime[ ig ] <= VsdTime < GpsTime[ ig + 1 ] となる ig を探索
for( ; ig < GpsTime.length - 1; ++ig ){
if( Log.Time[ iv ] < GpsTime[ ig + 1 ] - GpsTimeDiff ) break;
}

// GPS ログが存在しない (開始時)
if( ig == -1 ){
Log.Longitude[ iv ] = Long[ 0 ];
Log.Latitude [ iv ] = Lati[ 0 ];
Log.Altitude [ iv ] = Alti[ 0 ];
}

// GPS ログが存在しない (開始時)
else if( ig == GpsTime.length - 1 ){
Log.Longitude[ iv ] = Long[ GpsTime.length - 1 ];
Log.Latitude [ iv ] = Lati[ GpsTime.length - 1 ];
Log.Altitude [ iv ] = Alti[ GpsTime.length - 1 ];
}

// GPS ログを等比分割
else{
var a = ( Log.Time[ iv ] - ( GpsTime[ ig ] - GpsTimeDiff )) / ( GpsTime[ ig + 1 ] - GpsTime[ ig ]);
Log.Longitude[ iv ] = ( Long[ ig + 1 ] - Long[ ig ]) * a + Long[ ig ];
Log.Latitude [ iv ] = ( Lati[ ig + 1 ] - Lati[ ig ]) * a + Lati[ ig ];
Log.Altitude [ iv ] = ( Alti[ ig + 1 ] - Alti[ ig ]) * a + Alti[ ig ];
}
}
return Ret;

return Cnt;

function StrToUTC( str ){
// 2012-01-23T11:02:36.789Z (GMT)
Expand All @@ -59,4 +87,65 @@ function ReadVsdLog( Files ){
}
return -1;
}

function ReadVsdSub( Files, ParamDef ){
var ParamUsed = [];

var Cnt = 0;

for( var i = 0; i < Files.length; ++i ){
var file = new File();
try{
file.Open( Files[ i ], "zr" );
}catch( e ){
MessageBox( "ファイルが開けません: " + Files[ i ] );
return 0;
}

// ヘッダリード
var Header = file.ReadLine().replace( /[\x0D\x0A]/g, '' ).split( / *[,\t] */ );

for( var i = 0; i < Header.length; ++i ){
if( typeof ParamDef[ Header[ i ]] != "undefined" ){
ParamDef[ Header[ i ]][ 2 ] = i;
ParamUsed.push( ParamDef[ Header[ i ]] );
Log[ ParamDef[ Header[ i ]][ 0 ]] = [];
}
}

while( 1 ){
var Param = file.ReadLine().replace( /[\x0D\x0A]/g, '' ).split( /[,\t]/ );
if( file.IsEOF()) break;

if( Param[ 0 ] == 'GPS' ){
// 0 1 2 3 4 5
// GPS 2019-01-04T04:34:39.200Z 136.12345 35.12345 92.600 0.037

Long[ GpsTime.length ] = +Param[ 2 ];
Lati[ GpsTime.length ] = +Param[ 3 ];
Alti[ GpsTime.length ] = +Param[ 4 ];
GpsTime[ GpsTime.length ] = StrToUTC( Param[ 1 ]);
}

else{
for( var j = 0; j < ParamUsed.length; ++j ){
if( typeof( ParamUsed[ j ][ 1 ] ) == 'function' ){
// function なら,それを実行
Log[ ParamUsed[ j ][ 0 ]][ Cnt ] =
ParamUsed[ j ][ 1 ]( Param[ ParamUsed[ j ][ 2 ]] );
}else if( Param[ ParamUsed[ j ][ 2 ]] != '' && !isNaN( Param[ ParamUsed[ j ][ 2 ]] )){
// 係数なら,param に掛ける
Log[ ParamUsed[ j ][ 0 ]][ Cnt ] =
Param[ ParamUsed[ j ][ 2 ]] * ParamUsed[ j ][ 1 ];
}
}

++Cnt;
}
}
file.Close();
}

return Cnt;
}
}

0 comments on commit 45cdc96

Please sign in to comment.