4

我有一个带有 GTFS 数据的 MySQL 数据库设置,我有返回停止时间的 php 脚本,我正在寻找添加实时数据。

我知道 Google 有关于如何将 gtfs realtime 与 php ( https://github.com/google/gtfs-realtime-bindings-php ) 一起使用的说明,但我似乎无法弄清楚如何让它工作。

我想要做的是(使用所需的任何信息:trip_id、stop_id 等)返回trip_update 延迟值,以便我可以相应地更新停止时间。

有谁知道好的教程吗?或者有人可以帮我弄清楚如何做到这一点?

4

2 回答 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 实时模式中的字段:

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

于 2015-05-04T04:37:18.853 回答
2

对我来说,您似乎不需要直接处理 Protobuf 文件,因为您的数据库中已经有了数据。所以其他人已经负责阅读这些信息。

GTFS-realtime 的数据结构是Protobuf 协议,你需要确切地知道它是如何工作的。这是读取 Protobuf 数据的典型过程的概述。这些说明不适用于 PHP,但它可以让您大致了解该过程。

  1. 首先你需要安装 Protobuf 编译器。如果您使用的是 Mac OS X,请阅读.
  2. 使用protoc命令为您的 GTFS 实时数据生成协议缓冲区 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-realtime 是 Protobuf 协议中处理传输信息的一种特殊数据。您可以创建一个 Protobuf API 来从 Protobuf 文件中读取数据。但是,如果您的数据库中已经有了它们,那么就没有什么可做的了。

于 2015-05-03T04:50:35.017 回答