miércoles, 17 de junio de 2015

Conversión de ficheros Kml III.

Definitivamente cada vez que abro un  fichero kml me encuentro con una estructura cada vez mas compleja, pero que a su vez facilita su conversión a otros formatos de ficheros con caminos o rutas de gps.

  • La última versión que me he encontrado de un fichero kml proviene de OruxMap, GPS para teléfono listillo.
  • Copio el fichero kml como texto. Trabajo con la copia TXT.
  • En las anteriores entradas dedicadas a la conversión de ficheros kml utilizaba las coordenadas incluidas entre las etiquetas <coordinates> y </coordinates>.  Esto sigue valiendo pero, en este caso, voy a utilizar las otras coordenadas etiquetadas con <gx:Track> y  <gx:coord>
  • En versiones anteriores las coordenadas estaban separadas por un espacio, sin salto de línea, lo que obligaba a incluirlo con el editor de textos. En este caso, los parámetros de cada punto están separados por una coma (-2.6815071,42.1721668,1078.60)
  • En este fichero kml proveniente de OruxMap nos encontramos con que las coordenadas aparecen dos veces, una entre las etiquetas <coordinates> y </coordinates> y, para mi, la nueva inclusión entre las etiquetas <gx:Track> y </gx:Track>. Este fichero incluye un apartado con la fecha-hora de cada punto Este fichero si incluye los satos de línea.
  • A su vez cada coordenada esta entre las etiquetas <gx:coord> y </gx:coord>. Los parámetros, en este caso, están separados por un espacio.
  • La fecha y hora de cada punto aparecen entre las etiquetas <when></when>.
  • Si el fichero no ha sido manipulado y los saltos de línea están donde deben estar la conversión a otros formatos es muy sencilla. Si estuviese manipulado, creando saltos de línea arbitrarios, habría que eliminar todos los saltos de línea para volver a incluirlos, de manera similar a lo explicado en la entrada anterior.
  • Para pasar los puntos a excel solo hay que copiar y pegar. 
  • Copiamos todas las líneas <gx:coord>-2.6742951 42.1623423 1091.10</gx:coord> en la columna A de una hoja excel. Preferiblemente, en este paso, no separamos los distintos parámetros.
  • Copiamos todas las líneas <when>2015-05-30T12:35:38Z</when> en la columna A de la hoja2, Preferiblemente, en este paso, no separamos los distintos parámetros.
  • Con editar->reemplazar eliminamos las etiquetas. <when>,</when>,<gx:coord> y </gx:coord> por espacio o por carácter nulo.
  • Eliminadas las etiquetas <when> y </when> de la columna A de la hoja2 copiamos la columna A de la hoja2 en la B de la hoja2.
  • En la columna B de la hoja2  (solo en la B) reemplazamos Z por nulo y T por espacio.
  • En c1 ponemos =SUSTITUIR(B1;",";"."). Arrastramos la fórmula hasta el final. Con esto tenemos la fecha en tres formatos.
  • En la hoja1 pasamos, con datos a columnas, la columna A.
  • Pasamos todos los campos como texto.
  • Después de pasar los datos de texto a columna nos queda la longitud en la columna A, latitud en la B y la altura en la C.
  • Copiamos o vinculamos en D la fecha que mas nos convenga para la conversión que queramos hacer. 
  • Concatenamos latitud, longitud, altura y fecha según el tipo de conversión. Como referencia, libro excel y formulas utilizadas la entrada anterior a esta de este blog.



jueves, 4 de junio de 2015

Conversión de un fichero GPX a formato PLT y otros formatos.

Libro excel
Tengo una entrada anterior dedicada a este tema. Reconozco que es una forma muy barroca de resolver algo que se puede resolver  mejor y mucho mas fácilmente. 
Lo mas complicado de la conversión de un fichero GPX a otro formato es pasar todos los parámetros de cada uno de los puntos a una sola línea, con el añadido de que si se ha manipulado el fichero los saltos de línea pueden estar en cualquier sitio. Aunque este tipo de conversiones es mucho mas fácil hacerlas programando  he trabajado este tipo de conversiones para hacerlas sin programación. He conseguido hacerlo de dos maneras, ambas son fáciles de hacer pero ambas son un poco complicadas de explicar. ¡Espero acertar!

Primera y, quizás, mas sencilla:
  • Preparamos un fichero GPX solo con un track, sin rutas ni waypoints. De momento solo garantizo el resultado utilizando un datum WGS84.
  • Copiamos el fichero GPX a un fichero de texto (TXT). Al finalizar cambiaremos el .txt por .htm.
  • Editamos con un editor de textos (bloc de notas).
  • Como el resultado final va a ser un fichero HTM (página web) debemos prescindir de los delimitadores de etiquetas HTML (<>). En este caso no voy a necesitarlos de nuevo pero si alguien desea recuperarlos después puede reemplazarlos por un MayorQue o un MenorQue y luego hacer la operación inversa.
  • Los parametros de los puntos de un track, en cualquiera de los formatos, son latitud, longitud, altura y fecha con hora del momento en que se tomó. Estos dos últimos parámetros pueden ser opcionales.
  • Como en un paso posterior en Excel voy a pasar el texto a columnas elijo como separador la coma (,). 
  • Reemplazamos < por el signo coma (,)
  • Reemplazamos > por el signo coma (,)
  • Reemplazamos " (comillas) por el signo coma (,)
  • Reemplazamos ,trkpt por <br>,trkpt
  • En este punto podemos reemplazar trkpt, lat=, lon=, ele, time y / por un espacio o bien eliminarlos como parte del trabajo en excel.
  • Salvamos y guardamos el fichero como .htm
  • Hacemos un doble click sobre este fichero. Si hay muchos puntos puede tardar mucho en abrirse.
  • La primera línea que se ve es la cabecera del fichero. A continuación deben deben aparecer como n líneas con los datos de los puntos del track :
trkpt lat=,42.17672892, lon=,42.17672892, ,ele,1065,/ele, ,time,2009-1-17T09:01:37Z,/time,/trkpt,


Abrimos un libro excel, en la página htm seleccionamos las todas líneas de los puntos, copiamos y pegamos en el libro Excel, normalmente en la casilla A1. Si hemos copiado la cabecera la eliminamos del libro excel.

Ya con el libro Excel:
  • Seleccionamos la columna con las líneas copiadas.
  • En Datos buscamos Texto en columnas.
  • Indicamos que es un texto delimitado. Marcamos la casilla "coma".
  • Importamos todos los campos como texto, si los importamos como general nos darán problemas. En este punto podemos desechar los literales y otros campos inútiles. 
  • Una vez pasado el texto a columnas, dependiendo de la conversión que vayamos a hacer, hay que pasar la altura de metros a pies y trabajar el formato de la fecha.
  • La fecha de los ficheros GPX tiene el formato 2009-1-17T09:01:37Z. Eliminamos la T y Z y lo convertimos a número con =SUSTITUIR(SUSTITUIR($I1;"T";" ");"Z";"")+0. Cambiamos la coma por punto con =SUSTITUIR(L1;",";".").
  • La altura del punto para pasarlas de metros a pies la dividimos por 0,32. Sustituimos la como por un punto con =SUSTITUIR(N1;",";".")
  • Cada línea de puntos de un fichero plt esta compuesta por Latitud,Longitud ,0, Altura, Fecha en número, fecha en formato fecha.
Cabera de un fichero PLT:

En oziExplorer creamos un fichero de track (plt) con un par de puntos. Abrimos ese fichero con el editor de textos, borramos los puntos que hemos utilizado para simular un track y añadimos, mediante un copia-pega los puntos procedentes del fichero GPX.
Salvamos y probamos.

OziExplorer Track Point File Version 2.1
WGS 84
Altitude is in Feet
Reserved 3
0,5,255,19/05/2015 14:25:33                ,0,0,0,2951611,-1,0
1454 Sustituir, aunque no es necesario, por el número de líneas.
41.889032,-8.849871 ,0, 3, 41039.3403935185,05-10-2012 08:10:10

Segundo método:

Aquí la cuestión, como ya he dicho, consiste en situar en una sola línea todos los parámetros de un punto. El método que utilizo para conseguir esta alineación es, primero, eliminar los satos de línea para después añadirlos antes del primer parámetro del punto.

Tengo dos s.o. WXP y Guadalinex. En WXP la sustitución de los satos de línea se puede hacer con el block de notas (noteppad), y en Guadalinex se puede hacer, mucho mas sencillo con el editor de textos GEDIT. GEDIT también tiene una versión, gratuita, para windows.

******************************************************

  • He cambiado de sistema a Windows7. Este cambio, además de S.O. supone un cambio de máquina (de 32 bits a 64) que ha dejado inútil mi colección de programas, casi ninguno me vale ya. De todas maneras es un cambio que, en algún momento, hay que hacer.
  • En cuanto a los saltos de línea, los primeros pasos parecen indicar que, a veces, lo que funcionaba en WXP no funciona en Windows7.
  • A fecha de hoy (31/05/2016). Seguiré probando y si encuentro solución ya la subiré.
  • En un primer intento quiero convertir un fichero GPX  que  he tratado con un programa bajo  W7.
  • De momento, si el fichero GPX está tal y como lo bajas del GPS, parece que sigue funcionando como en WXp.
Solución encontrada (2/6/2016):
  • Sigo sin saber que carácter se me ha colado en el fichero. Intuyo que es algún código no ASCII, quizás UNICODE u otro.
  • Abro con GEDIT el fichero en cuestión. Selecciono el texto que me interese convertir.
  • Lo copio en una hoja excel (A1).
  • Después del copia pega cada línea debe quedar en una sola  celda.
  • En otra columna (B, celda B1) pongo la siguiente fórmula: =LIMPIAR(ESPACIOS(A1)). La función LIMPIAR elimina los caracteres no imprimibles. 
  • Arrastro la formula hasta el final.
  • Copio la columna B.
  • Abro en GEDIT un documento nuevo.
  • Pego la columna copiada.
  • Elimino los saltos de línea tal y como se explica a continuación.
  • Coloco un salto de línea a principio de cada punto.

******************************************************
Con GEDIT:
  • Copiamos el fichero GPX como fichero de texto. Lo abrimos con GEDIT. Para GEDIT el salto de línea es \n.
  • Eliminamos los saltos de línea con GEDIT. Reemplazamos \n por un espacio o un carácter nulo. 
  • Eliminamos los retornos de carro con GEDIT. Reemplazamos \r por un espacio o un carácter nulo. 
  • Reemplazamos <trkpt por \n<trkpt. Esto sitúa un salto de línea antes del inicio de cada punto.
  • Hacemos el resto de las sustituciones del primer método.
  • Salvamos como TXT y abrimos el fichero con excel.
  • Pasamos los datos a columnas, eliminamos literales, preparamos fecha y altura y continuamos como en el primer punto.
Con block de notas (notepad):

Si el fichero GPX no ha sido manipulado entre los caracteres visibles aparece un cuadradito. Este "cuadradito" es un salto de línea. Lo copiamos, elegimos reemplazar y pegamos el cuadradito en reemplazar y lo reemplazamos por un espacio o un carácter nulo. Reemplazamos <trkpt por cuadradito<trkpt. Continuamos como en el método anterior.
Si el fichero GPX ha sido manipulado el cuadradito ya no aparece. En este caso abrimos excel, escribimos en cualquier celda =caracter(10) y nos debe aparecer el cuadradito. Sustituimos según el paso anterior y continuamos según lo explicado.

** Válido para WXP. Los windows mas modernos parece que no se comportan igual.