@@ -1333,123 +1333,188 @@ private function setUnits($options)
13331333 }
13341334 }
13351335
1336- switch ($ units ) {
1337- case 'statute ' :
1338- if (isset ($ this ->data_mesgs ['record ' ]['speed ' ])) { // convert meters per second to miles per hour
1339- if (is_array ($ this ->data_mesgs ['record ' ]['speed ' ])) {
1340- foreach ($ this ->data_mesgs ['record ' ]['speed ' ] as &$ value ) {
1341- if ($ bPace ) {
1342- $ value = round (60 / 2.23693629 / $ value , 3 );
1336+ // Set units for all messages
1337+ $ messages = ['session ' , 'lap ' , 'record ' ];
1338+ $ c_fields = [
1339+ 'avg_temperature ' ,
1340+ 'max_temperature ' ,
1341+ 'temperature '
1342+ ];
1343+ $ m_fields = [
1344+ 'distance ' ,
1345+ 'total_distance '
1346+ ];
1347+ $ m_ft_fields = [
1348+ 'altitude ' ,
1349+ 'avg_altitude ' ,
1350+ 'enhanced_avg_altitude ' ,
1351+ 'enhanced_max_altitude ' ,
1352+ 'enhanced_min_altitude ' ,
1353+ 'max_altitude ' ,
1354+ 'min_altitude ' ,
1355+ 'total_ascent ' ,
1356+ 'total_descent '
1357+ ];
1358+ $ ms_fields = [
1359+ 'avg_neg_vertical_speed ' ,
1360+ 'avg_pos_vertical_speed ' ,
1361+ 'avg_speed ' ,
1362+ 'enhanced_avg_speed ' ,
1363+ 'enhanced_max_speed ' ,
1364+ 'max_neg_vertical_speed ' ,
1365+ 'max_pos_vertical_speed ' ,
1366+ 'max_speed ' ,
1367+ 'speed '
1368+ ];
1369+ $ semi_fields = [
1370+ 'end_position_lat ' ,
1371+ 'end_position_long ' ,
1372+ 'nec_lat ' ,
1373+ 'nec_long ' ,
1374+ 'position_lat ' ,
1375+ 'position_long ' ,
1376+ 'start_position_lat ' ,
1377+ 'start_position_long ' ,
1378+ 'swc_lat ' ,
1379+ 'swc_long '
1380+ ];
1381+
1382+ foreach ($ messages as $ message ) {
1383+ switch ($ units ) {
1384+ case 'statute ' :
1385+
1386+ // convert from celsius to fahrenheit
1387+ foreach ($ c_fields as $ field ) {
1388+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1389+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1390+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1391+ $ value = round ((($ value * 9 ) / 5 ) + 32 , 2 );
1392+ }
13431393 } else {
1344- $ value = round ($ value * 2.23693629 , 3 );
1394+ $ this -> data_mesgs [ $ message ][ $ field ] = round ((( $ this -> data_mesgs [ $ message ][ $ field ] * 9 ) / 5 ) + 32 , 2 );
13451395 }
13461396 }
1347- } else {
1348- if ($ bPace ) {
1349- $ this ->data_mesgs ['record ' ]['speed ' ] = round (60 / 2.23693629 / $ this ->data_mesgs ['record ' ]['speed ' ], 3 );
1350- } else {
1351- $ this ->data_mesgs ['record ' ]['speed ' ] = round ($ this ->data_mesgs ['record ' ]['speed ' ] * 2.23693629 , 3 );
1352- }
1353- }
1354- }
1355- if (isset ($ this ->data_mesgs ['record ' ]['distance ' ])) { // convert from meters to miles
1356- if (is_array ($ this ->data_mesgs ['record ' ]['distance ' ])) {
1357- foreach ($ this ->data_mesgs ['record ' ]['distance ' ] as &$ value ) {
1358- $ value = round ($ value * 0.000621371192 , 2 );
1359- }
1360- } else {
1361- $ this ->data_mesgs ['record ' ]['distance ' ] = round ($ this ->data_mesgs ['record ' ]['distance ' ] * 0.000621371192 , 2 );
13621397 }
1363- }
1364- if (isset ($ this ->data_mesgs ['record ' ]['altitude ' ])) { // convert from meters to feet
1365- if (is_array ($ this ->data_mesgs ['record ' ]['altitude ' ])) {
1366- foreach ($ this ->data_mesgs ['record ' ]['altitude ' ] as &$ value ) {
1367- $ value = round ($ value * 3.2808399 , 1 );
1398+
1399+ // convert from meters to miles
1400+ foreach ($ m_fields as $ field ) {
1401+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1402+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1403+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1404+ $ value = round ($ value * 0.000621371192 , 2 );
1405+ }
1406+ } else {
1407+ $ this ->data_mesgs [$ message ][$ field ] = round ($ this ->data_mesgs [$ message ][$ field ] * 0.000621371192 , 2 );
1408+ }
13681409 }
1369- } else {
1370- $ this ->data_mesgs ['record ' ]['altitude ' ] = round ($ this ->data_mesgs ['record ' ]['altitude ' ] * 3.2808399 , 1 );
13711410 }
1372- }
1373- if (isset ($ this ->data_mesgs ['record ' ]['position_lat ' ])) { // convert from semicircles to degress
1374- if (is_array ($ this ->data_mesgs ['record ' ]['position_lat ' ])) {
1375- foreach ($ this ->data_mesgs ['record ' ]['position_lat ' ] as &$ value ) {
1376- $ value = round ($ value * (180.0 / pow (2 , 31 )), 5 );
1377- }
1378- } else {
1379- $ this ->data_mesgs ['record ' ]['position_lat ' ] = round ($ this ->data_mesgs ['record ' ]['position_lat ' ] * (180.0 / pow (2 , 31 )), 5 );
1380- }
1381- }
1382- if (isset ($ this ->data_mesgs ['record ' ]['position_long ' ])) { // convert from semicircles to degress
1383- if (is_array ($ this ->data_mesgs ['record ' ]['position_long ' ])) {
1384- foreach ($ this ->data_mesgs ['record ' ]['position_long ' ] as &$ value ) {
1385- $ value = round ($ value * (180.0 / pow (2 , 31 )), 5 );
1411+
1412+ // convert from meters to feet
1413+ foreach ($ m_ft_fields as $ field ) {
1414+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1415+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1416+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1417+ $ value = round ($ value * 3.2808399 , 1 );
1418+ }
1419+ } else {
1420+ $ this ->data_mesgs [$ message ][$ field ] = round ($ this ->data_mesgs [$ message ][$ field ] * 3.2808399 , 1 );
1421+ }
13861422 }
1387- } else {
1388- $ this ->data_mesgs ['record ' ]['position_long ' ] = round ($ this ->data_mesgs ['record ' ]['position_long ' ] * (180.0 / pow (2 , 31 )), 5 );
13891423 }
1390- }
1391- if (isset ($ this ->data_mesgs ['record ' ]['temperature ' ])) { // convert from celsius to fahrenheit
1392- if (is_array ($ this ->data_mesgs ['record ' ]['temperature ' ])) {
1393- foreach ($ this ->data_mesgs ['record ' ]['temperature ' ] as &$ value ) {
1394- $ value = round ((($ value * 9 ) / 5 ) + 32 , 2 );
1424+
1425+ // convert meters per second to miles per hour
1426+ foreach ($ ms_fields as $ field ) {
1427+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1428+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1429+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1430+ if ($ bPace ) {
1431+ $ value = round (60 / 2.23693629 / $ value , 3 );
1432+ } else {
1433+ $ value = round ($ value * 2.23693629 , 3 );
1434+ }
1435+ }
1436+ } else {
1437+ if ($ bPace ) {
1438+ $ this ->data_mesgs [$ message ][$ field ] = round (60 / 2.23693629 / $ this ->data_mesgs [$ message ][$ field ], 3 );
1439+ } else {
1440+ $ this ->data_mesgs [$ message ][$ field ] = round ($ this ->data_mesgs [$ message ][$ field ] * 2.23693629 , 3 );
1441+ }
1442+ }
13951443 }
1396- } else {
1397- $ this ->data_mesgs ['record ' ]['temperature ' ] = round ((($ this ->data_mesgs ['record ' ]['temperature ' ] * 9 ) / 5 ) + 32 , 2 );
13981444 }
1399- }
1400- break ;
1401- case 'raw ' :
1402- // Do nothing - leave values as read from file.
1403- break ;
1404- case 'metric ' :
1405- if (isset ($ this ->data_mesgs ['record ' ]['speed ' ])) { // convert meters per second to kilometers per hour
1406- if (is_array ($ this ->data_mesgs ['record ' ]['speed ' ])) {
1407- foreach ($ this ->data_mesgs ['record ' ]['speed ' ] as &$ value ) {
1408- if ($ bPace ) {
1409- $ value = ($ value != 0 ) ? round (60 / 3.6 / $ value , 3 ) : 0 ;
1445+
1446+ // convert from semicircles to degress
1447+ foreach ($ semi_fields as $ field ) {
1448+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1449+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1450+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1451+ $ value = round ($ value * (180.0 / pow (2 , 31 )), 5 );
1452+ }
14101453 } else {
1411- $ value = round ($ value * 3.6 , 3 );
1454+ $ this -> data_mesgs [ $ message ][ $ field ] = round ($ this -> data_mesgs [ $ message ][ $ field ] * ( 180.0 / pow ( 2 , 31 )), 5 );
14121455 }
14131456 }
1414- } else {
1415- if ($ bPace ) {
1416- $ this ->data_mesgs ['record ' ]['speed ' ] = round (60 / 3.6 / $ this ->data_mesgs ['record ' ]['speed ' ], 3 );
1417- } else {
1418- $ this ->data_mesgs ['record ' ]['speed ' ] = round ($ this ->data_mesgs ['record ' ]['speed ' ] * 3.6 , 3 );
1419- }
14201457 }
1421- }
1422- if (isset ($ this ->data_mesgs ['record ' ]['distance ' ])) { // convert from meters to kilometers
1423- if (is_array ($ this ->data_mesgs ['record ' ]['distance ' ])) {
1424- foreach ($ this ->data_mesgs ['record ' ]['distance ' ] as &$ value ) {
1425- $ value = round ($ value * 0.001 , 2 );
1458+
1459+ break ;
1460+
1461+ case 'raw ' :
1462+ // Do nothing - leave values as read from file.
1463+ break ;
1464+ case 'metric ' :
1465+
1466+ // convert from meters to kilometers
1467+ foreach ($ m_fields as $ field ) {
1468+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1469+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1470+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1471+ $ value = round ($ value * 0.001 , 2 );
1472+ }
1473+ } else {
1474+ $ this ->data_mesgs [$ message ][$ field ] = round ($ this ->data_mesgs [$ message ][$ field ] * 0.001 , 2 );
1475+ }
14261476 }
1427- } else {
1428- $ this ->data_mesgs ['record ' ]['distance ' ] = round ($ this ->data_mesgs ['record ' ]['distance ' ] * 0.001 , 2 );
14291477 }
1430- }
1431- if (isset ($ this ->data_mesgs ['record ' ]['position_lat ' ])) { // convert from semicircles to degress
1432- if (is_array ($ this ->data_mesgs ['record ' ]['position_lat ' ])) {
1433- foreach ($ this ->data_mesgs ['record ' ]['position_lat ' ] as &$ value ) {
1434- $ value = round ($ value * (180.0 / pow (2 , 31 )), 5 );
1478+
1479+ // convert meters per second to kilometers per hour
1480+ foreach ($ ms_fields as $ field ) {
1481+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1482+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1483+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1484+ if ($ bPace ) {
1485+ $ value = ($ value != 0 ) ? round (60 / 3.6 / $ value , 3 ) : 0 ;
1486+ } else {
1487+ $ value = round ($ value * 3.6 , 3 );
1488+ }
1489+ }
1490+ } else {
1491+ if ($ bPace ) {
1492+ $ this ->data_mesgs [$ message ][$ field ] = round (60 / 3.6 / $ this ->data_mesgs [$ message ][$ field ], 3 );
1493+ } else {
1494+ $ this ->data_mesgs [$ message ][$ field ] = round ($ this ->data_mesgs [$ message ][$ field ] * 3.6 , 3 );
1495+ }
1496+ }
14351497 }
1436- } else {
1437- $ this ->data_mesgs ['record ' ]['position_lat ' ] = round ($ this ->data_mesgs ['record ' ]['position_lat ' ] * (180.0 / pow (2 , 31 )), 5 );
14381498 }
1439- }
1440- if (isset ($ this ->data_mesgs ['record ' ]['position_long ' ])) { // convert from semicircles to degress
1441- if (is_array ($ this ->data_mesgs ['record ' ]['position_long ' ])) {
1442- foreach ($ this ->data_mesgs ['record ' ]['position_long ' ] as &$ value ) {
1443- $ value = round ($ value * (180.0 / pow (2 , 31 )), 5 );
1499+
1500+ // convert from semicircles to degress
1501+ foreach ($ semi_fields as $ field ) {
1502+ if (isset ($ this ->data_mesgs [$ message ][$ field ])) {
1503+ if (is_array ($ this ->data_mesgs [$ message ][$ field ])) {
1504+ foreach ($ this ->data_mesgs [$ message ][$ field ] as &$ value ) {
1505+ $ value = round ($ value * (180.0 / pow (2 , 31 )), 5 );
1506+ }
1507+ } else {
1508+ $ this ->data_mesgs [$ message ][$ field ] = round ($ this ->data_mesgs [$ message ][$ field ] * (180.0 / pow (2 , 31 )), 5 );
1509+ }
14441510 }
1445- } else {
1446- $ this ->data_mesgs ['record ' ]['position_long ' ] = round ($ this ->data_mesgs ['record ' ]['position_long ' ] * (180.0 / pow (2 , 31 )), 5 );
14471511 }
1448- }
1449- break ;
1450- default :
1451- throw new \Exception ('phpFITFileAnalysis->setUnits(): units option not valid! ' );
1452- break ;
1512+
1513+ break ;
1514+ default :
1515+ throw new \Exception ('phpFITFileAnalysis->setUnits(): units option not valid! ' );
1516+ break ;
1517+ }
14531518 }
14541519 }
14551520
0 commit comments