feat: write a function to generate obsver 2 csv from TrackData
This commit is contained in:
parent
f826e18ff5
commit
ecb1b3d04c
|
@ -1,4 +1,5 @@
|
||||||
const csvParse = require('csv-parse/lib/sync');
|
const csvParse = require('csv-parse/lib/sync');
|
||||||
|
const csvStringify = require('csv-stringify/lib/sync');
|
||||||
|
|
||||||
function _parseFloat(token) {
|
function _parseFloat(token) {
|
||||||
if (typeof token !== 'string') {
|
if (typeof token !== 'string') {
|
||||||
|
@ -29,7 +30,8 @@ function _parseFloat(token) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function _parseInt(token) {
|
function _parseInt(token) {
|
||||||
const asFloat = parseFloat(token);
|
const asFloat = _parseFloat(token);
|
||||||
|
|
||||||
if (asFloat !== null) {
|
if (asFloat !== null) {
|
||||||
return Math.floor(asFloat);
|
return Math.floor(asFloat);
|
||||||
} else {
|
} else {
|
||||||
|
@ -274,6 +276,28 @@ function normalizeUserAgent(userAgent) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildObsver1(points) {
|
||||||
|
return csvStringify(points, {
|
||||||
|
columns: [
|
||||||
|
{ key: 'date', header: 'Date' },
|
||||||
|
{ key: 'time', header: 'Time' },
|
||||||
|
{ key: 'latitude', header: 'Latitude' },
|
||||||
|
{ key: 'longitude', header: 'Longitude' },
|
||||||
|
{ key: 'course', header: 'Course' },
|
||||||
|
{ key: 'speed', header: 'Speed' },
|
||||||
|
{ key: 'd1', header: 'Right' },
|
||||||
|
{ key: 'd2', header: 'Left' },
|
||||||
|
{ key: 'flag', header: 'Confirmed' },
|
||||||
|
{ key: 'private', header: 'insidePrivacyArea' },
|
||||||
|
],
|
||||||
|
cast: {
|
||||||
|
boolean: (v) => (v ? '1' : '0'),
|
||||||
|
},
|
||||||
|
delimiter: ';',
|
||||||
|
header: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
detectFormat,
|
detectFormat,
|
||||||
normalizeUserAgent,
|
normalizeUserAgent,
|
||||||
|
@ -281,4 +305,5 @@ module.exports = {
|
||||||
parseObsver2,
|
parseObsver2,
|
||||||
parseTrackPoints,
|
parseTrackPoints,
|
||||||
replaceDollarNewlinesHack,
|
replaceDollarNewlinesHack,
|
||||||
|
buildObsver1,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
const {
|
const {
|
||||||
|
buildObsver1,
|
||||||
detectFormat,
|
detectFormat,
|
||||||
normalizeUserAgent,
|
normalizeUserAgent,
|
||||||
parseObsver1,
|
parseObsver1,
|
||||||
|
@ -140,3 +141,31 @@ describe('normalizeUserAgent', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('buildObsver1', () => {
|
||||||
|
it('is a function', () => {
|
||||||
|
expect(typeof normalizeUserAgent).toBe('function');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('transforms properly back and forth', () => {
|
||||||
|
const inputString = replaceDollarNewlinesHack(test1);
|
||||||
|
|
||||||
|
const points1 = Array.from(parseObsver1(inputString));
|
||||||
|
const builtString = buildObsver1(points1);
|
||||||
|
const points2 = Array.from(parseObsver1(builtString));
|
||||||
|
|
||||||
|
expect(points2).toEqual(points1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('produces a header', () => {
|
||||||
|
const builtString = buildObsver1([]);
|
||||||
|
expect(builtString).toBe('Date;Time;Latitude;Longitude;Course;Speed;Right;Left;Confirmed;insidePrivacyArea\n');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('produces empty rows', () => {
|
||||||
|
const builtString = buildObsver1([{}]);
|
||||||
|
expect(builtString).toBe(
|
||||||
|
'Date;Time;Latitude;Longitude;Course;Speed;Right;Left;Confirmed;insidePrivacyArea\n;;;;;;;;;\n',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
5
package-lock.json
generated
5
package-lock.json
generated
|
@ -2163,6 +2163,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.14.1.tgz",
|
||||||
"integrity": "sha512-4wmcO7QbWtDAncGFaBwlWFPhEN4Akr64IbM4zvDwEOFekI8blLc04Nw7XjQjtSNy+3AUAgBgtUa9nWo5Cq89Xg=="
|
"integrity": "sha512-4wmcO7QbWtDAncGFaBwlWFPhEN4Akr64IbM4zvDwEOFekI8blLc04Nw7XjQjtSNy+3AUAgBgtUa9nWo5Cq89Xg=="
|
||||||
},
|
},
|
||||||
|
"csv-stringify": {
|
||||||
|
"version": "5.5.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.5.3.tgz",
|
||||||
|
"integrity": "sha512-JKG8vIHpWPzdilp2SAmvjmAiIhD+XGKGdhZBGi8QIECgJAsFr7k5CmJIW2QkSxBBsctvmojM25s+UINzQ5NLTg=="
|
||||||
|
},
|
||||||
"dashdash": {
|
"dashdash": {
|
||||||
"version": "1.14.1",
|
"version": "1.14.1",
|
||||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
"connect-busboy": "0.0.2",
|
"connect-busboy": "0.0.2",
|
||||||
"cors": "2.8.5",
|
"cors": "2.8.5",
|
||||||
"csv-parse": "^4.14.1",
|
"csv-parse": "^4.14.1",
|
||||||
|
"csv-stringify": "^5.5.3",
|
||||||
"ejs": "^3.1.5",
|
"ejs": "^3.1.5",
|
||||||
"errorhandler": "1.5.1",
|
"errorhandler": "1.5.1",
|
||||||
"express": "4.17.1",
|
"express": "4.17.1",
|
||||||
|
|
Loading…
Reference in a new issue