jueves, 29 de septiembre de 2016

PSeudo Osciloscopio con Excel.

Se trata de utilizar un gráfico del tipo XY para ver, y medir, la forma de una señal eléctrica.
Tengo un par de proyectos pendientes, uno de ellos poner en marcha de nuevo una vieja mobylette campera. La bobina es nueva, los platinos son nuevos, el circuito eléctrico está bien pero no da chispa, no es que de chispa fuera de tiempo, es que no da chispa.
Con un microprocesador Arduino Uno construí un pequeño aparato de medida para medir la señal en los platinos. Básicamente la cosa consiste en medir, mediante el conversor A/D del arduino, el nivel de tensión y escribir en una tarjeta SD ese valor y el tiempo, en microsegundos, en el que se hace la medida. Anoto el valor de conversión A/D leido no el valor en voltios.
El conversor A/D de Arduino es lento, para medir señales de alta frecuencia no vale, pero para este aparato de medida, si.
Otro tema es ver la señal. Hice, utilizando una pantalla tft, un preliminar para ver la señal en el propio aparato. Ya en una ocasión anterior había tocado este tema, ver la señal mediante un gráfico excel, así que decidí terminarlo.
  • Los datos los paso a excel, de momento, mediante un copia-pega. Habro el fichero con las medidas y las copio a Excel (Datos0)
  • El gráfico, como ya he dicho, es del tipo XY con rango variable. Para variar el rango utilizo la función desref().
  • El concepto es "voy a ver n puntos a partir de un punto punto determinado.
  • Tanto para seleccionar el primer punto como para determinar el número de puntos a ver utilizo barras de desplazamiento.




Variables y rangos con nombre:
  • BDI (=Aux!$A$2) Celda vinculada con la barra de desplazamiento que selecciona el primer punto de la gráfica.
  • BDI (=Aux!$B$2) Celda vinculada con la barra de desplazamiento que selecciona el número de puntos de la gráfica.
  • Mcrs. (=DESREF(Datos!$D$2;BDI;0;BDN;1)) Rango del eje de tiempos.
  • Vol, =DESREF(Datos!$C$2;BDI;0;BDN;1) Rango de los valores de tensión en el eje Y.
  • Sonda, =Aux!$A$5. Como la tensión de salida en los platinos es superior a 5 v. tuve que construir un divisor de tensión para poder medir tensiones superiores a 5 v. Es el factor de división.
  •  PValorX, =INDIRECTO("datos!$a$" & Aux!$A$2+2). Es el valor del primer punto a representar. Este valor se resta a todos los valores vistos con el fin de que el primer valor en el eje de tiempos de la gráfica sea cero.
  • Leyenda, sin uso como variable con nombre, ="V.Min "&TEXTO(Aux!A3;"0,000")&CARACTER(10)&"V.Max="&TEXTO(Aux!A2;"0,000")&CARACTER(10)&"Microseg="&MAX(Mcrs) &CARACTER(10)&"Sonda="&Sonda
Otras funciones utilizadas:
  • TEXTO(F2;"0,000") : Convierte el valor de F2 en texto con el formato deseado.
  • Max.
  • Min.
Gráfico:
La primera barra de desplazamiento selecciona el primer punto. La segunda, inmediatamente debajo, el número de puntos. Hay una tercera barra sin uso. La serie de la gráfica utiliza rangos con nombre, según:
 =SERIES(Aux!$H$2;SeudoOsciloscopio.xls!Mcrs;SeudoOsciloscopio.xls!Vol;1)

Datos0:
Columna A: Tiempos, sin acumular, entre medidas.
Columna B: Valores A/D medidos.
Columna C: Tiempos acumulados.
Columna D: Igual a columna B.

Datos:
Columna A: Tiempos acumulados. Igual a Datos0!C
Columna B: Valores A/D. Igual a Datos0!B
Columna C: Valor A/D convertido a voltios, teniendo en cuenta el factor del divisor de tensión (sonda).
Columna D: Tiempos, descontado el primer valor del eje de tiempos.





miércoles, 9 de marzo de 2016

Aforador.

  • Me llega una pregunta a través de mi blog AhoraMeDedicoAlCacharreo, alguien esta intentando construir un aforador con un Arduino y me pide ayuda con las formulas. 
  • El aforador mide el nivel de ocupación de un depósito de agua cilíndrico tumbado. De alguna manera se mide la altura o nivel de agua con respecto al suelo.
  • Para emular el sensor de nivel utilizo un potenciometro o divisor de tensión en A0.
  • El espacio vacío, visto desde el alzado, deja un segmento circular sin ocupar. El área del segmento circular es el área del sector circular (quesito) menos el área del triangulo definido por los radios y la cuerda del segmento  vacío (ver gráfica).
Me entra la curiosidad y me pongo a ello. Recupero algunos conceptos ya casi olvidados.
  • Sector circular. "Quesito" que contiene el segmento circular.
  • Segmento circular. Intento encontrar las fórmulas en internet , no me entero de nada, y decido desarrollarlas por mi mismo. A veces es necesario este tipo de decisiones para refrescar conocimientos.
  • Coseno del ángulo suplementario:\cos \alpha = -\cos (180^\circ - \alpha) 
  • Teorema de Pitágoras.
