Skip to content

Instantly share code, notes, and snippets.

@stojangb
Last active March 26, 2024 23:15
Show Gist options
  • Save stojangb/2d93e82ea84f63b24186d5c0379ea49f to your computer and use it in GitHub Desktop.
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
//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.
@Marje123456
Copy link

Marje123456 commented Mar 26, 2024

Hola. saludos. Cómo se podría hacer lo contrario?
Tengo una latitud y una longitud y quisiera convertirla a Grados, minutos y segundos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment