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 字段。

您应该尝试其他数据,例如 行程路线

您可以查看数据文件的第一行,看看它们有哪些字段。

GTFS data structure here

正如@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'