Skip to content

Instantly share code, notes, and snippets.

@tankery
Created July 26, 2018 04:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tankery/f8e7baf84641b3a393d3c687e6919f40 to your computer and use it in GitHub Desktop.
Save tankery/f8e7baf84641b3a393d3c687e6919f40 to your computer and use it in GitHub Desktop.
MET Calculator for Google Sheet Function
function MET(type, speed) {
var STANDING_QUIETLY = 1.3;
var WALK_MET_TABLE = [
[5.0 * 1.6, 8.3], // 5.0 mph, 8.3 METs
[4.5 * 1.6, 7.0], // 4.5 mph, 7.0 METs
[4.0 * 1.6, 5.0], // 4.0 mph, 5.0 METs
[3.5 * 1.6, 4.3], // 3.5 mph, 4.3 METs
[2.5 * 1.6, 3.0], // 2.5 mph, 3.0 METs
[2.0 * 1.6, 2.8], // 2.0 mph, 2.8 METs
[1.7 * 1.6, 2.3], // 1.7 mph, 2.3 METs
];
var RUN_MET_TABLE = [
[14.0 * 1.6, 23.0], // 23.0 14.0 mph (4.3 min/mile)
[13.0 * 1.6, 19.8], // 19.8 13.0 mph (4.6 min/mile)
[12.0 * 1.6, 19.0], // 19.0 12.0 mph (5 min/mile)
[11.0 * 1.6, 16.0], // 16.0 11.0 mph (5.5 min/mile)
[10.0 * 1.6, 14.5], // 14.5 10.0 mph (6 min/mile)
[ 9.0 * 1.6, 12.8], // 12.8 9.0 mph (6.5 min/mile)
[ 8.6 * 1.6, 12.3], // 12.3 8.6 mph (7 min/mile)
[ 8.0 * 1.6, 11.8], // 11.8 8.0 mph (7.5 min/mile)
[ 7.5 * 1.6, 11.8], // 11.8 7.5 mph (8 min/mile)
[ 7.0 * 1.6, 11.0], // 11.0 7.0 mph (8.5 min/mile)
[ 6.7 * 1.6, 10.5], // 10.5 6.7 mph (9 min/mile)
[ 6.0 * 1.6, 9.8], // 9.8 6.0 mph (10 min/mile)
[ 5.2 * 1.6, 9.0], // 9.0 5.2 mph (11.5 min/mile)
[ 5.0 * 1.6, 8.3], // 8.3 5.0 mph (12 min/mile)
[ 4.0 * 1.6, 6.0], // 6.0 4.0 mph (15 min/mile)
];
var BICYCLE_MET_TABLE = [
[20.0 * 1.6, 15.8], // 20 mph, 15.8 METs
[16.0 * 1.6, 12.0], // 16 mph, 12 METs
[14.0 * 1.6, 10.0], // 14 mph, 10 METs
[12.0 * 1.6, 8.0], // 12 mph, 8 METs
[10.0 * 1.6, 6.8], // 10 mph, 6.8 METs
[ 9.4 * 1.6, 5.8], // 9.4 mph, 5.8 METs
[ 5.5 * 1.6, 3.5], // 5.5 mph, 3.5 METs
];
var metTable = null;
switch (type) {
case "Run":
metTable = RUN_MET_TABLE;
break;
case "Walk":
metTable = WALK_MET_TABLE;
break;
case "Bike":
metTable = BICYCLE_MET_TABLE;
break;
default:
metTable = WALK_MET_TABLE;
break;
}
function getMetBetween(speed, level, nextLevel) {
return level[1] + (speed - level[0]) * (nextLevel[1] - level[1]) / (nextLevel[0] - level[0]);
}
var met = 0;
for (var i = 0; i < metTable.length; i++) {
var level = metTable[i];
if (speed >= level[0]) {
if (i == 0) {
met = level[1];
} else {
var nextLevel = metTable[i - 1];
met = getMetBetween(speed, level, nextLevel);
}
break;
}
}
var minLevel = metTable[metTable.length - 1];
if (speed < minLevel[0]) {
var level = [0, STANDING_QUIETLY];
met = getMetBetween(speed, level, minLevel);
}
return met;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment