У меня есть база данных MySQL с данными GTFS, и у меня есть php-скрипты, которые возвращают время остановки, и я хочу добавить данные в реальном времени.
Я знаю, у Google есть инструкции по использованию gtfs в реальном времени с php (https://github.com/google/gtfs-realtime-bindings-php) но я не могу понять, как заставить это работать.
То, что я хочу сделать, — (используя любую необходимую информацию: trip_id, stop_id и т. Д.) Вернуть задержанное значение trip_update, чтобы я мог соответствующим образом обновить время остановки.
Кто-нибудь знает хороший учебник? Или может кто-нибудь помочь мне разобраться, как это сделать?
Более полный пример 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
Мне кажется, что вам не нужно иметь дело напрямую с файлами Protobuf, потому что у вас уже есть данные в вашей базе данных. Так что кто-то другой уже позаботился о прочтении информации.
Структура данных GTFS-реального времени Протокол протобуф и вам нужно точно знать, как это работает. Вот схема типичного процесса чтения данных Protobuf. Эти инструкции не работают для PHP, но они дают вам общее представление о процессе.
protoc
команда для генерации API буфера протокола для ваших данных в режиме реального времени GTFS. Командная строка поддерживает только C ++, Java и Python. Насколько я понимаю репо что ты связанный 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. Но если они уже есть в вашей базе данных, делать больше нечего.