Javascript 下载并处理 GTFS zip 文件
Javascript to download and process GTFS zip file
我尝试下载、解压缩和处理 zip 格式的 GTFS
文件。下载和解压缩工作正常,但当我尝试将 txt 文件与 gtfsFunc()
中的 gtfs-utils
模块一起使用时,我收到错误消息。输出未定义。仅出于测试目的对延迟进行硬编码。
const dl = new DownloaderHelper('http://www.bkk.hu/gtfs/budapest_gtfs.zip', __dirname);
dl.on('end', () => console.log('Download Completed'))
dl.start();
myVar = setTimeout(zipFunc, 30000);
function zipFunc() {
console.log('Unzipping started...');
var zip = new AdmZip("./budapest_gtfs.zip");
var zipEntries = zip.getEntries();
zip.extractAllTo("./gtfsdata/", true);
}
myVar = setTimeout(gtfsFunc, 40000);
function gtfsFunc() {
console.log('Processing started...');
const readFile = name => readCsv('./gtfsdata/' + name + '.txt')
const filter = t => t.route_id === 'M4'
readStops(readFile, filter)
.then((stops) => {
const someStopId = Object.keys(stops)[0]
const someStop = stops[someStopId]
console.log(someStop)
})
}
停止 数据没有 route_id 字段。
您应该尝试其他数据,例如 行程 或 路线
您可以查看数据文件的第一行,看看它们有哪些字段。
正如@ChickenSoups 所说,您正在尝试使用 route_id 字段过滤停止文件,而此 txt 没有此字段。
停止的字段有:
stop_id, stop_name, stop_lat, stop_lon, stop_code, location_type, parent_station, wheelchair_boarding, stop_direction
也许您需要读取 Trips.txt 文件而不是 Stops.txt,因为该文件有 route_id
字段。
您可以使用 readTrips 函数完成此操作:
const readTrips = require("gtfs-utils/read-trips");
你的 gtfsFunc 将是:
function gtfsFunc() {
console.log("Processing started...");
const readFile = (name) => {
return readCsv("./gtfsdata/" + name + ".txt").on("error", console.error);
};
//I used 5200 because your Trips.txt contains routes id with this value
const filterTrips = (t) => t.route_id === "5200";
readTrips(readFile, filterTrips).then((stops) => {
console.log("filtered stops", stops);
const someStopId = Object.keys(stops)[0];
const someStop = stops[someStopId];
console.log("someStop", someStop);
});
}
或者,如果您真正想要的是阅读Stops.txt,您只需要更改过滤器
const filter = t => t.route_id === 'M4'
使用一些有效的字段,例如:
const filter = t => t.stop_name=== 'M4'
我尝试下载、解压缩和处理 zip 格式的 GTFS
文件。下载和解压缩工作正常,但当我尝试将 txt 文件与 gtfsFunc()
中的 gtfs-utils
模块一起使用时,我收到错误消息。输出未定义。仅出于测试目的对延迟进行硬编码。
const dl = new DownloaderHelper('http://www.bkk.hu/gtfs/budapest_gtfs.zip', __dirname);
dl.on('end', () => console.log('Download Completed'))
dl.start();
myVar = setTimeout(zipFunc, 30000);
function zipFunc() {
console.log('Unzipping started...');
var zip = new AdmZip("./budapest_gtfs.zip");
var zipEntries = zip.getEntries();
zip.extractAllTo("./gtfsdata/", true);
}
myVar = setTimeout(gtfsFunc, 40000);
function gtfsFunc() {
console.log('Processing started...');
const readFile = name => readCsv('./gtfsdata/' + name + '.txt')
const filter = t => t.route_id === 'M4'
readStops(readFile, filter)
.then((stops) => {
const someStopId = Object.keys(stops)[0]
const someStop = stops[someStopId]
console.log(someStop)
})
}
停止 数据没有 route_id 字段。
您应该尝试其他数据,例如 行程 或 路线
您可以查看数据文件的第一行,看看它们有哪些字段。
正如@ChickenSoups 所说,您正在尝试使用 route_id 字段过滤停止文件,而此 txt 没有此字段。
停止的字段有:
stop_id, stop_name, stop_lat, stop_lon, stop_code, location_type, parent_station, wheelchair_boarding, stop_direction
也许您需要读取 Trips.txt 文件而不是 Stops.txt,因为该文件有 route_id
字段。
您可以使用 readTrips 函数完成此操作:
const readTrips = require("gtfs-utils/read-trips");
你的 gtfsFunc 将是:
function gtfsFunc() {
console.log("Processing started...");
const readFile = (name) => {
return readCsv("./gtfsdata/" + name + ".txt").on("error", console.error);
};
//I used 5200 because your Trips.txt contains routes id with this value
const filterTrips = (t) => t.route_id === "5200";
readTrips(readFile, filterTrips).then((stops) => {
console.log("filtered stops", stops);
const someStopId = Object.keys(stops)[0];
const someStop = stops[someStopId];
console.log("someStop", someStop);
});
}
或者,如果您真正想要的是阅读Stops.txt,您只需要更改过滤器
const filter = t => t.route_id === 'M4'
使用一些有效的字段,例如:
const filter = t => t.stop_name=== 'M4'