Я успешно использую код PHP ниже (здесь много ресурсов!), Чтобы изменить десятичные градусы на градусы минуты секунды. Навигационные приложения, которые я использую, экспортируют координаты в десятичном формате, поэтому 50.360503 и отображение 50 ° 21.638N. В морской навигации мы используем градусные минуты, а затем десятые вместо истинных секунд при работе с бумажными картами.
Кто-нибудь из вас может дать мне несколько советов о том, как изменить десятичное число вместо кода ниже?
function convertDecimalToDMSLongitude($dec)
{
// Converts decimal longitude / latitude to DMS
// ( Degrees / minutes / seconds )
// This is the piece of code which may appear to
// be inefficient, but to avoid issues with floating
// point math we extract the integer part and the float
// part by using a string function.
$vars = explode(".",$dec);
$deg = $vars[0];
$tempma = "0.".$vars[1];
$tempma = $tempma * 3600;
$min = floor($tempma / 60);
$sec = $tempma - ($min*60);
$sec = number_format($sec, 0);
if ($deg <= 0) {
$hemisphere = 'W';
} else {
$hemisphere = 'E';
}
$degrees = abs($deg);
if ($degrees <= 9) {
$deg = '00'.$degrees;
} elseif ($degrees >= 10) {
$deg = '0'.$degrees;
} elseif ($degrees >= 100) {
$deg = $degrees;
}
return $deg.'.'.$min.'.'.$sec.''.$hemisphere;
}
У меня есть это (ниже), которое близко;он возвращает 50 ° 21630180.N при вводе 50.360503 в качестве десятичного числа. Мне просто нужно выделить 21 минуту из оставшейся цифры. Приложение GPS (Navionics или iSailor) экспортируется в десятичном виде и показывает 50 ° 21,638 Н. на экране.
$vars = explode(".",$dec);
$deg = $vars[0];
$tempma = "0.".$vars[1];
//$tempma = $tempma * 3600;
//$min = floor($tempma / 60);
//$sec = $tempma - ($min*60);
//$sec = number_format($sec, 0);
$min = $vars[1]*60;
$sec = '';
if ($deg >= 0) {
$hemisphere = 'N';
} else {
$hemisphere = 'S';
}
return abs($deg).'.'.$min.'.'.$sec.' '.$hemisphere;