/** * 水温データの抽出・整形 * 返ってくるデータの例: * { * 欠測チェック: false, * 指定時刻: '2020/08/19 16:00:06', * 1m: '27.63', * 5m: '27.44', * 10m: '27.06', * 20m: '26.97', * 30m: '26.22', * 40m: '24.85', * 50m: '22.35', * 60m: '20.69' * } * * @param {array} device_temp_data 一測点の水温データ群 * @param {number} format_id フォーマット識別番号 * @param {number} before 何時間前のデータを取ってくるか * @return {object} 整形済み水温データ */ function extractFormattedWaterTempData(device_temp_data, format_id, before) { var search_key = "ago" + before; if (device_temp_data[search_key] == "") return { 欠測チェック: true }; return formatWaterTempData( device_temp_data[search_key].split(","), format_id ); } /** * 水温データの整形 * * @param {array} extracted_data 抽出済みのデータ * @param {number} format_id フォーマット識別番号 * @return {object} 整形済み水温データ */ function formatWaterTempData(extracted_data, format_id) { var formatted_measure_date = getFormattedMeasureDate( extracted_data, format_id ); var formatted_data = { 欠測チェック: false, 測定時刻: formatted_measure_date, }; for (var i = 0; i < deep_list["全体"].length; i++) { formatted_data[deep_list["全体"][i]] = getWaterTempData( extracted_data, format_id, i + 2 ); } return formatted_data; } /** * フォーマット済み測定時刻の取得 * * @param {array} extracted_data 抽出済みのデータ * @param {number} format_id フォーマット識別番号 * @return {string} 'YYYY/mm/dd HH:ii:ss'でフォーマットされた測定時刻 */ function getFormattedMeasureDate(extracted_data, format_id) { switch (format_id) { case 0: case 4: return extracted_data[0] + " " + extracted_data[1]; case 1: case 2: var text = extracted_data[0].slice(0, 4) + "/" + extracted_data[0].slice(4, 6) + "/" + extracted_data[0].slice(6, 8) + " " + extracted_data[0].slice(8, 10) + ":" + extracted_data[0].slice(10, 12) + ":00"; return text; case 3: return "20" + extracted_data[0] + " " + extracted_data[1]; default: return extracted_data[0] + " " + extracted_data[1]; } } /** * 水温データの取得 * * @param {array} extracted_data 抽出済みのデータ * @param {number} format_id フォーマット識別番号 * @param {number} column_id カラム番号 * @return {string} 指定カラム番号のデータ */ function getWaterTempData(extracted_data, format_id, column_id) { switch (format_id) { case 0: switch (extracted_data[column_id]) { case "": return "-"; case "Err": return "Err"; default: return extracted_data[column_id]; } case 1: switch (column_id) { case 3: return extracted_data[1]; case 10: return extracted_data[6]; case 11: return "NA"; case 12: var text = "" + extracted_data[4]; value = text.split("."); if (value[1].length < 2) { for (var i = 0; i < 2 - value[1].length; i++) { value[1] += "0"; } text = value[0] + "." + value[1]; } return text; default: return "NA"; } case 2: switch (column_id) { case 10: return extracted_data[12]; case 11: return "NA"; case 12: var text = "" + extracted_data[10]; value = text.split("."); if (value[1].length < 2) { for (var i = 0; i < 2 - value[1].length; i++) { value[1] += "0"; } text = value[0] + "." + value[1]; } return text; } if (extracted_data[column_id - 1] == "-9.99") { return "-"; } return extracted_data[column_id - 1]; case 3: if (column_id == 2 || column_id == 3) { return extracted_data[column_id + 1]; } else { switch (column_id) { case 10: var text = "" + extracted_data[6]; value = text.split("."); if (value[1].length < 2) { for (var i = 0; i < 2 - value[1].length; i++) { value[1] += "0"; } text = value[0] + "." + value[1]; } return text; case 11: return extracted_data[7]; case 12: return extracted_data[8]; } return "-"; } case 4: switch (column_id) { case 12: var value = 0.0; var count = 0; if (extracted_data[5] != "Err") { value += parseFloat(extracted_data[5]); count++; } if (extracted_data[9] != "Err") { value += parseFloat(extracted_data[9]); count++; } if (extracted_data[12] != "Err") { value += parseFloat(extracted_data[12]); count++; } if (extracted_data[15] != "Err") { value += parseFloat(extracted_data[15]); count++; } if (count > 0) value /= count; else return "-"; var text = "" + value; return text; } if (column_id > deep_list["全体"].length) { return "NA"; } switch (deep_list["全体"][column_id - 2]) { case "5m": if (extracted_data[2] == "Err") return "-"; return extracted_data[2]; case "10m": var value = 0.0; var count = 0; if (extracted_data[6] != "Err") { value += parseFloat(extracted_data[6]); count++; } if (extracted_data[10] != "Err") { value += parseFloat(extracted_data[10]); count++; } if (count > 0) value /= count; else return "-"; var text = "" + value; return text; case "20m": if (extracted_data[13] == "Err") return "-"; return extracted_data[13]; default: return "NA"; } case 5: if (extracted_data[column_id] == "") { return "-"; } if (column_id == 5) { return extracted_data[column_id + 1]; } switch (column_id) { case 10: return extracted_data[7]; case 11: return "NA"; case 12: return extracted_data[8]; case -1: return extracted_data[5]; } return extracted_data[column_id]; case 6: if (extracted_data[column_id] == "") { return "-"; } switch (column_id) { case 10: return extracted_data[extracted_data.length - 2]; case 11: return "NA"; case 12: return extracted_data[extracted_data.length - 1]; } if ( parseFloat(extracted_data[column_id]) >= 30 && parseFloat(extracted_data[column_id]) <= 5 ) { return "-"; } return extracted_data[column_id]; case 9: if (extracted_data[column_id] == "") { return "-"; } switch (column_id) { case 10: return extracted_data[7]; case 11: return "NA"; case 12: return extracted_data[8]; case -1: return extracted_data[5]; } return extracted_data[column_id]; case 10: switch (column_id) { case 12: var value = 0.0; var count = 0; if (extracted_data[5] != "Err") { value += parseFloat(extracted_data[5]); count++; } if (extracted_data[9] != "Err") { value += parseFloat(extracted_data[9]); count++; } if (extracted_data[12] != "Err") { value += parseFloat(extracted_data[12]); count++; } if (extracted_data[15] != "Err") { value += parseFloat(extracted_data[15]); count++; } if (count > 0) value /= count; else return "-"; var text = "" + value; return text; case -1: return extracted_data[6]; } if (column_id > deep_list["全体"].length) { return "NA"; } switch (deep_list["全体"][column_id - 2]) { case "1m": if (extracted_data[2] == "Err") return "-"; return extracted_data[2]; case "5m": if (extracted_data[6] == "Err") return "-"; return extracted_data[6]; default: return "NA"; } default: switch (extracted_data[column_id]) { case "": return "-"; case "Err": return "Err"; default: return extracted_data[column_id]; } } } /** * 四捨五入(小数点以下何桁でするか指定可能) * @param {string} value 四捨五入する数値(文字列) * @param {number} digit 小数点以下何桁で四捨五入するか指定 * @return {string} 四捨五入された値 */ function roundValue(value, digit) { if (value == "Err" || value == "-" || value == "NA") return value; var result = parseFloat(value); result = Math.round(result * Math.pow(10, digit)) / Math.pow(10, digit); result = "" + result; if (digit == 0) { return result; } if (result.indexOf(".") == -1) { result += "."; for (var j = 0; j < digit; j++) { result += "0"; } } else { var sp = result.split("."); if (sp[1].length < digit) { for (var j = digit; j > sp[1].length; j--) sp[1] += "0"; } result = sp[0] + "." + sp[1]; } return result; }