Empiezo el desarrollo de las fórmulas que me permitan calcular los volúmenes correspondientes. Creo que no me he equivocado, creo que las fórmulas son correctas, pero pudiera suceder que no. Ahí va mi borrador.


  • No me entiendo a mi mismo. No se por que calculo de una manera tan rara el tercer lado del triángulo (1/2 de b), si con aplicar directamente  Pitágoras  vale. Conozca la hipotenusa y uno de los catetos, luego R²=h²+b²=>b²=R²-h²=>b=raiz(R²-h²). Podría justificarme diciendo que así utilizamos, y refrescamos, trigonometría.
  • Preparo una batería de medidas para comprobar un posible error al calcular las fórmulas.
  • H, altura del nivel del líquido, H=2*R (2*Radio). Esto equivale a barril lleno. Esta prueba la cumplen.
  • H, altura del nivel del líquido, H=R (Radio). Esto equivale a barril medio lleno. Esta prueba la cumplen.
  • Dos medidas con H=2R-x y H=x. El espacio libre en la primera medida debe ser igual al espacio lleno de la segunda medida y viceversa. Esta prueba también la cumplen para cualquier probado de x.

  • Si menos de la mitad del barril está lleno el segmento  circular menor es el espacio ocupado, no el espacio vacío.


  • Cuando barril tiene un nivel menor a la mitad la altura del  barril, las formulas calculadas siguen valiendo. La altura del triangulo y el coseno del ángulo pasan a ser negativos. Para cosenos negativos la función ACOS de excel y la función  ATAN2 de arduino devuelven el ángulo suplementario, aquel que sumado al ángulo da 180º, lo que al repartir el área del circulo proporcionalmente nos da el área ocupada por el resto del circulo. Como el área del triángulo da negativo, recordemos que h es negativo, al restarla, añadimos al resto del circulo ese valor,  sumando todo ello la parte no ocupada del barril.


Llevo las fórmulas a excel. Utilizo variables con nombre.
  • A=H-R
  • Area_Sector=R^2*ACOS(A/R)
  • Area_Segmento=Area_Sector-Area_Triangulo
  • Area_Triangulo=A*RAIZ(R^2-A^2)
  • H=$Aforador.$E$2
  • L=$Aforador.$B$2
  • R=$Aforador.$A$2
  • Radio=$Aforador.$A$2
  • V=$Aforador.$D$2
  • Volumen_ocupado=V-Volumen_Segmento
  • Volumen_Segmento=Area_Segmento*L
  • Traduzco el desarrollo en excel a código Arduino.

Código Arduino:



#include <math.h>



double Pi=3.1415926536;

double Radio=50,Longitud=100;

double V=pow(Radio,2)*Pi*Longitud, h,AT,HAnt,ASec,ASeg,VSeg,VOcu,PorCen;



unsigned long H;



void setup()

{

Serial.begin(9600);

Serial.println(V);

Calculos();

}



void loop()

{

    H=analogRead(A0)*2*Radio/1023;

  if(H!=HAnt)

  {Calculos();

  //  Serial.println(H);

    HAnt=H;

  }

 

}



void Calculos()

{



  h=H-Radio;

  // Area del triangulo h*RAIZ(R^2-h^2)

  AT=h*sqrt(pow(Radio,2)-h*h);

 // area del sector R^2*ACOS(A/R)

 ASec=pow(Radio,2)*MiACos(h/Radio);

 //Area_Sector-Area_Triangulo

 ASeg=ASec-AT;

 //Volumen segmento Area_Segmento*Longitud

 VSeg=ASeg*Longitud;

 VOcu=V-VSeg;

 PorCen=VOcu*100/V;

 Serial.println("****************************************");

 Serial.println(Radio);

 Serial.println(Longitud);

 Serial.println(V);

 Serial.println(AT);

 Serial.println(ASec);

 Serial.println(ASeg);

 Serial.println(VSeg);

 Serial.println(VOcu,2);

 Serial.println(PorCen,2);

 Serial.println("****************************************");

}



unsigned long Fact(long N)

{unsigned long I;

 unsigned long R=1;

 for(I=1;I<=N;I=I+1)

 {

  R=R*I;



 }

return R;

}



float Grados(float Rd)

{

  float G=(Rd*360)/(2*Pi);

return G;



}



float Radianes(float G)

{

  float Rd=(G*Pi)/180;



return Rd;



}











float Pi4()



{

float signo=1,i;

float p=0,x4=1/2+1/3,x1,x2,x3 ;//1/2+1/3:



for(i=1;i<40;i=i+2)

{

  x1=signo/i;



  x2=1/pow(2.0,i);

  x3=1/pow(3.0,i);



/*

if(i>15)

 {

  x2=1/pow(2.0,15);

  x2=x2/pow(2.0,i-15);

  x3=1/pow(3.0,15);

  x3=x3/pow(3.0,i-15);



 }*/

//p=p+signo/(i*pow(2.0,i))+ signo/(i*pow(3.0,i));

p=p+x1*x2+x1*x3;

signo=signo*(-1) ;

/*Serial.print(i,0);

Serial.print(" ");

Serial.print(x2,20);

Serial.print(" ");

Serial.println(x3,20);*/

}



return p;

}







float MiACos(float R)

{

float S, C, T;

C = R;

S = sqrt(1 - pow(R , 2));









return atan2(S,C);



}





float MiASen(float R)

{

float S, C;

S = R;

C = sqrt(1 - pow(R , 2));







return atan2(S,C);



}


martes, 19 de enero de 2016

Ángulo entre paredes con excel.


Funciones excel utilizadas:
  • ACOS($E$2)
  • GRADOS($F$2)
  • TEXTO(Escala*$Aux.H4;"0,000")
  • Suma()
  • SENO($Datos.$F$2)
  • Implicitamente, coseno.



