GTFS实时PHP

4
我有一个MySQL数据库,里面存放着GTFS数据,并且我有php脚本可以返回停靠时间,现在我想要添加实时数据。
我知道Google有关于如何使用PHP与GTFS实时数据的说明(https://github.com/google/gtfs-realtime-bindings-php),但是我似乎无法弄清楚如何使其工作。
我的目标是(使用所需信息:trip_id、stop_id等)返回trip_update延迟值,以便我可以相应地更新停靠时间。
是否有人知道一个好的教程?或者可以帮助我弄清楚如何做到这一点吗?
2个回答

3
一个更完整的GTFS实时PHP示例可能如下所示:
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-realtime 的数据结构是 Protobuf Protocol,你需要确切地知道它是如何工作的。以下是读取 Protobuf 数据的典型过程概述。这些说明不适用于 PHP,但可以给你一个大致的流程。
  1. 首先,你需要安装 Protobuf 编译器。如果你使用的是 Mac OS X,请阅读this
  2. 使用 protoc 命令为你的 GTFS-realtime 数据生成协议缓冲区 API。命令行只支持 C++、Java 和 Python。
  3. 你可以使用此 API 来读取你的数据。
据我所理解,您提供的链接仅适用于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实时是一种特殊的数据,使用Protobuf协议处理交通信息。您可以创建一个Protobuf API来读取Protobuf文件中的数据。但是,如果您已经将它们存储在数据库中,那么就没有太多需要做的了。

我已经成功运行了这个脚本,但是我现在遇到的问题是如何提取旅行更新数据。我尝试了getTripUpdate()和其他一些方法,但似乎都无法正常工作。 - Chris Schlitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接