<?php
function DMS2Decimal($degrees = 0, $minutes = 0, $seconds = 0, $direction = 'n') {
//converts DMS coordinates to decimal
//returns false on bad inputs, decimal on success
//direction must be n, s, e or w, case-insensitive
$ok = array('n', 's', 'e', 'w');
//degrees must be integer between 0 and 180
if(!is_numeric($degrees) || $degrees < 0 || $degrees > 180) { $decimal = false;
}
//minutes must be integer or float between 0 and 59
elseif(!is_numeric($minutes) || $minutes < 0 || $minutes > 59) { $decimal = false;
}
//seconds must be integer or float between 0 and 59
elseif(!is_numeric($seconds) || $seconds < 0 || $seconds > 59) { $decimal = false;
}
$decimal = false;
}
else {
//inputs clean, calculate
$decimal = $degrees + ($minutes / 60) + ($seconds / 3600);
//reverse for south or west coordinates; north is assumed
if($d == 's' || $d == 'w') {
$decimal *= -1;
}
}
return $decimal;
}
echo "x: " . DMS2Decimal($degrees = 7, $minutes = 5, $seconds = 16, $direction = 'n');
echo "y: " . DMS2Decimal($degrees = 171, $minutes = 21, $seconds = 8, $direction = 'e');
PD9waHAKCmZ1bmN0aW9uIERNUzJEZWNpbWFsKCRkZWdyZWVzID0gMCwgJG1pbnV0ZXMgPSAwLCAkc2Vjb25kcyA9IDAsICRkaXJlY3Rpb24gPSAnbicpIHsKICAgICAvL2NvbnZlcnRzIERNUyBjb29yZGluYXRlcyB0byBkZWNpbWFsCiAgICAgLy9yZXR1cm5zIGZhbHNlIG9uIGJhZCBpbnB1dHMsIGRlY2ltYWwgb24gc3VjY2VzcwogICAgICAKICAgICAvL2RpcmVjdGlvbiBtdXN0IGJlIG4sIHMsIGUgb3IgdywgY2FzZS1pbnNlbnNpdGl2ZQogICAgICRkID0gc3RydG9sb3dlcigkZGlyZWN0aW9uKTsKICAgICAkb2sgPSBhcnJheSgnbicsICdzJywgJ2UnLCAndycpOwogICAgICAKICAgICAvL2RlZ3JlZXMgbXVzdCBiZSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTgwCiAgICAgaWYoIWlzX251bWVyaWMoJGRlZ3JlZXMpIHx8ICRkZWdyZWVzIDwgMCB8fCAkZGVncmVlcyA+IDE4MCkgewogICAgICAgICAgJGRlY2ltYWwgPSBmYWxzZTsKICAgICB9CiAgICAgLy9taW51dGVzIG11c3QgYmUgaW50ZWdlciBvciBmbG9hdCBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgZWxzZWlmKCFpc19udW1lcmljKCRtaW51dGVzKSB8fCAkbWludXRlcyA8IDAgfHwgJG1pbnV0ZXMgPiA1OSkgewogICAgICAgICAgJGRlY2ltYWwgPSBmYWxzZTsKICAgICB9CiAgICAgLy9zZWNvbmRzIG11c3QgYmUgaW50ZWdlciBvciBmbG9hdCBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgZWxzZWlmKCFpc19udW1lcmljKCRzZWNvbmRzKSB8fCAkc2Vjb25kcyA8IDAgfHwgJHNlY29uZHMgPiA1OSkgewogICAgICAgICAgJGRlY2ltYWwgPSBmYWxzZTsKICAgICB9CiAgICAgZWxzZWlmKCFpbl9hcnJheSgkZCwgJG9rKSkgewogICAgICAgICAgJGRlY2ltYWwgPSBmYWxzZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgICAvL2lucHV0cyBjbGVhbiwgY2FsY3VsYXRlCiAgICAgICAgICAkZGVjaW1hbCA9ICRkZWdyZWVzICsgKCRtaW51dGVzIC8gNjApICsgKCRzZWNvbmRzIC8gMzYwMCk7CiAgICAgICAgICAgCiAgICAgICAgICAvL3JldmVyc2UgZm9yIHNvdXRoIG9yIHdlc3QgY29vcmRpbmF0ZXM7IG5vcnRoIGlzIGFzc3VtZWQKICAgICAgICAgIGlmKCRkID09ICdzJyB8fCAkZCA9PSAndycpIHsKICAgICAgICAgICAgICAgJGRlY2ltYWwgKj0gLTE7CiAgICAgICAgICB9CiAgICAgfQogICAgICAKICAgICByZXR1cm4gJGRlY2ltYWw7Cn0KCgoKZWNobyAieDogIiAuIERNUzJEZWNpbWFsKCRkZWdyZWVzID0gNywgJG1pbnV0ZXMgPSA1LCAkc2Vjb25kcyA9IDE2LCAkZGlyZWN0aW9uID0gJ24nKTsKCmVjaG8gInk6ICIgLiBETVMyRGVjaW1hbCgkZGVncmVlcyA9IDE3MSwgJG1pbnV0ZXMgPSAyMSwgJHNlY29uZHMgPSA4LCAkZGlyZWN0aW9uID0gJ2UnKTsKCgo=