Variables con nombre : Escala

Dada mi actual sequía de ideas para desarrollar en excel, cualquier parida es una idea. 
El domingo pasado estaba intentando colocar un antiguo reloj de pared en una esquina de mi casa. El mueble, o lo que podríamos llamar mueble, en realidad es una plataforma y poco mas, es un mueble esquinero. El sitio en donde mi mujer decidió que debía ir el reloj es la intersección de dos paredes que no hacen un ángulo de 90º, es un ángulo mas cerrado. Después de hacer los correspondientes taladros en la pared y atornillar unas regletas que hacen de soporte vi que colocar el mueble esquinero no iba a ser tan fácil como yo suponía. Como ya era tarde dejé de trastear, pero no de pensar, y me dije ¿Como calculo el ángulo entre esas paredes?¿Como dibujo una plantilla para hacer un nuevo soporte?
Una vez mas puedo calcularlo, bien gráficamente, bien mediante excel. 

Medidas a realizar: 
  • Marco un origen en la intersección de las dos paredes. 
  • Manteniendo la línea horizontal llevo, desde el origen marcado, sobre una de las paredes una distancia determinada, en este caso la longitud de las regletas soporte, 44cm. (A)
  • Marco el punto.
  • Hago lo mismo sobre la otra pared. (B).
  • Mido la distancia entre los dos puntos marcados. (C).
  • Conviene que A=B.

Gráficamente debería trazar a escala la distancia C y, desde sus extremos, trazar con un compás, también a escala, las distancias A y B. La intersección nos da el tercer vértice del triángulo. Uniendo los puntos tenemos dibujado el ángulo entre paredes.

Matemáticamente, utilizo el teorema del coseno. Despejo el coseno, que es el único valor que no conozco. En excel calculo el coseno, a partir del coseno conozco el ángulo en radianes mediante arco coseno (=ACOS($D$2)) y el ángulo en grados mediante la función grados. 

Conocido el ángulo, en el gráfico, uno de los lados lo dibujo sobre el eje X y para el otro cálculo x e y utilizando el seno y el coseno del ángulo entre paredes.
Escalando los valores medidos calculo las dimensiones de la nueva plataforma para colocar el reloj.















martes, 22 de diciembre de 2015

Cajonera en esquina. Libro excel para resolver, y no hacer, una cajonera rara.

Lo vi en facebook, alguien lo había subido. Me llamó la atención. Desde luego es una manera rara de resolver un espacio en esquina. Desde el principio pensé que seguramente el espacio no se aprovechaba bien. La pregunta es ¿Cuanto espacio se pierde? Como estoy un mucho falto de ideas para este blog me puse a resolver, mediante un libro excel, este tema.


Forma rara y que pierde, desde mi punto de vista, mucho espacio. El espacio perdido es mas o menos el mismo que si se utilizase una o dos cajoneras  y/o un espacio ocupado por baldas salvo, quizás, para una esquina con espacio de acceso demasiado pequeño. El espacio perdido es mayor o igual, mas o menos, al del cuadrado fondo*fondo, el de un mueble completo. Este es el espacio que queda debajo de la intersección de las dos encimeras, el espacio que queda debajo de la encimera sin acceso frontal.
No soy quién para decir lo que cada cual debe hacer con su espacio. O con su espacio contra su comodidad, pero considero que este tipo de cajoneras, además de ser bastante complicadas de hacer, no solucionan el manejo de ese espacio difícil de utilizar, creo que la esquina se puede resolver mejor de otras maneras. Es una cuestión de decidir si queremos espacio o comodidad a la hora de utilizarlo. Como yo no le veo utilidad a este tipo de montaje, el libro excel carece de otra utilidad que la de hacer unos cuantos cálculos, básicamente    trigonométricos, para pasarlos a unas gráficas xy. Los cálculos no son especialmente difíciles, solo tuve  que volver unos cuantos años atrás, cuando aun sabía de estos temas. 




