Intereting Posts
Автозаполнение текста и контур класса для проекта PHP апострофы нарушают мой mysql-запрос в PHP php – Как подсчитывать элементы элементов в массиве Подписанный URL-адрес для google-ковша не соответствует сигнатуре Как выполнить итерацию результата mysqli_fetch_array ()? PHP: переменные сеанса перезаписываются объявленными переменными с тем же именем Как отправлять POST-данные в файл php с помощью AJAX Разделить строку на текст и номер Установите общий макет для всех модулей в Zend framework 2 несколько текстовых областей с одинаковым именем и обработкой PHP Синхронизация большой локальной базы данных с серверной БД (MySQL) CodeIgniter Active Record "как" игнорирование ", где" Возврат списка цепочек и последнего сообщения каждого сообщения с использованием базы данных php и mysql Как динамически передавать значения флажка выбора в столбцы переменных ajax-вызовов для переменных php как сделать эхо-печать прямо сейчас на PHP?

Преобразование степени, минут, секунд (DMS) в десятичный в PHP

В настоящее время я изучаю использование API Карт Google. Из того, что я читаю, API требует широту и долготу в десятичной степени (DD).

В моей базе данных данные хранятся как DMS.

Пример: 110 ° 29 '01,1 "

Я бы спросил, есть ли у вас ребята какие-нибудь DMS для DD в php. И конвертер должен принимать из одной строки, как в примере выше.

С уважением

    Related of "Преобразование степени, минут, секунд (DMS) в десятичный в PHP"

    Вы можете попробовать, если это работает для вас.

    <?php function DMStoDD($deg,$min,$sec) { // Converting DMS ( Degrees / minutes / seconds ) to decimal format return $deg+((($min*60)+($sec))/3600); } function DDtoDMS($dec) { // Converts decimal format to DMS ( Degrees / minutes / seconds ) $vars = explode(".",$dec); $deg = $vars[0]; $tempma = "0.".$vars[1]; $tempma = $tempma * 3600; $min = floor($tempma / 60); $sec = $tempma - ($min*60); return array("deg"=>$deg,"min"=>$min,"sec"=>$sec); } ?> 

    Решаемые.

      <?php function DMStoDD($input) { $deg = " " ; $min = " " ; $sec = " " ; $inputM = " " ; print "<br> Input is ".$input." <br>"; for ($i=0; $i < strlen($input); $i++) { $tempD = $input[$i]; //print "<br> TempD [$i] is : $tempD"; if ($tempD == iconv("UTF-8", "ISO-8859-1//TRANSLIT", '°') ) { $newI = $i + 1 ; //print "<br> newI is : $newI"; $inputM = substr($input, $newI, -1) ; break; }//close if degree $deg .= $tempD ; }//close for degree //print "InputM is ".$inputM." <br>"; for ($j=0; $j < strlen($inputM); $j++) { $tempM = $inputM[$j]; //print "<br> TempM [$j] is : $tempM"; if ($tempM == "'") { $newI = $j + 1 ; //print "<br> newI is : $newI"; $sec = substr($inputM, $newI, -1) ; break; }//close if minute $min .= $tempM ; }//close for min $result = $deg+( (( $min*60)+($sec) ) /3600 ); print "<br> Degree is ". $deg*1 ; print "<br> Minutes is ". $min ; print "<br> Seconds is ". $sec ; print "<br> Result is ". $result ; return $deg + ($min / 60) + ($sec / 3600); } ?> 

    Здесь вы переходите в широту, долготу в значениях DMS и возвращаете преобразованную строку DMS. Легкий и простой

     function DECtoDMS($latitude, $longitude) { $latitudeDirection = $latitude < 0 ? 'S': 'N'; $longitudeDirection = $longitude < 0 ? 'W': 'E'; $latitudeNotation = $latitude < 0 ? '-': ''; $longitudeNotation = $longitude < 0 ? '-': ''; $latitudeInDegrees = floor(abs($latitude)); $longitudeInDegrees = floor(abs($longitude)); $latitudeDecimal = abs($latitude)-$latitudeInDegrees; $longitudeDecimal = abs($longitude)-$longitudeInDegrees; $_precision = 3; $latitudeMinutes = round($latitudeDecimal*60,$_precision); $longitudeMinutes = round($longitudeDecimal*60,$_precision); return sprintf('%s%s° %s %s %s%s° %s %s', $latitudeNotation, $latitudeInDegrees, $latitudeMinutes, $latitudeDirection, $longitudeNotation, $longitudeInDegrees, $longitudeMinutes, $longitudeDirection ); } 

    Я написал функцию PHP, которая делает то, что задает вопрос: преобразует строку в градусах / минутах / секундах в десятичные градусы. Он принимает несколько различных форматов для строки и имеет честь (NSEW).

    Вот код:

     <?php function convertDMSToDecimal($latlng) { $valid = false; $decimal_degrees = 0; $degrees = 0; $minutes = 0; $seconds = 0; $direction = 1; // Determine if there are extra periods in the input string $num_periods = substr_count($latlng, '.'); if ($num_periods > 1) { $temp = preg_replace('/\./', ' ', $latlng, $num_periods - 1); // replace all but last period with delimiter $temp = trim(preg_replace('/[a-zA-Z]/','',$temp)); // when counting chunks we only want numbers $chunk_count = count(explode(" ",$temp)); if ($chunk_count > 2) { $latlng = $temp; // remove last period } else { $latlng = str_replace("."," ",$latlng); // remove all periods, not enough chunks left by keeping last one } } // Remove unneeded characters $latlng = trim($latlng); $latlng = str_replace("º","",$latlng); $latlng = str_replace("'","",$latlng); $latlng = str_replace("\"","",$latlng); $latlng = substr($latlng,0,1) . str_replace('-', ' ', substr($latlng,1)); // remove all but first dash if ($latlng != "") { // DMS with the direction at the start of the string if (preg_match("/^([nsewNSEW]?)\s*(\d{1,3})\s+(\d{1,3})\s+(\d+\.?\d*)$/",$latlng,$matches)) { $valid = true; $degrees = intval($matches[2]); $minutes = intval($matches[3]); $seconds = floatval($matches[4]); if (strtoupper($matches[1]) == "S" || strtoupper($matches[1]) == "W") $direction = -1; } // DMS with the direction at the end of the string if (preg_match("/^(-?\d{1,3})\s+(\d{1,3})\s+(\d+(?:\.\d+)?)\s*([nsewNSEW]?)$/",$latlng,$matches)) { $valid = true; $degrees = intval($matches[1]); $minutes = intval($matches[2]); $seconds = floatval($matches[3]); if (strtoupper($matches[4]) == "S" || strtoupper($matches[4]) == "W" || $degrees < 0) { $direction = -1; $degrees = abs($degrees); } } if ($valid) { // A match was found, do the calculation $decimal_degrees = ($degrees + ($minutes / 60) + ($seconds / 3600)) * $direction; } else { // Decimal degrees with a direction at the start of the string if (preg_match("/^(-?\d+(?:\.\d+)?)\s*([nsewNSEW]?)$/",$latlng,$matches)) { $valid = true; if (strtoupper($matches[2]) == "S" || strtoupper($matches[2]) == "W" || $degrees < 0) { $direction = -1; $degrees = abs($degrees); } $decimal_degrees = $matches[1] * $direction; } // Decimal degrees with a direction at the end of the string if (preg_match("/^([nsewNSEW]?)\s*(\d+(?:\.\d+)?)$/",$latlng,$matches)) { $valid = true; if (strtoupper($matches[1]) == "S" || strtoupper($matches[1]) == "W") $direction = -1; $decimal_degrees = $matches[2] * $direction; } } } if ($valid) { return $decimal_degrees; } else { return false; } } ?> 

    Здесь он находится на Github с тестовыми примерами: https://github.com/prairiewest/PHPconvertDMSToDecimal

    Это работает очень хорошо:

     <?php echo "<td> $deg&#176 $min' $sec&#8243 </td>"; ?> 

    где deg, min и sec – угловые координаты.