mysql — переполнение стека в реальном времени в GTFS

У меня есть база данных MySQL с данными GTFS, и у меня есть php-скрипты, которые возвращают время остановки, и я хочу добавить данные в реальном времени.

Я знаю, у Google есть инструкции по использованию gtfs в реальном времени с php (https://github.com/google/gtfs-realtime-bindings-php) но я не могу понять, как заставить это работать.

То, что я хочу сделать, — (используя любую необходимую информацию: trip_id, stop_id и т. Д.) Вернуть задержанное значение trip_update, чтобы я мог соответствующим образом обновить время остановки.

Кто-нибудь знает хороший учебник? Или может кто-нибудь помочь мне разобраться, как это сделать?

3

Решение

Более полный пример PHP в GTFS в реальном времени может выглядеть следующим образом:

foreach ($feed->getEntityList() as $entity) {
if ($entity->hasTripUpdate()) {
$trip = $entity->getTripUpdate();
error_log("trip id: " . $trip->getTrip()->getTripId());
foreach ($trip->getStopTimeUpdateList() as $stu) {
if ($stu->hasArrival()) {
$ste = $stu->getArrival();
error_log("    arrival delay: " . $ste->getDelay());
error_log("    arrival time: " . $ste->getTime());
}
if ($stu->hasDeparture()) {
$ste = $stu->getDeparture();
error_log("    departure delay: " . $ste->getDelay());
error_log("    departure time: " . $ste->getTime());
}
}
}
}

Обратите внимание, как имена методов соответствуют полям в базовой схеме GTFS-realtime:

https://developers.google.com/transit/gtfs-realtime/gtfs-realtime-proto

Вы можете увидеть исходный код PHP, сгенерированный из схемы, по адресу:

https://github.com/google/gtfs-realtime-bindings-php/blob/master/src/gtfs-realtime.php

2

Другие решения

Мне кажется, что вам не нужно иметь дело напрямую с файлами Protobuf, потому что у вас уже есть данные в вашей базе данных. Так что кто-то другой уже позаботился о прочтении информации.

Структура данных GTFS-реального времени Протокол протобуф и вам нужно точно знать, как это работает. Вот схема типичного процесса чтения данных Protobuf. Эти инструкции не работают для PHP, но они дают вам общее представление о процессе.

  1. Сначала вам нужно установить компилятор Protobuf. Если вы используете Mac OS X, прочитайте этот.
  2. использование protoc команда для генерации API буфера протокола для ваших данных в режиме реального времени GTFS. Командная строка поддерживает только C ++, Java и Python.
  3. Вы можете использовать этот API для чтения ваших данных.

Насколько я понимаю репо что ты связанный to, только для данных GTFS в реальном времени, поэтому API буфера протокола уже создан. Единственное, что вам нужно сделать, это использовать фрагмент кода, предоставленный на странице:

require_once 'vendor/autoload.php';

use transit_realtime\FeedMessage;

$data = file_get_contents("URL OF YOUR GTFS-REALTIME SOURCE GOES HERE");
$feed = new FeedMessage();
$feed->parse($data);
foreach ($feed->getEntityList() as $entity) {
if ($entity->hasTripUpdate()) {
error_log("trip: " . $entity->getId());
}
}

Заключение:

GTFS-realtime — это особый вид данных в протоколе Protobuf, который обрабатывает транзитную информацию. Вы можете создать API Protobuf для чтения данных из файлов Protobuf. Но если они уже есть в вашей базе данных, делать больше нечего.

2

По вопросам рекламы [email protected]