Как понять потоки данных GTFS MTA в реальном времени

На данный момент я заполнил онлайн-форму регистрации MTA для получения ключа API разработчика. Затем в моем проекте Android я реализовал зависимость привязок gtfs в реальном времени от одного из репозиторий Google на GitHub,

compile group: 'com.google.transit', name: 'gtfs-realtime-bindings', version: '0.0.4'

Используя их класс Java, я попробовал следующий код, чтобы распечатать все данные gtfs по ссылке, предоставленной MTA,

try {
    String urlString = "http://datamine.mta.info/mta_esi.php?key=insertmykeyhere";
    URL url = new URL(urlString.toString());
    GtfsRealtime.FeedMessage feed = GtfsRealtime.FeedMessage.parseFrom(url.openStream());
    for (GtfsRealtime.FeedEntity entity : feed.getEntityList()) {
        if (entity.hasTripUpdate()) {
            Log.d("stuff", entity.getTripUpdate().toString());
        } 
    }

} catch (IOException e) {
            e.printStackTrace();
}

Однако теперь у меня возникли проблемы с интерпретацией распечатанных данных. Я понимаю, что есть потоки статических данных с http://web.mta.info/developers/developer-data-terms.html, который я использовал для интерпретации некоторых данных. Вот одно из распечатанных обновлений поездки,

stuff: trip {
    trip_id: "036000_GS.N01R"
    start_date: "20170218"
    route_id: "GS"
    1001: "\n\0200S 0600  GCS/TSS\020\001\030\001"
}     
stop_time_update {
    departure {
        time: 1487415600
    }
    stop_id: "901N"
    1001: "\n\0011\022\0011"
}
stop_time_update {
    arrival {
        time: 1487415690
    }
    stop_id: "902N"
    1001: "\n\0011"
}

Я понимаю некоторые части, такие как trip_id, start_date и stop_id. Но такие части, как trip_id, время и 1001, я все еще не уверен в этом, а текстовые файлы из статического канала не могут объяснить их наилучшим образом.


person Chris Gong    schedule 18.02.2017    source источник


Ответы (1)


Каналы MTA Subway GTFS-RT немного отличаются от большинства других.

Как правило, GTFS-RT ссылается непосредственно на статическую GTFS через trip_id/stop_id/и т. д. Поскольку в Нью-Йорке обычно наблюдается отклонение от нормального обслуживания («Поезд 2 по линии 5»), в ленте RT сохраняется возможность создавать новые поездки, которых нет в статической ленте.

Чтобы ответить на ваши срочные вопросы, вам нужно добавить в режиме реального времени. расширения. Это должно устранить пустое поле 1001:.

Для этого либо скомпилируйте файл proto, либо просто импортируйте onebusaway-gtfs-realtime. -api, в которой предварительно скомпилированы расширения:

    ExtensionRegistry registry = ExtensionRegistry.newInstance();
    registry.add(GtfsRealtimeNYCT.nyctFeedHeader);
    registry.add(GtfsRealtimeNYCT.nyctStopTimeUpdate);
    registry.add(GtfsRealtimeNYCT.nyctTripDescriptor);

   GtfsRealtime.FeedMessage feed = GtfsRealtime.FeedMessage.parseFrom(url.openStream(), registry);

Это дает такой результат, как:

trip {
  trip_id: "B20170217WKD_132800B..S"
  start_date: "2017-02-17 22:08:00"
  route_id: "B"
  [transit_realtime.nyct_trip_descriptor] {
    train_id: "1B 2208 145/BBC"
    is_assigned: true
    direction: SOUTH
  }
}
stop_time_update {
  arrival {
    time: 1487390920
  }
  departure {
    time: 1487390920
  }
  stop_id: "D39"
  schedule_relationship: SCHEDULED
  [transit_realtime.nyct_stop_time_update] {
    scheduled_track: "A3"
    actual_track: "A3"
  }
}
stop_time_update {
  arrival {
    time: 1487391130
  }
  departure {
    time: 1487391130
  }
  stop_id: "D40"
  schedule_relationship: SCHEDULED
  [transit_realtime.nyct_stop_time_update] {
    scheduled_track: "A3"
    actual_track: "A3"
  }
}
person Tony Laidig    schedule 18.02.2017
comment
каков результат кода с использованием API onebusaway? Я не слишком знаком с библиотекой. - person Chris Gong; 19.02.2017
comment
библиотека onebusaway — это просто protobuf, скомпилированный с необходимым расширением. Обратите внимание, что дескриптор trip_descriptor теперь заполнен. example есть работающий проект Maven, с которым можно попробовать. - person Tony Laidig; 19.02.2017
comment
привет, я давно не видел этот ответ, поэтому я только что заметил редактирование. Я новичок в Maven, так как мне установить репозиторий github? Могу ли я просто загрузить репозиторий, а затем загрузить его в какую-нибудь среду IDE, например Eclipse? - person Chris Gong; 25.02.2017
comment
Если у вас установлено eclipse и подключаемый модуль Maven, просто файл-›импорт›Maven - person Tony Laidig; 27.02.2017