ハイドラが終わってしまうので、走行ログcsvをgpxファイルに変換するJScript(Windowsなら標準で動くはず)を生成AIに作ってもらいました。
私の環境では、フォルダ内のcsvを一括でgpxに変換でき、移行先のマッピングアプリでフォルダ指定して一括で取り込めました。
【免責事項】
本スクリプトは、各自の自己責任においてご利用ください。
万が一、本スクリプトの使用によってデータの消失、PCの不具合、その他いかなる損害・トラブルが発生した場合でも、製作者は一切の責任を負いかねます。大切なデータは必ず事前にバックアップを取った上でご利用ください。また、動作の完全性や正確性を保証するものではありませんので、予めご了承ください。
不明点はAIに聞いてください。
【使い方】
※AndroidとWindowsのの場合です。その他は不明です。
※data内は標準のファイラーでは見られません。
①Android → data → jp.co.carview.minkara.hitouch → files → carview → drivelog
から、「driveLog_xxxxxxxx.csv」というファイルをPCに取り込み、適当なフォルダに入れておく。過去にハイドラを使っていたスマホが他にあれば、そちらのデータも取り込むと良いでしょう。
②下の方に記載のコードをメモ帳などにコピペして、「ConvertCsvToGpx.js」などのファイル名で保存する(拡張子は.js)。
③①で用意したcsvが入ったフォルダを②で作ったjsファイルにドラッグアンドドロップする。
④しばらくして、Success的なダイアログが出れば成功です(変換中は何も出ませんが、進捗が気になる場合は変換しているフォルダ内にできた"gps"フォルダ内を見ればファイルがどんどん増えていくのがわかります)。
⑤③でドラッグアンドドロップしたフォルダ内に"gps"というフォルダができていますので、中にgpxファイルができていることを確認します。
あとはgpxファイルをスマホに戻して使うなり、PCで開いて(・∀・)ニヤニヤするなりお好きにどうぞ!
------------この下の行からコピー-----------
// 1. Check Arguments
var args = WScript.Arguments;
if (args.Length === 0) {
WScript.Echo("Please Drag and Drop a folder onto this script.");
WScript.Quit();
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folderPath = args(0);
// Check if dropped item is a folder
if (!fso.FolderExists(folderPath)) {
WScript.Echo("Error: Please drop a FOLDER, not a file.");
WScript.Quit();
}
// Adjust folder path tail
if (folderPath.charAt(folderPath.length - 1) !== "\\") {
folderPath += "\\";
}
// 2. Create "gps" folder
var outputDirPath = folderPath + "gps\\";
if (!fso.FolderExists(outputDirPath)) {
fso.CreateFolder(outputDirPath);
}
// 3. Scan CSV files
var targetFolder = fso.GetFolder(folderPath);
var filesEnum = new Enumerator(targetFolder.Files);
var successCount = 0;
for (; !filesEnum.atEnd(); filesEnum.moveNext()) {
var file = filesEnum.item();
var ext = fso.GetExtensionName(file.Name).toLowerCase();
if (ext === "csv") {
var baseName = fso.GetBaseName(file.Name);
var gpxFilePath = outputDirPath + baseName + ".gpx";
// Convert process
if (convertCsvFile(file.Path, gpxFilePath, baseName)) {
successCount++;
}
}
}
// 4. Finished Notice
if (successCount > 0) {
WScript.Echo("Success: " + successCount + " files converted in 'gps' folder.");
} else {
WScript.Echo("No CSV files found in the folder.");
}
// --- CSV to GPX Conversion Function ---
function convertCsvFile(csvPath, gpxPath, trackName) {
var ForReading = 1;
var ForWriting = 2;
try {
var csvFile = fso.OpenTextFile(csvPath, ForReading);
var gpxFile = fso.OpenTextFile(gpxPath, ForWriting, true, 0);
// GPX Header
gpxFile.WriteLine('');
gpxFile.WriteLine('
');
gpxFile.WriteLine(' ');
gpxFile.WriteLine(' ' + trackName + ' ');
gpxFile.WriteLine(' ');
var isHeader = true;
var latIdx = 0, lngIdx = 1, timeIdx = 2;
while (!csvFile.AtEndOfStream) {
var line = csvFile.ReadLine();
if (line.replace(/^\s+|\s+$/g, "") === "") continue;
var columns = line.split(",");
if (isHeader) {
for (var i = 0; i < columns.length; i++) {
var colName = columns[i].replace(/^\s+|\s+$/g, "").toLowerCase();
if (colName === "lat") latIdx = i;
if (colName === "lng") lngIdx = i;
if (colName === "record_time") timeIdx = i;
}
isHeader = false;
} else {
if (columns.length > Math.max(latIdx, lngIdx, timeIdx)) {
var lat = columns[latIdx].replace(/^\s+|\s+$/g, "");
var lng = columns[lngIdx].replace(/^\s+|\s+$/g, "");
var recordTime = columns[timeIdx].replace(/^\s+|\s+$/g, "");
var isoTime = recordTime.replace(" ", "T") + "Z";
gpxFile.WriteLine(' ');
gpxFile.WriteLine(' ' + isoTime + ' ');
gpxFile.WriteLine(' ');
}
}
}
// GPX Footer
gpxFile.WriteLine(' ');
gpxFile.WriteLine(' ');
gpxFile.WriteLine(' ');
csvFile.Close();
gpxFile.Close();
return true;
} catch (e) {
return false;
}
}
-----------この上の行までをコピー-------------