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

Пока что я заполнил онлайн регистрационную форму 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, time и 1001, я до сих пор не уверен в этом, и текстовые файлы из статического канала не лучше всего объясняют их.

1 ответ

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

Обычно GTFS-RT ссылается непосредственно на статический GTFS через trip_id/stop_id/etc. Поскольку в Нью-Йорке обычно наблюдается отклонение от нормального обслуживания ("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"
  }
}
Другие вопросы по тегам