|
Página 1 de 1
|
Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegu...
Autor |
Mensaje |
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
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
|
#1 Martes, 06 Febrero 2018, 00:31 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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"
|
#2 Martes, 06 Febrero 2018, 01:19 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal
El colchón es lo máximo !
|
#3 Martes, 06 Febrero 2018, 01:55 |
|
|
Grandamakulo
Analista Programador
Registrado: Enero 2016
Mensajes: 311
Edad: 55 Ubicación: En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
|
Re: 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:
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:
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
|
#4 Martes, 06 Febrero 2018, 10:19 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal
Un saluto a tutta la comunità italiana!
Gracias, hermano mediterraneo !
|
#5 Martes, 06 Febrero 2018, 16:17 |
|
|
Grandamakulo
Analista Programador
Registrado: Enero 2016
Mensajes: 311
Edad: 55 Ubicación: En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
|
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.
- 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
- Dim signo As Short
-
- scanna = Scan(coordinata, "*º*'*") 'separiamo i componenti della coordinata
- 'signo = Sgn(CShort(scanna[0]))
- If InStr(scanna[0], "-") Then signo = -1 Else signo = 1
- gradi = Abs(CShort(scanna[0])) 'convertiamoli in numeri
- primi = CByte(scanna[1])
- secondi = CByte(scanna[2])
- decimale = gradi + primi / 60 + secondi / 3600 'calcoliamo il risultato
- If signo < 0 Then decimale = - decimale
- Return decimale
-
- End
-
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
|
#6 Martes, 06 Febrero 2018, 18:45 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Convertir Una Coordenada Geográfica De Formato Grados/arcominutos/arcosegundos A Formato Decimal
Muy bien, Grandamakulo !
|
#7 Miercoles, 07 Febrero 2018, 01:11 |
|
|
Grandamakulo
Analista Programador
Registrado: Enero 2016
Mensajes: 311
Edad: 55 Ubicación: En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
|
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
|
#8 Miercoles, 07 Febrero 2018, 21:19 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|