Files
CanSat/csv2json.js
2025-04-24 01:18:40 +02:00

70 lines
1.9 KiB
JavaScript

// Importamos módulos necesarios
import fs from 'node:fs';
import path from 'node:path';
import readline from 'node:readline';
import { dataLineToObject } from './libs/utils.js';
// Ruta del archivo CSV: se pasa como argumento o usa 'logs/datos.csv' por defecto
const inputPath = process.argv[2] || path.join('.', 'datos.csv');
// Arrays para acumular datos
const dataObjects = [];
const geoFeatures = [];
// Creamos interfaz de lectura de líneas
const rl = readline.createInterface({
input: fs.createReadStream(inputPath),
crlfDelay: Infinity
});
rl.on('line', (line) => {
const obj = dataLineToObject(line);
if (obj) {
dataObjects.push(obj);
// Solo añadimos puntos válidos
if (obj.latitud != null && obj.longitud != null) {
geoFeatures.push({
type: 'Feature',
properties: {
paquete: obj.paquetes,
temperatura: obj.temperatura,
presion: obj.presion,
altitud: obj.altitudMetros,
velocidad: obj.velocidadKmph,
numSatelites: obj.numSatelites,
datetimeGPS: obj.datetimeGPS
},
geometry: {
type: 'Point',
coordinates: [obj.longitud, obj.latitud]
}
});
}
}
});
rl.on('close', () => {
// Escribimos JSON
const jsonPath = path.join(path.dirname(inputPath), 'datos.json');
fs.writeFileSync(jsonPath, JSON.stringify(dataObjects, null, 2), 'utf8');
console.log(`Archivo JSON creado en ${jsonPath}`);
// Escribimos GeoJSON
const geojson = {
type: 'FeatureCollection',
features: geoFeatures
};
geojson.features.push({
type: 'Feature',
properties: {},
geometry: {
type: 'LineString',
coordinates: geoFeatures.map(feature => feature.geometry.coordinates)
}
});
const geoPath = path.join(path.dirname(inputPath), 'datos.geojson');
fs.writeFileSync(geoPath, JSON.stringify(geojson, null, 2), 'utf8');
console.log(`Archivo GeoJSON creado en ${geoPath}`);
});