jueves, 18 de octubre de 2012

Sincronizar un formulario de Google Docs con Fusion Tables en tiempo real

Hace varios días en mis clases de Fusion Tables me hicieron varias preguntas, entre otras cuestiones querían saber como se podía sincronizar un formulario (captura de información) con una tabla de Fusion Tables en tiempo real visualizando la información en Google Maps.

La idea es sencilla y muy práctica, por medio de formularios con los que hacemos encuestas, preguntas, censos, etc. Podemos publicar la información en un mapa personalizando la ventana de información (placemarker) o la temática del mapa.


Buscando en algunos tutoriales he encontrado la solución. Para hacer el siguiente ejercicio debemos tener conocimientos en formularios de Google, hojas de cálculo de Google, Fusion Tables y Scripts de Google (no nos asustemos que es más simple de lo que parece).


Recoger datos y visualizarlos automáticamente en el mapa simplemente rellenando un formulario y sin tener que compartir la tabla con ningún usuario. Esto es especialmente útil cuando tenemos algún usuario sin mucho control de Google Docs que podría malograrnos la tabla y con ella el mapa.


Para empezar el ejercicio debemos seguir los siguientes pasos:


1. Abrimos Google Drive y creamos un formulario con las preguntas o la información que necesitamos y la guardamos dándole un nombre:




Para el ejemplo he creado 3 preguntas sencillas:

  • Nombre
  • Consulta
  • Dirección Web
  • Dirección Postal
2. Todo formulario en el fondo es una hoja de cálculo de Google. Para el siguiente paso abrimos de nuevo Google Drive, abrimos la tabla Form_FT y exportamos la tabla como archivo .csv a nuestro PC.


3. Crearemos una tabla de Fusion Tables a partir del fichero .csv que exportamos anteriormente. Nos vamos a Google Drive y creamos una  tabla dinámica de FT.




Buscamos en nuestro ordenador el archivo .csv (separado por comas) que exportamos y cuando se carguen los datos hacemos clic en "siguiente":



4. Cuando estemos dentro de Fusion Tables debemos agregar una nueva columna a la tabla que se llamará Location y sus atributos serán de localización.

Para hacer esto vamos al menú  Edit => Agregar Columna y agregamos el nombre y cambiamos el formato de la columna y lo guardamos:


5. En el siguiente paso vamos a agregar un Script en la hoja de cálculo de formulario Form_FT. 

Vamos a Google Drive y abrimos la hoja de cálculo Form_FT. Hacemos clic en herramientas => Editor de secuencia de comandos:



Se nos abrirá el panel control de la secuencia de comandos, y seleccionamos crear un proyecto en blanco. Cuando se nos abra el proyecto le damos un nombre para este caso "FormularioFT":



Después vamos al Menú => Archivo => propiedades del proyecto y en la ventana que se nos abre, nos aseguramos de estar en la pestaña "Project properties". Pulsaremos "+Add row" y añadiremos los siguientes valores:




Propiedad
Valor
usernameEl nombre de usuario de la cuenta propietaria de la tabla. 
passwordEl password de la cuenta propietaria de la tabla.
docidEl identificador de la tabla. Se obtiene abriendo la tabla y seleccionando File > About. Este valor es el que aparece en el campo Encrypted ID.

