Last active
March 26, 2024 23:15
-
-
Save stojangb/2d93e82ea84f63b24186d5c0379ea49f to your computer and use it in GitHub Desktop.
Esta función sirve para convertir coordenadas GPS (latitud y longitud) desde el formato grados, minutos y segundos, al formato decimal. a partir de un texto tipo 72°23'54.96 W y obtener -72.3986 funciona en PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Funcion para convertir coordenadas. | |
function convertir_coordenadas($latitud_o_longitud, $posicion_letra, $negativo) | |
{ | |
if ($negativo == true) { | |
$negativo_o_positivo = -1; | |
} else { | |
$negativo_o_positivo = 1; | |
} | |
//Obtenemos posicion ° | |
$posicion_° = strpos($latitud_o_longitud, utf8_decode('°')); | |
//Obtenemos posicion ' | |
$posicion_com_simple = strpos($latitud_o_longitud, "'"); | |
//Obtenemos posiciones, convertimos a float y hacemos las divisiones necesarias | |
//Obtenemos el texto entre 0 y ° | |
$parte_uno = floatval(substr($latitud_o_longitud, 0, $posicion_°)); | |
//Obtenemos el texto entre ° y ' | |
$parte_dos = (floatval(substr($latitud_o_longitud, $posicion_° + 1, $posicion_com_simple - 1 - $posicion_°))) / 60; | |
//Obtenemos el texto entre ' y la letra | |
$parte_tres = (floatval(substr($latitud_o_longitud, $posicion_com_simple + 1, $posicion_letra - 1 - $posicion_com_simple))) / 3600; | |
$resultado = ($parte_uno + $parte_dos + $parte_tres) * $negativo_o_positivo; | |
return $resultado; | |
} | |
//Segunda parte (Leer primera parte al final del documento) | |
//Asignamos un valor a nuestra latitud o longitud ejemplo: | |
$latitud = utf8_decode("35°20'18.24 S"); //El sistema solo reconocera este formato, si cambia el formato hay que ajustar el código. | |
//Nos dirigimos a la parte 3, al final del documento. | |
//Sabemos que | |
//Oeste - West es negativo junto con South - Sur | |
//Y | |
//Este - East es positivo junto con Norte - North | |
//Comprobamos las mayusculas y minusculas de North, South, West, East: | |
//Conversion de latitudes | |
if (strpos($latitud, "N") !== false) { | |
$posicion_letra = strpos($latitud, "N"); | |
$latitud = convertir_coordenadas($latitud,$posicion_letra,false); | |
} | |
if (strpos($latitud, "n") !== false) { | |
$posicion_letra = strpos($latitud, "n"); | |
$latitud = convertir_coordenadas($latitud,$posicion_letra,false); | |
} | |
if (strpos($latitud, "S") !== false) { | |
$posicion_letra = strpos($latitud, "S"); | |
$latitud = convertir_coordenadas($latitud,$posicion_letra,true); | |
} | |
if (strpos($latitud, "s") !== false) { | |
$posicion_letra = strpos($latitud, "s"); | |
$latitud = convertir_coordenadas($latitud,$posicion_letra,true); | |
} | |
//Conversion de longitudes | |
if (strpos($longitud, "W") !== false) { | |
$posicion_letra = strpos($longitud, "W"); | |
$longitud = convertir_coordenadas($longitud,$posicion_letra,true); | |
} | |
if (strpos($longitud, "w") !== false) { | |
$posicion_letra = strpos($longitud, "w"); | |
$longitud = convertir_coordenadas($longitud,$posicion_letra,true); | |
} | |
if (strpos($longitud, "E") !== false) { | |
$posicion_letra = strpos($longitud, "E"); | |
$longitud = convertir_coordenadas($longitud,$posicion_letra,false); | |
} | |
if (strpos($longitud, "e") !== false) { | |
$posicion_letra = strpos($longitud, "e"); | |
$longitud = convertir_coordenadas($longitud,$posicion_letra,false); | |
} | |
//Metodo de uso | |
//Previo al texto "Conversion de latitudes" | |
//Debemos asignar nuestra $latitud en formato texto para que el sistema reconozca la letra correspondiente y haga la conversión | |
//Solo en caso de detectar el texto correctamente... Ejemplo (Primera parte, subimos a la segunda parte...) | |
//Parte 3 | |
echo $latitud; //En este lugar la variable debe haber sido reconocida y convertida. | |
// Resultado: -35.3384 | |
//Se agradecen mejoras al código, se que deben haber muchas formas y mejores. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hola. saludos. Cómo se podría hacer lo contrario?
Tengo una latitud y una longitud y quisiera convertirla a Grados, minutos y segundos.