Funciones utilizadas:
  • Tangente. Tan()
  • Arco Tangente. ATan()
  • Min()
  • Formato condicional. Columna N de la hoja Datos.
  • Indirecto()
  • COINCIDIR(N1;N2:N92;0)
  • Variables con nombre.

    Algunos conceptos matemáticos:
    • Seno,coseno, tangente. Conceptos.
    • Teorema de Thales (creo).
    Para hacer el cálculo supongo que el espacio perdido depende del ángulo de salida del cajón. Si el cajón sale con un determinado ángulo pierde un determinado espacio y que con otro ángulo pierde mas o pierde menos. 
    • Hay un ángulo máximo y un ángulo mínimo de salida del cajón.
    • El cajón deja un triángulo sin usar a cada lado. La suma de esos dos triángulos nos da el espacio perdido.
    • Para conocer el ángulo que nos da un menor espacio perdido divido la diferencia entre el ángulo máximo y el mínimo entre 90.
    • Para cada uno de esos 90 ángulos calculo el área perdida (columna N). Utilizo la función Min(n2:n92) para saber el área mínima.
    • Con el formato condicional resalto el valor mínimo. Si un valor es igual a N1 lo presenta en rojo. El resto en negro.
    • Con =COINCIDIR(N1;N2:N92;0) encuentro la línea en donde se encuentra  ese valor.
    • Con esa línea obtengo el ángulo, y por tanto, seno, coseno,  y tangente.
    • Encuentro las esquinas del cajón en q2:r8.


    Si pensase el libro tubiese alguna utilidad práctica, no solo la parte teórica de utilización de funciones trigonométricas,  lo desarrollaría un poco mas, pero como no lo pienso, aquí se queda.

    viernes, 2 de octubre de 2015

    La maldita ley D'Hont.




    • No voy a criticar políticamente la aplicación o no de dicha ley. A mi me parece que favorece un poco a las mayorías, pero eso es otro tema.
    • Para aplicar la ley  D'Hont hay que dividir los votos de cada partido por 1, 2 ,3 , ... hasta el número de elegidos.
    • Esto significa que tenemos una primera columna con el número de votos divido por 1, una segunda columna con el número de votos divido por dos, una tercera columna con el número de votos divido por tres, ... y , una enesima columna con el número de votos divido por n.
    •  Hacer esto en excel es fácil (hoja Aux, rango F22:Cl22). Como solo es una división poco hay que explicar.
    • Los partidos deben superar un determinado porcentaje antes de entrar en el reparto de escaños.
    • Esto también es sencillo en excel, lo hago (Aux Columna E) con =SI($D4>=$E$2;$C4;0), en donde D4 (votos/total votos) es el porcentaje calculado, E2 es el porcentaje mínimo para entrar en el reparto  y C4 es el número de votos.
    • Una vez hechos esos cálculos vamos a tabla, buscamos los n mayores valores y asignamos un escaño al partido correspondiente.
    • Aunque es improbable, puede producirse un empate. Empate que además solo es crítico si se produce para el último escaño. Aunque es improbable  lo he resuelto en . Aquí utilizo un pequeño truco, concatenar al valor de los votos divididos por n , sumandole 10000000 y el número total de votos sumandole, también 10000000 (=$E4/F$2+$F$1&" "&$F$1+$C4 ) 
    • A la hora de encontrar los n valores mayores, en un primer momento, pensé que no era posible sin programar, pero si que lo es y ademas de una manera sencilla. Se trata de contar, para un determinado valor, el número de valores que lo superan, con =CONTAR.SI($F$4:$CL$23;">"&F4) en hoja Aux F27:BJ46.
    • Por una cuestión de presencia utilizo =SI(CONTAR.SI($F$4:$CL$23;">"&F4)<$B$2;CONTAR.SI($F$4:$CL$23;">"&F4);"") en vez de =CONTAR.SI($F$4:$CL$23;">"&F4) solamente.
    • Por último cuento, para cada partido, el número de items menores del número total de escaños con =CONTAR.SI($F27:$CL27;"<"&$B$2).


    lunes, 27 de julio de 2015

    Estantería para desván o buhardilla.

    Tengo una habitación con techo abuhardillado  para la que quiero hacer unas estanterías bajas para aprovechar un poco el espacio en la parte mas baja de la habitación. Una vez mas este problema se puede resolver mediante un método gráfico, consistente en dibujar a escala la parte inclinada del techo abuhardillado, el lado mas bajo de la habitación y el suelo. Trabajado a escala se pueden encontrar las dimensiones deseadas del mueble. Una vez mas este problema se puede resolver utilizando excel en vez del método gráfico.
    Tanto con el método gráfico como con excel lo primero que tenemos que hacer es medir la habitación. En este caso no es necesario medirla entera, con dos alturas y la distancia horizontal entre ellas podemos calcular la pendiente del techo:

    • Los valores de esas medidas los pongo en la hoja Medida
    • La altura máxima, AMax=A2.
    • La altura mínima, AMin=B2.
    • La distancia, Dist=C2. 
    • La pendiente o ángulo de inclinación del techo la calculo hallando la tangente resultante de  (AMax-AMin)/Dist.
    • El ángulo Alfa es el arco tangente (ATAN) del cálculo anterior.


    • Antes de dibujar la estantería hay que conocer las dimensiones del mueble. Aunque podemos jugar tanto con la altura frontal del mueble como con el fondo ocupado por el mueble, en principio considero que el dato a partir del cual vamos a hacer el mueble es la altura frontal. En la línea tres de la hoja "Datos" hago el calculo, auxiliar, de la altura frontal (C3) a partir del fondo que se desea ocupar (F3). Ese valor (C3), a su vez, puede llevarse a la línea anterior (C2).
    • En primer lugar considero la altura frontal del mueble. Además, en este caso, considero que puedo poner unas pequeñas ruedas para mover el mueble sin dificultad a una zona mas alta y poder trabajar cómodamente con el. 
    • La altura frontal total es la altura de las ruedas o patas mas la altura frontal deseada.  Son unos datos, altura de las patas y altura del frontal, a introducir en la hoja Datos.
    • La altura frontal, mueble+patas, junto a la pendiente del techo nos dan un fondo máximo del mueble, calculable fácilmente con  (AF-D)/TanA. 
    • Esto nos puede dar un fondo excesivo, por lo que introduzco  limite al fondo del mueble. Este dato debe introducirse el la hoja "Datos"
    • Aunque normalmente los muebles de Ikea o de Leroy Merlin tienen un fondo de 60 cm yo estoy trabajando con un fondo de 65 cm porque necesito guardar una cosa de algo menos de 65 cm. de largo. Un fondo de mas de 65 cm creo que no aporta nada al mueble, crece excesivamente, se hace difícil de manejar y no parece que aumente mucho la capacidad.
    • Si el valor calculado es superior al fondo limitado elijo el fondo limitado, si no, elijo el valor calculado SI(FondoMax<Fondo;FondoMax;Fondo)
    • Con los valores de fondo, fondo limitado, AMin y altura de la patas o de las ruedas la altura trasera se calcula con TanA*(Fondo-FonLim)+AMin-AR
    • La hoja o gráfico Desvan presenta, mediante unas gráficas XY los perfiles de la habitación y del mueble.
    • Otro dato que nos interesa es el ancho del mueble. Este dato debe introducirse el la hoja "Datos"
    • Por último, en la hoja "Tablas" hay que indicar el grosor de la tabla, en centímetros. Obtenemos uno de los posibles despieces de un mueble que se ajusta a nuestros requisitos.

    Variables y rangos con nombre
    Nombre Se refiere aDescripción
    Amax Medida!$A$2 Altura máxima medida
    Dist Medida!$c$2 Distancia horizontal entre alturas medidas
    Amin Medida!$b$2 Altura mínima medida
    Alfa ATAN((AMax-AMin)/Dist)
    Ángulo tejado con horizontal
    TanA (AMax-AMin)/Dist Tangente de alfa
    FondoMax Datos!$D$2 Fondo máximo
    AR Datos!$I$2 Altura ruedas o patas
    AF Datos!$C$2+AR Altura frontal del mueble+altura patas
    AM Datos!$j$2 Ancho del mueble
    AT Tablas!$A$2 Grosor tabla (en cm.)
    FondoLim Datos!$F$2 Fondo limitado por el fondo máximo.
    Fondo (AF-D)/TanA Fondo calculado para esa altura frontal
    FondoIn Datos!$F$3 Sirve para calcular el frontal a partir del fondo
    Trasera TanA*(Fondo-FonLim)+AMin-AR Alto tabla trasera

    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.











    viernes, 22 de mayo de 2015

    Conversión de TRK a GPX.



    El otro día me encontré con que una página web permitía descargar un fichero para GPS en formato TRK, vía romana del Iregua. Otro tipo mas de colocar los tres o cuatro valores de los puntos de una ruta en un fichero. El fichero TRK comienza con una cabecera a continuación de cual hay una línea por punto.
    Estructura de la línea de puntos:
    T  A 42.17672892ºN 2.70418888ºW 17-JAN-09 09:01:37.000 s 1065.300049 0.000000 0.000000 0.000000 0 -1000.000000 -1.000000 -1 -1.000000 510
    Los valores que nos interesan son :
    • Columna 3: Latitud.
    • Columna 4: Norte o sur.
    • Columna 5: Longitud.
    • Columna 6, Este (E) u oeste (W)
    • Columna 7, Día de la fecha, en ingles.
    • Columna 8, Hora del día.
    • Columna 10, Altitud, en metros.
    Proceso de conversión:

    • Abrimos con el editor de texto el fichero TRK. En realidad,como siempre, aunque e puede trabajar directamente con el fichero original lo suyo e copiar el fichero TRK a un fichero TXT y trabajar con este último.
    • Seleccionamos y copiamos las líneas de los puntos. Como hay un carácter un poco problemático de usar en Excel, el signo de grado (º), resulta mas cómodo eliminarlo con el editor de textos, sustituyendolo por un espacio.
    • La hora viene con unos decimales al final (09:01:37.000). Esto decimales (.000) no se deben sustituir con el editor, estos caracteres se pueden dar en otros campos.
    • En un libro excel abierto pegamos las líneas a copiar.
    • Seleccionamos la columna recién pegada.
    • Buscamos en cualquiera de las líneas el carácter "º".  Esto no sería necesario si lo hemos sustituido anteriormente por un espacio.
    • Lo seleccionamos y copiamos.
    • En excel vamos a Datos->Texto en columnas. Seleccionamos delimitados. Seleccionamos como delimitadores espacio y otro. En el recuadro de otro pegamos el carácter "º".
    • Seleccionamos las diez primeras columnas y las importamos como texto, no como general, es importante.
    • Desechamos el resto de las columnas. Nos quedan n líneas de como la de abajo.

    T A 42.17672892 N 2.70418888 W 17-JAN-0909:01:37.000 s 1065.300049










    • Sustituimos, con Editar->Reemplazar la fecha, en este caso 17-JAN-09, por una fecha con nuestro formato habitual (17/01/2009) . En este caso he reemplazado Jan por 01. Este cambio también se puede hacer con el editor de textos. 
    • Completamos la transformación de la fecha en las columnas N y M. Si la fecha del día está en la columna G escribimos en M la siguiente formula =IZQUIERDA(H1;8)+G1. 
    • En N escribimos =SUSTITUIR(M1;",";"."). Con esto tenemos la fecha convertida a un número en formato anglosajón, punto por coma.
    • Si el punto es oeste (W) debe aparecer la longitud con signo negativo. Lo mismo si el punto fuese un punto sur la latitud sería negativa. Para calcular estos signos escribo en K =SI($D1="N";"";"-") y escribo en L =SI($F1="E";"";"-"). Este cambio se puede hacer con el editor de textos, cambiando ºN por un espacio, ºS por un " -", ºW por " -" y ºE por un espacio.
    • En O ponemos la siguiente fórmula:="<trkpt lat="&CARACTER(34)&K1&C1&CARACTER(34)&" lon="&CARACTER(34)&L1&E1&CARACTER(34)&" >"
    • En P ="<ele>"&J1&"</ele>".
    • En Q ="<time>"&TEXTO(M1;"aaaa-mm-ddTHH:MM:SSZ")&"</time>"
    • Y por último en en R =O1&P1&Q1&"</trkpt>"
    • Arrastramos, llevado las formulas a todas las líneas.
    • Abrimos MapSource. Nos aseguramos de estar trabajando con el mismo  datum que el del fichero TRK. Lo ideal es trabajar en ambos ficheros con el datum  WGS84.
    •  Creamos MANUALMENTE un track ,con un par de puntos vale. Lo salvamos como GPX.
    • Editamos con el editor de textos ese fichero. Buscamos los puntos creados manualmente. Están limitados por un <trkseg> y un </trkseg>:
    •     <trkseg>
    •       <trkpt lat="40.5514303" lon="-4.0899551">
    •         <ele>845.8554688</ele>
    •       </trkpt>
    •       <trkpt lat="40.4400392" lon="-3.8991790">
    •         <ele>724.9843750</ele>
    •       </trkpt>
    •     </trkseg>
    • Mantenemos  <trkseg> y el </trkseg> y borramos los puntos.
    • Copiamos la columna R del libro excel entre <trkseg> y el </trkseg>
    • Salvamos y comprobamos que todo ha salido bien.
    • Completamos nuestro trabajo con MapSource.











    martes, 3 de febrero de 2015

    Función Arco Coseno para VBasic

    O como complicarse la vida inútilmente, con lo sencillo que resulta. 
    Necesito obtener el arco coseno de un valor para procesarlo en VBasic para excel. VBasic no tiene una que lo permita, tampoco tiene la función arco seno, solo tiene arco tangente.
    Tiro de mi casi del todo olvidada base matemática y decido generar una función arco coseno (MiACos(R)) en base al desarrollo en serie de dicha función. Encuentro en internet dos desarrollos, uno de los cuales directamente no entiendo, y con el otro empiezo el desarrollo (no pongo la fórmula de la serie.) Funcionar, funciona, pero solo para ángulos con un valor superior a 15 grados. Para valores inferiores, si intento apurar el número de términos sumados se produce un desbordamiento y no puedo aumentar la resolución.
    Estuve dos días dedicado a simplificar las respectivas multiplicaciones y llego a la siguiente función:


    Function MiACos4(R)

    Dim Pi, DosNMas1, FactN, Fact2N, X, M, CuatroN
    Pi = 3.141592654
    M = Pi / 2
    For N = 0 To 2506
    DosNMas1 = 2 * N + 1
    F = 1 / (DosNMas1)
    For I = 1 To N
    X = (N + I) / I
    F = F * X / 4
    Next


    M = M - F * (R ^ DosNMas1) '



    Next



    MiACos4 = M


    End Function


    No la explico, funciona entre 5 y 90 º, pero la desecho. No lleva a ningún sitio.



    Pienso y me digo, VBasic tiene la función Atn(r), arco tangente en radianes. Y si conozco el coseno, conozco el seno  (sen^2+cos^2=1) y si conozco seno y coseno conozco la tangente. A partir de este supuesto creo la siguiente función, sin complicarme la vida:



    Function MiACos5(R)

    Dim S, C, T
    C = R
    S = Sqr((1 - R ^ 2))
    T = S / C


    MiACos5 = Atn(T)


    End Function


    Como podéis ver no he contemplado la posible división por cero, lo dejo en manos de quien quiera utilizarla.




    martes, 27 de enero de 2015

    No consigo convertir texto a número

    ¿Que me pasa?¿Que estoy haciendo mal?¿Por qué? ¿Que leches pasa? No me funciona, etc...

    Suelo salir a la montaña con mi GPS. Después de una ruta montañera paso al ordenador la ruta, con MapSource, y hago mis propias estadísticas. Últimamente además de subir las rutas a Wikiloc las subo a http://www.ibpindex.com/, que tiene unas estadísticas mas completas. Para comparar ambas estadísticas quiero pasar los datos de IBPINDEX a un libro excel para comparar comodamente estadísticas y lo bajado de la web. Teoricamente todo fácil, pero, siempre hay un pero, no consigo convertir los valores de texto a valor numerico.

    1. Como siempre que me pasan estas cosas, encorseto entre asteriscos el valor a trasformar, con ="*"& C1 &"*".
    2. Efectivamente aparece un carácter por delante del número. De momento parece un espacio.
    3. Con ctrl+l o entrando en Edición->reemplazar intento eliminar ese espacio. Pongo un espacio en Buscar y nada en reemplazar, doy reemplazar todo y nada, no consigo mi objetivo. 
    4. Sigo en reemplazar, copio ese carácter desconocido en la casilla Buscar y dejo sin nada en reemplazar y ¡por fin! consigo algo.
    5. Como excel es como es, corrijo un error pero se produce otro. Me trasforma  40.5750652 en  405750652.
    6. Deshago la primera operación, reemplazo los "." por comas y el carácter desconocido por un caracter nulo ("").
    7. Por fin consigo trasformar a número el texto.
    8. Continuo indagando, separo ese carácter, en la celda B1, con =IZQUIERDA(A1;1), aunque para lo que voy a hacer a continuación no es del todo necesario.
    9. Utilizo =CODIGO(b1) para intentar conocer el carácter ignoto. ¡Bingo! el carácter es el ASCII 160, que a su vez equivale al  &nbsp del código Html.

    En este caso, la manera mas sencilla de trasformar los valores en texto a valor númerico es reemplazar todos los puntos por comas y todos los ASCII 160 por nada o por un espacio de barra espaciadora (ASCII 32). Hay otras opciones para eliminar esos primeros caracteres (contemplado además  el cambio de punto por coma), como por ejemplo utilizar Datos->Texto en columnas pero creo que la manera mas sencilla es reemplazar esos caracteres, según lo dicho.

    ¿Como importo una página web a Excel?:

    • Con copia pega.
    • En, para windows XP, Inicio->Ejecutar escribimos: excel -e http://www.ibpindex.com/ibpindex/ibp_listadepuntos.php?REF=36314455664614&MOD=HKG&LAN=es&SMD=m
    • Desde Excel: Archivo->Abrir y ponemos l dirección (URL) en nombre de archivo.

    viernes, 28 de noviembre de 2014

    Eje de tiempos

    Esta vez estaba realizando un gráfico XY en el que el eje X es una distancia acumulada, en metros, y el eje Y es un acumulado de tiempos. La gráfica es un "cuanto tiempo tardo en andar..."

    El eje y, al realizar la gráfica, si que presenta un formato de tiempos pero la escala presenta unos números que no cuadran con lo que esperaríamos de un eje de tiempos.



    Lo que yo espero de un eje de tiempos es que la escala pase por el minuto 0 de cada hora y, aquí ya depende de cada cual, cada cinco minutos o cada diez minutos o cada cuarto de hora o cada ... aparezca en la escala del eje.

    Antes de modificar los valores de la escala del eje Y debemos conocer algunos valores, el valor numérico de una hora. En este caso utilizo una escala de 15 minutos y una subescala de 5 minutos. Escribo 00:05:00 en una celda, en otra celda copio y doy formato numérico al valor. Repito la operación para el cuarto de hora y para el valor máximo al que queremos llegar. 

    En el formato del eje Y de la gráfica, opción escala, pongo los valores NUMÉRICOS de cinco minutos, del cuarto de hora y del valor máximo al que queremos llegar.




    viernes, 14 de noviembre de 2014

    Kilos y tallas.

    ¿Cuantos kilos debo perder para volver a entrar en la talla 40? 
    Ejercicio, perfectamente inútil, que calcula los kilos que hay que perder, o ganar, para alcanzar una determinada talla partiendo, lógicamente, de otra. Como ya he dicho es un ejercicio perfectamente inútil para conseguir un peso determinado, es un ejercicio para manejar variables con nombre en Excel. Algunos cálculos se hacen directamente al definir la variable y no en una celda. 

    Variables definidas:
    • Ajuste Objetivo.$E$2
    • KPer   Objetivo.$C$2. Kilos a perder
    • PIni    Objetivo.$B$1. Peso inicial
    • R_1    TIni/PI(). Radio inicial.
    • R_2    TFin/PI(). Radio final.
    • S_1     PI()*R_1^2 Superficie proporcional a R1 cuadrado.
    • S_2     PI()*R_2^2 Superficie proporcional a R2 cuadrado.
    • TFin   Objetivo.$B$3. Talla final.
    • TIni    Objetivo.$B$2. Talla inicial.
    • K_P    Ajuste*PIni*(S_1-S_2)/S_1. Kilos a perder calculado en la propia variable.
    Todas estas variables se pueden utilizar directamente en las celdas,   poniendo = variable (por ejemplo =K_P)
    • Supongo que el peso final es proporcional a la talla del pantalón. 
    • A su vez supongo que puedo proyectar el cuerpo humano como un cilindro de altura constante y que varia de radio. 
    • El volumen, y por tanto el peso, depende de la superficie que nos de el radio del cilindro. En este punto supongo la talla como un circulo de talla/2 cm. A partir de ese supuesto calculo el radio, a partir del radio calculo la superficie del circulo y conocidas las dos superficies hago un calculo proporcional de perdidas o ganancias de peso.
    • En un último momento añadí la variable "Ajuste" con el fin de que los valores por talla coincidieran con los pesos y tallas recordados. En mi caso coinciden.



    miércoles, 24 de septiembre de 2014

    Convertir fichero KML a PLT y GPX II

    https://drive.google.com/file/d/0B0wjloS-L7fxbzBnQ2RMZlcxNUU
    Hasta el momento, lo que he logrado ver, es que las coordenadas en un fichero kml  son una serie de ternas de números (-6.0906000,43.0571700,1200) separadas por un espacio. Cada terna está formada por la longitud (-6.0906000), la latitud (43.0571700) y la altitud, separadas por comas, en una única línea. El principal problema a la hora de convertir esas coordenadas es que cada coordenada no está en una línea distinta, todas ellas están en la misma línea. Aunque oziexplorer permite abrir el fichero KML y salvarlo como PLT o como GPX, yo no conozco ninguna aplicación que trasforme el camino seguido a wpt o a ruta.
     He preparado tres métodos para introducir esos saltos de línea y un libro excel que convierte el formato kml a los formatos que utilizan Oziexplorer y Garmin (GPX).

    • Actualmente sigo utilizando windows XP y office 2003. Puede que con otra configuración los siguientes pasos funcionen de manera diferente, o no funciones.
    • Aunque hay varios editores de texto que pueden valernos, yo utilizo el que todos los usuarios de windows tenemos, el Bloc de notas (notepad). 
    • Utilizo excel, pero puede ser muy interesante tener instalado open office o libre office.
    • Abrimos con el bloc de notas el fichero kml. Buscamos, estan al final, la línea con las coordenadas. Nos quedamos solo con las coordenadas. Salvamos como texto.
    • Abrimos un libro excel en blanco, escribimos, en cualquier celda =caracter(10). Nos sale un carácter inidentificable.
    • En el bloc de notas de las coordenadas elegimos Edición->Reemplazar. Buscamos los espacios en blanco, un golpe al espaciador. En reemplazar ponemos el carácter 10, para ello vamos a la celda en donde hemos escrito =caracter(10), copiamos y situados en Reemplazar pegamos ese valor con ctrl+V. Si además de el carácter 10 aparecen unas comillas, las eliminamos. Reemplazamos todo.
    • Guardamos como TXT. 
    • Abrimos ese fichero con excel, bien desde el propio excel, bien mediante el botón derecho del ratón con "Abrir con" y seleccionando excel.

    Segundo método: 

    • Nos quedamos solo con las coordenadas.
    • Reemplazamos los espacios por "<br>".
    • Salvamos como HTM.
    • Damos un doble click sobre el fichero. Se abre con el explorador.
    • Copiamos del explorador a excel.
    Tercer método:

    • Consiste en crear una tabla HTM.
    • Nos quedamos solo con las coordenadas.
    • Trasformamos esa línea en una tabla HTM. Pra ello:
    • Reemplazamos los espacios en blanco por </tr><tr><td>
    • Antes de las coordenadas escribimos <table><tr><td>
    • Después de las coordenadas escribimos </table>
    • Guardamos como HTM
    • Abrimos ese fichero con excel, bien desde el propio excel, bien mediante el botón derecho del ratón con "Abrir con" y seleccionando excel.
    • Las coordenadas ocupan una sola columna. Para pasarlas a varias columnas utilizo, seleccionando toda la columna, Datos->Texto en Columnas. Indicamos que la coma funciona como separador y que todos los campos son campos de texto. Procedemos.
    • Los distintos formatos, tanto el de Oziexplorer como el de Garmin, son sencillos, no necesitan grandes explicaciones. Concatenando textos llegamos a ellos (columnas de la E a la H de la hoja Kml-Plt1)
    • En este caso utilizo tres variables con nombre, Comillas = Caracter(34), NL (nueva línea) =Caracter(10) y PaM, factor conversión, de metros a pies, 3,3333333
    • de Kml a PLT (Ozi): =$C2&","&$B2&",0,"&ENTERO($D2*PaM)
    • De Kml a Wpt (Ozi): =$F2&",P"&$F2&","&$C2&","&$B2&",,"&$D2&",,,,,,,"&",P"&$F2&",,,,"&ENTERO($D2*PaM)
    • De Kml a ruta GPX: ="<rtept lat="&Comillas&$C2&Comillas&" lon="&Comillas&$B2&Comillas&">"&NL&"<ele>"&$D2&"</ele>"&NL&" <sym>Waypoint</sym>"&NL&"</rtept>"
    • De Kml a wpt GPX: ="<wpt lat="&Comillas&$C2&Comillas&" lon="&Comillas&$B2&Comillas&">"&NL&"<ele>"&$D2&"</ele>"&NL&" <sym>Waypoint</sym>"&NL&"</wpt>"
    • Arrastramos y completamos todas las coordenadas.
    • Ponemos, tanto en Oziexplorer como en MapSource, el datum a WGS84.
    • Creamos y salvamos, en Oziexplorer, un fichero plt (track) y un fichero wpt.
    • Creamos y salvamos un fichero con un par de puntos para los wpt y un fichero con una ruta con esos dos puntos en MapSource. Salvamos como GPX.
    • Editamos, se puede utilizar cualquier editor de textos, el fichero plt. Borramos los puntos del camino (son muy fáciles de identificar, están al final). Copiamos los puntos creados en el fichero excel, columna E (sin la cabecera, a partir de E2). Los pegamos en el fichero PLT y salvamos. Comprobamos, con ozi, que funcionan.
    • Editamos, se puede utilizar cualquier editor de textos, el fichero wpt. Borramos los puntos (son muy fáciles de identificar, están al final). Copiamos los puntos creados en el fichero excel, columna G (sin la cabecera, a partir de G2). Los pegamos en el fichero wpt y salvamos. Comprobamos, con ozi, que funcionan.
    • Por lo que yo he visto oziexplorer es muy flexible con los errores pero MapSource es todo lo contrario, es muy poco flexible, rechaza el mas mínimo error. Hay que tener mucho cuidado al editar un fichero GPX.
    • En los ficheros GPX eliminamos los wpt y los puntos de la ruta y los sustituimos por las valores calculados en la columna H para la ruta y la columna I para los wpt.
    • Los wpt están al principio, no están incluidos entre etiquetas y con los datos que les pasamos basta. <wpt lat="42.9791983" lon="-6.1071474"><ele>1200</ele><sym>Waypoint</sym></wpt>
    • Las rutas están incluidas entre las etiquetas <rte> y </rte>, sustituimos los puntos por los creados, columna H (sin la cabecera, nos daría un error) <rtept lat="42.9791983" lon="-6.1071474"><ele>1200</ele><sym>Waypoint</sym></rtept>


    Conversión de De PLT a GPX
    Conversión de GPX a PLT
    http://ellibrosobreexcelquenoescribirenunca.blogspot.com.es/2011/11/de-gpx-plt.html
    http://ellibrosobreexcelquenoescribirenunca.blogspot.com.es/2011/11/de-gpx-plt-ii.html
    http://ellibrosobreexcelquenoescribirenunca.blogspot.com.es/2011/11/de-gpx-plt-iii.html