addressColumn
Es el nombre exacto de la columna de nuestra tabla que va a contener la dirección recogida a través del formulario.NOTA: Si nuestra localización ya está geocodificada (no es una dirección, sino unas coordenadas, no hace falta incluir esta propiedad.

latlngColumn
El nombre exacto de la columna de tipoLocation que añadimos a nuestra tabla en el paso 3º.NOTA: cuando se envía el formulario, el script que ahora veremos geocodifica los datos que encuentra en la columna addressColumn y guarda el resultado en esta columna de localización.



Después de añadir la información guardamos la propiedades del proyecto.

6. Debemos guardar el proyecto, para esto hacemos clic en el menú Archivo => Guardar




7. Al lado derecho donde dice codigo.gs debemos reemplazar todo el código por el que se encuentra en el siguiente enlace: Script_FT y posteriormente guardaremos de nuevo el proyecto.

8. Ahora automatizaremos el Script para que envie la informacion en tiempo real a la tabla de FT.


Vamos al Menú => Recursos => Activadores de secuencia de comandos actual y en la ventana que se abre, hacemos clic en Añadir un archivador nuevo y agregamos:


Ejecutar
Eventos
OnFormSubmitFrom spreadsheetOn form submit                 
syncTime-drivenHour timerEvery hour




Finalizado esto, pulsaremos en Guardar, y, a continuación, nos pedirá la autorización (haremos clic en "Authorize", como se muestra en la figura y, finalmente, seleccionaremos Guardar.




Ya podemos probar la sincronización, rellenando el formulario y luego ver los resultados en las tablas de FT.

Detalle a tener en cuenta:

1.  Los campos que aperecen en la ventana de información en el mapa, aparecen con links. Para resolver esto, solo debemos de ir a la tabla FT y modificar el formato de la columna y colocarla en NONE (ver siguiente imagen), si fuera una imagen deberiamos de seleccionar cualquiera de los formatos Line Image

En Fusion Tables:


Formulario: Form_FT

Mapa Resultante:  Mapa_ Formulario

19 comentarios:

  1. Cordial Saludo

    Gracias por sus aportaciones muy buenas y me ayudan bastante.

    podria por favor colaborarme tengo una FT que alimento desde una app diseñada con inventor, pero tengo 2 columnas que manejan formato hora, necesito obtener la diferencia entre hora de salida y hora de entrada, el problema es que en la columna donde hago la operación no me da el resultado, he intentado cambiarle todos los formatos y nada. Adicional me preguntaba si puedo hacer lo inverso a lo que explica en su articulo, es decir pasar la información de la FT a una hoja de calculo en tiempo real.

    gracias por su atención y quedo atento a su respuesta

    ResponderEliminar
  2. excelente aporte a la tecnología, gracias a esta gran aportación e creado tablas de consultas para servir a dos puntos de una empresa, con las tablas de consultas e ingresos desde otros formularios.
    Lamentablemente me esta botando un error en el rowid, que me pone los ingresos con un -1 y no geoetiqueta.
    Quería preguntar si es que es un fallo de google docs o es un error del codigo scrips .
    Gracias

    ResponderEliminar
  3. annaus23

    Lo del rowid viene por defecto en el codigo, has exportado bien el archivo csv a Fusiontables?

    Saludos

    ResponderEliminar
  4. Hola gracias por compartir.

    Me está siendo imposible conseguir que funcione

    Si en la ventana de proyecto ejecuto "onFormSubmit" me da este error:

    TypeError: No se puede leer la propiedad "namedValues" de undefined. (línea 21, archivo "Código")

    Y esta es la linea 21

    var formValues = e.namedValues;

    Estoy haciendo algo mal?

    ResponderEliminar
  5. Hola Ramon

    Lo del rowid viene por defecto en el código, has exportado bien el archivo csv a Fusiontables?

    Saludos

    ResponderEliminar
  6. Gracias por responder Juan Carlos

    Pues yo diría que si, solo hay 2 pasos que me "mosquean", el formulario no lo puedes abrir como hoja de calculo, no?, lo que abres es la hoja de calculo donde se envian las respuestas, la otra es el valor "docid" a mi no me aparece "Encrypted ID" solamente me aparece "ID" que coincide con el valor que aparece en la barra de direcciones (entre los signos =)

    Voy a intentarlo de nuevo.

    ResponderEliminar
  7. Hola Juancho,
    Estuve ayer en tu curso de FusionTables en BcN, y estoy provando este sincronizacion. La tabla se actualiza con las respuestas del formulario, sin embargo ni la FT, ni el mapa se actualizan con las respuestas del formulario. Alguna pista de que puedo haber hecho mal?

    ResponderEliminar
  8. Hola Angel

    has hecho bien el script, creo que es un problema de conexión entre el script del formulario y la hoja de fusion tables.

    No te sale ni un punto?

    ResponderEliminar
    Respuestas
    1. Buenas

      tengo el mismo problema de error en la línea 21
      TypeError: No se puede leer la propiedad "namedValues" de undefined. (línea 21, archivo "Código")
      ningún dato se pasa a la Tabla.
      Ayuda Porfavor.
      Ningún punto sale

      Eliminar
  9. Buenas,
    muy buen aporte.
    Ahora, me queda una duda: ¿es posible pasar data desde una base de datos como MySQL a una Fusion Tables?

    ResponderEliminar
  10. Hola Luciano


    Si es posible pero debes de hacerlo con la API de Fusion Tables, te dejo el link https://developers.google.com/fusiontables/docs/v1/sql-reference

    Saludos

    ResponderEliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. Hola, Juan Carlos
    Muy interesante y útil la información que compartes
    Al verlo me surgió una duda se pueden insertar datos a una tabla de Fusion Tables mediante un script o archivo sin tener que hacerlo desde la pagina o se haría con una consulta HTTP, por ejemplo para insertar 100 rows

    ResponderEliminar
  13. Hola Eric

    puedes utilizar la API, al ser tablas y trabajar con mysql puedes utilizar la orden update para hacerlo, eso si debes saber un poco de programación. te dejo el link.

    https://developers.google.com/fusiontables/docs/v1/sql-reference

    Saludos

    ResponderEliminar
  14. Hola que tal. Muy buena la información! Sin embargo no me funciona correctamente me aparece el rowid -1 y de acuerdo a las recomendaciones dadas a otros usuarios con similar problema exporte correctamente el archivo. Pordrias ayudarme /indicarme cual crees que sería el inconveniente? Muchas gracias!!!

    ResponderEliminar
  15. Prueba activando la api de Google Fusion tables desde la consola https://cloud.google.com/console?redirected=true#/project/199978345781/apiui/api a mi al principio me salia el mismo error, pello luego me funciono bien. aunque aun no se donde toque.. intentare buscar la respuesta y la publicaré. Saludos

    ResponderEliminar
  16. Habies verificado bien que el nombre de las tablas y de los campos coincidan, algunas veces nos da error por estas pequeñas cosas.

    ResponderEliminar
  17. el archivo donde esta el script no esta disponible, lo podrias subir

    ResponderEliminar
  18. DONDE ESTA EL ENLACE AL ARCHIVO Script_FT, NO EXISTE.

    ResponderEliminar

Comparte tus opiniones......