Javascript для загрузки и обработки zip-файла GTFS - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь скачать, разархивировать и обработать файл GTFS в формате zip. Загрузка и распаковка работают, но я получаю сообщение об ошибке при попытке использовать txt-файлы с модулем gtfs-utils в gtfsFunc(). Выход не определен. Задержки жестко запрограммированы только для целей тестирования.

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)
    })
}

Ответы [ 2 ]

1 голос
/ 12 августа 2020

Как сказал @ChickenSoups, вы пытаетесь отфильтровать файлы остановок с полем route_id, а в этом тексте нет этого поля.

Поля, в которых есть остановки:

stop_id, stop_name, stop_lat, stop_lon, stop_code, location_type, parent_station, wheelchair_boarding, stop_direction

Возможно, что вам нужно прочитать файл Trips.txt вместо Stops.txt, так как в этом файле есть поле route_id. И вы можете выполнить sh это с помощью функции readTrips:

const readTrips = require("gtfs-utils/read-trips");

И ваш gtfsFun c будет:

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'
1 голос
/ 10 августа 2020

Стоп в данных нет поля route_id .

Вам следует попробовать другие данные, например Поездка или Маршрут

Вы можете посмотреть на первую строку в вашем файле данных, чтобы узнать, какое у них поле.

Здесь структура данных GTFS

...