70 lines
1.9 KiB
JavaScript
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}`);
|
|
});
|