-
Notifications
You must be signed in to change notification settings - Fork 85
/
convert.js
96 lines (89 loc) · 3.27 KB
/
convert.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const fs = require('fs');
const jsonfile = require('jsonfile');
const readline = require('readline');
const removeDoubleQuotes = (value) => value.replaceAll('"', '');
const txtToJson = (filename, columnNameMapping = {}, jsonFilePath) => {
const txtFilePath = `./${filename}.txt`;
jsonFilePath = jsonFilePath || `./${filename}.json`;
let entries = [],
i = 0,
lineValues;
const mappedColumnIndexes = Object.keys(columnNameMapping).map((index) =>
parseInt(index)
);
readline
.createInterface({
input: fs.createReadStream(txtFilePath),
output: process.stdout,
terminal: false,
})
.on('line', function (line) {
lineValues = line.split('\t');
if (i !== 0) {
entries.push(
lineValues.reduce((entry, value, valueIndex) => {
if (mappedColumnIndexes.includes(valueIndex)) {
entry[columnNameMapping[valueIndex]] = removeDoubleQuotes(value);
}
return entry;
}, {})
);
}
i++;
})
.on('close', function () {
console.log(`Writing ${i} entries to ${jsonFilePath}`);
jsonfile.writeFile(jsonFilePath, entries, { spaces: 2 }, function (err) {
if (err) {
console.error(err);
}
});
});
};
// geonameid : integer id of record in geonames database
// name : name of geographical point (utf8) varchar(200)
// asciiname : name of geographical point in plain ascii characters, varchar(200)
// alternatenames : alternatenames, comma separated, ascii names automatically transliterated, convenience attribute from alternatename table, varchar(10000)
// latitude : latitude in decimal degrees (wgs84)
// longitude : longitude in decimal degrees (wgs84)
// feature class : see http://www.geonames.org/export/codes.html, char(1)
// feature code : see http://www.geonames.org/export/codes.html, varchar(10)
// country code : ISO-3166 2-letter country code, 2 characters
// cc2 : alternate country codes, comma separated, ISO-3166 2-letter country code, 200 characters
// admin1 code : fipscode (subject to change to iso code), see exceptions below, see file admin1Codes.txt for display names of this code; varchar(20)
// admin2 code : code for the second administrative division, a county in the US, see file admin2Codes.txt; varchar(80)
// admin3 code : code for third level administrative division, varchar(20)
// admin4 code : code for fourth level administrative division, varchar(20)
// population : bigint (8 byte int)
// elevation : in meters, integer
// dem : digital elevation model, srtm3 or gtopo30, average elevation of 3''x3'' (ca 90mx90m) or 30''x30'' (ca 900mx900m) area in meters, integer. srtm processed by cgiar/ciat.
// timezone : the iana timezone id (see file timeZone.txt) varchar(40)
// modification date : date of last modification in yyyy-MM-dd format
txtToJson(
'cities1000',
{
8: 'country',
1: 'name',
4: 'lat',
5: 'lng',
10: 'admin1',
11: 'admin2',
},
'./cities.json'
);
txtToJson(
'admin1CodesASCII',
{
0: 'code',
1: 'name',
},
'./admin1.json'
);
txtToJson(
'admin2Codes',
{
0: 'code',
1: 'name',
},
'./admin2.json'
);