fork(1) download
  1. <?php
  2.  
  3. function DMS2Decimal($degrees = 0, $minutes = 0, $seconds = 0, $direction = 'n') {
  4. //converts DMS coordinates to decimal
  5. //returns false on bad inputs, decimal on success
  6.  
  7. //direction must be n, s, e or w, case-insensitive
  8. $d = strtolower($direction);
  9. $ok = array('n', 's', 'e', 'w');
  10.  
  11. //degrees must be integer between 0 and 180
  12. if(!is_numeric($degrees) || $degrees < 0 || $degrees > 180) {
  13. $decimal = false;
  14. }
  15. //minutes must be integer or float between 0 and 59
  16. elseif(!is_numeric($minutes) || $minutes < 0 || $minutes > 59) {
  17. $decimal = false;
  18. }
  19. //seconds must be integer or float between 0 and 59
  20. elseif(!is_numeric($seconds) || $seconds < 0 || $seconds > 59) {
  21. $decimal = false;
  22. }
  23. elseif(!in_array($d, $ok)) {
  24. $decimal = false;
  25. }
  26. else {
  27. //inputs clean, calculate
  28. $decimal = $degrees + ($minutes / 60) + ($seconds / 3600);
  29.  
  30. //reverse for south or west coordinates; north is assumed
  31. if($d == 's' || $d == 'w') {
  32. $decimal *= -1;
  33. }
  34. }
  35.  
  36. return $decimal;
  37. }
  38.  
  39.  
  40.  
  41. echo "x: " . DMS2Decimal($degrees = 7, $minutes = 5, $seconds = 16, $direction = 'n');
  42.  
  43. echo "y: " . DMS2Decimal($degrees = 171, $minutes = 21, $seconds = 8, $direction = 'e');
  44.  
  45.  
  46.  
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
x: 7.0877777777778y: 171.35222222222