https://foro.gambas-es.org/viewtopic.php?f=5&t=6842&p=41374#p41374
-----------------------------------
Grandamakulo
Martes, 06 Febrero 2018, 10:19

Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal
-----------------------------------
[quote user="vuott" post="41371"]El miembro [url=http://www.gambas-it.org/smf/index.php?action=profile;u=1038]Top Fuel del foro italiano de Gambas me pide señalar esta su función para convertir una coordenada geográfica de formato grados/arcominutos/arcosegundos a formato decimal:

[/quote]

Vuott, [i]stupendo codice[/i]  ;-) , que hay que agradecer a Top Fuel. Y reconozco mi ignorancia: ¡No conocía la función Scan!, iba por la vida usando tan solo Split  :oops:  :lol: 

Es perfectamente válido para los cálculos de longitud escrita [0 a 360]º. Sin embargo, creo, daría un pequeño problema con los de latitud [-90 a 90]º o los de longitud [-180 a 180]º; en concreto, con los negativos. El problema es que al separar la cadena se considera tan solo el signo con el cálculo de los grados y luego se suman —se restarían en valor absoluto— los minutos y segundos.
Como tiendo a una natural farragosidad congénita, mejor lo explico con dos ejemplos: -3º 30' y -3º 15'.
El resultado debería ser, respectivamente, -3,5 y -3,25. Sin embargo con este código resultarán en -2,5 y -2,75.

Pero es algo relativamente sencillo de solucionar:

[code linenumbers=false syntax=gambas]
'...
Dim Signo As Short ' Y no como _boolean_ porque puede ser -1, 0 y 1
'...
Signo = Sgn(CShort(scanna[0]))
gradi = Abs(CShort(scanna[0]))
'...
If Signo < 0 Then decimale=-decimale
Return decimale
[/code]
Como estoy en el trabajo, no puedo comprobar la compatibilidad de Sgn con CShort, pero creo que debería funcionar.

También existe la posibilidad de emplear esta función tal cual está y luego cambiar de signo si existe un "S" al final de la cadena, en caso de que el formato de entrada sea "GGº MM' SS/" N" en lugar de "+GGº MM' SS/"". 


Y sí, el colchón es la máxima expresión de la humanidad. Es el hecho diferenciador de una civilización. Y me gustaría irme ahora mismo a mi casa a civilizarme  :lol:

[i]Un saluto a tutta la comunità italiana![/i]


