DmsConverter.php in Geofield 8
File
src/DmsConverter.php
View source
<?php
namespace Drupal\geofield;
class DmsConverter implements DmsConverterInterface {
public static function dmsToDecimal(DmsPoint $point) {
$lon_data = $point
->getLon();
$lat_data = $point
->getLat();
$lon = round($lon_data['degrees'] + $lon_data['minutes'] / 60 + $lon_data['seconds'] / 3600, 10);
$lat = round($lat_data['degrees'] + $lat_data['minutes'] / 60 + $lat_data['seconds'] / 3600, 10);
$lon = $lon_data['orientation'] == 'W' ? -1 * $lon : $lon;
$lat = $lat_data['orientation'] == 'S' ? -1 * $lat : $lat;
return [
$lon,
$lat,
];
}
public static function decimalToDms($lon, $lat) {
$lat_direction = $lat < 0 ? 'S' : 'N';
$lon_direction = $lon < 0 ? 'W' : 'E';
$lat_in_degrees = floor(abs($lat));
$lon_in_degrees = floor(abs($lon));
$la_decimal = (abs($lat) - $lat_in_degrees) * 60;
$lon_decimal = (abs($lon) - $lon_in_degrees) * 60;
$lat_minutes = floor($la_decimal);
$lon_minutes = floor($lon_decimal);
$la_decimal = ($la_decimal - $lat_minutes) * 60;
$lon_decimal = ($lon_decimal - $lon_minutes) * 60;
$lat_seconds = round($la_decimal);
$lon_seconds = round($lon_decimal);
return new DmsPoint([
'orientation' => $lon_direction,
'degrees' => $lon_in_degrees,
'minutes' => $lon_minutes,
'seconds' => $lon_seconds,
], [
'orientation' => $lat_direction,
'degrees' => $lat_in_degrees,
'minutes' => $lat_minutes,
'seconds' => $lat_seconds,
]);
}
}
Classes
Name |
Description |
DmsConverter |
Helper class to convert point object from one format to the other. |