Transformando datos de geolocalización de GPX a GeoJSON
¿Te encontraste alguna vez con la necesidad de convertir archivos GPX (GPS Exchange Format) a GeoJSON en tus proyectos de mapas y geolocalización? Si es así, desde Auravant te mostramos una solución que utilizamos para hacer esta tarea de manera sencilla y rápida.
GPX y GeoJSON
Antes que nada, si no estás familiarizado con estos formatos, te dejamos una breve explicación de cada uno de ellos.
GPX (GPS Exchange Format) es un formato de archivo utilizado para almacenar y compartir datos de GPS, como rutas, tracks y waypoints. Está diseñado para ser legible tanto por humanos como por máquinas, y se utiliza mucho en aplicaciones de GPS y en sitios web que proporcionan mapas y datos geográficos. GPX se basa en XML, por lo que los datos se almacenan en un formato de etiquetas y atributos que son fáciles de leer y procesar.
GeoJSON, por otro lado, es un formato de archivo basado en JSON que se utiliza para representar datos geográficos en la web. Se utiliza mucho en aplicaciones de mapas y visualización de datos geográficos en línea, y es compatible con la mayoría de las bibliotecas de mapas web.
Aunque GPX y GeoJSON son similares en algunos aspectos, hay algunas diferencias importantes entre ellos. GPX es más versátil y puede almacenar una mayor cantidad de datos geográficos, como velocidad, altitud y tiempo, mientras que GeoJSON se centra más en la representación de geometrías y atributos. Además, GPX es más adecuado para el intercambio de datos entre diferentes aplicaciones y dispositivos, mientras que GeoJSON es más adecuado para la visualización de datos en la web.
Soluciones y herramientas
En Auravant, utilizamos la biblioteca @tmcw/togeojson para realizar la conversión de GPX a GeoJSON. Esta biblioteca es muy sencilla de utilizar y permite, a partir de leer un archivo GPX con un FileReader y convertirlo en XML, parsearlo a GeoJSON. Además, esta biblioteca es muy versátil y permite convertir no sólo archivos GPX, sino también KML y KMZ, lo que nos resulta muy útil en nuestro desarrollo diario.
Comenzamos importando la biblioteca:
import { gpx } from '@tmcw/togeojson'
Creamos una función que recibe el archivo .GPX como parámetro para luego ejecutarla una vez que los usuarios carguen el archivo.
Dentro de esa función, vamos a crear un reader, el cual en el resultado de la lectura (reader.result) nos va devolver el XML.
A ese XML tenemos que parsearlo con DOMParser para que @tmcw/togeojson pueda leer correctamente el archivo.
Por último, una vez parseado el archivo, podemos ejecutar la función gpx que nos provee la biblioteca y obtenemos como resultado nuestro tan preciado GeoJSON.
const convertGPX = (file) => {
const reader = new FileReader()
reader.addEventListener('loadend', function () {
const xml = reader.result
const gpxFile = new DOMParser().parseFromString(xml, 'text/xml')
const geoJson = gpx(gpxFile)
})
reader.readAsText(file)
}
Consideraciones
Generalmente, los GeoJSON resultantes de archivos .GPX poseen features de tipo LineString, por lo que utilizamos herramientas como TurfJS para hacer una transformación de LineString a Polygon.
Además, al ser polígonos trazados por GPS, la última coordenada muchas veces no coincide con la primera como debería ser en un lote válido de Auravant. Por ese motivo, además de la conversión, también tenemos que hacer manejo de coordenadas para justamente poder cerrar y formar ese polígono.
En cualquier caso, es importante tener en cuenta que la conversión de GPX a GeoJSON implica la interpretación de la información contenida en el archivo GPX y su representación en un formato diferente. Por lo tanto, es posible que se produzcan algunas pérdidas de información o errores en la conversión, especialmente si el archivo GPX contiene elementos o atributos no estándar o personalizados.