Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegu...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
El miembro 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:

Public Sub Form_Open()

Dim coordinata As String = "115°48'35"
Dim decimale As Float 'coordinata in formato decimale
decimale = converti(coordinata)
Print decimale

End


Public Function converti(coordinata As String) As Float 'converte una coordinata da gradi/primi/secondi in cooordinata decimale

Dim scanna As String[] 'array per splittare la coordinata
Dim gradi As Short
Dim primi, secondi As Byte
Dim decimale As Float

scanna = Scan(coordinata, "*°*'*") 'separiamo i componenti della coordinata
gradi = CShort(scanna[0]) 'convertiamoli in numeri
primi = CByte(scanna[1])
secondi = CByte(scanna[2])
decimale = gradi + primi / 60 + secondi / 3600 'calcoliamo il risultato
Return decimale

End

 



 
última edición por vuott el Martes, 06 Febrero 2018, 00:37; editado 4 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
Muchas gracias para Top Fuel.

Supongo que las funciones Scan(), CShort() y CByte() pueden manejar la cadena sin errores cuando contiene espacios, como en: "115° 48' 35"

Aún no lo he probado, creo que es hora de descansar aquí en España      

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
jguardon escribió: [Ver mensaje]
creo que es hora de descansar aquí en España      


El colchón es lo máximo !
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
vuott escribió: [Ver mensaje]
El miembro 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:



Vuott, stupendo codice   , 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    

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:

'...
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
 

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  

Un saluto a tutta la comunità italiana!
 



 
última edición por Grandamakulo el Martes, 06 Febrero 2018, 15:01; editado 4 veces 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
Grandamakulo escribió: [Ver mensaje]
Un saluto a tutta la comunità italiana!


Gracias, hermano mediterraneo !  
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
Comprobado, funciona. Eso sí, ojo con los signos empleados en grados y minutos.
Código: [Descargar] [Ocultar]
  1. Public Function converti(coordinata As String) As Float 'converte una coordinata da gradi/primi/secondi in cooordinata decimale
  2.  
  3. Dim scanna As String[] 'array per splittare la coordinata
  4. Dim gradi As Short
  5. Dim primi, secondi As Byte
  6. Dim decimale As Float
  7. Dim signo As Short
  8.  
  9. scanna = Scan(coordinata, "*º*'*") 'separiamo i componenti della coordinata
  10. 'signo = Sgn(CShort(scanna[0]))
  11. If InStr(scanna[0], "-") Then signo = -1 Else signo = 1
  12. gradi = Abs(CShort(scanna[0])) 'convertiamoli in numeri
  13. primi = CByte(scanna[1])
  14. secondi = CByte(scanna[2])
  15. decimale = gradi + primi / 60 + secondi / 3600 'calcoliamo il risultato
  16. If signo < 0 Then decimale = - decimale
  17. Return decimale
  18.  
  19. End
  20.  


PS.—El código anterior no funcionaba bien del todo, por que en el intervalo (0,-1) el primer carácter tras el signo es un 0, y el signo de -0 y el de cero es... ¡tachán!, 0. Para evitarlo, ahora se comprueba directamente si existe un signo menos delante —línea 10 comentada y línea 11 actual—. Evidentemente, no tiene demasiado sentido que la variable «signo» se llame así, pero me lo perdonáis.
 



 
última edición por Grandamakulo el Miercoles, 07 Febrero 2018, 21:17; editado 1 vez 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
Muy bien, Grandamakulo !    
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal 
 
Muchas gracias, Vuott.  
PS.—Le he hecho una pequeña corrección porque fallaba en los valores (0,-1). Ahora ya está bien, espero  
 



 
Grandamakulo - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron