【问题标题】:Flutter protobufs working with static and/or realtime GTFS dataFlutter protobufs 处理静态和/或实时 GTFS 数据
【发布时间】:2021-07-15 23:01:16
【问题描述】:

我正在尝试构建一个消耗交通数据的颤振应用程序。其中一些数据以GTFS data 的形式出现,我很难找到有关如何在 dart/flutter 中使用它的信息。我知道dart bindings for protobufs,但我看不出它如何帮助我解析 gtfs 数据。我有三个问题:

  1. 静态 gtfs 数据以 txt/csv 文件的形式出现,其中包含有关交通系统的各种信息。我可以用 python 手动解析它,然后导出到 json 并将其作为资产导入到颤振项目中。我不是特别喜欢这样,因为每当数据发生变化时,我都必须下载 zip、解压缩、解析、导出到 json、导入到颤振。笨重。我怎样才能主要在飞镖中做到这一点? (相关,有一个protobuf package for dart,但我不明白我从包中得到的东西)。

  2. 实时 gtfs 数据通常是 txt/csv 格式,还是 xml/json?我想知道,因为我与之签约的公司将来会有 gtfs 提要,但我在公司的联系人不知道 api 将以什么格式传递数据。

  3. 如果是 txt/csv 格式,我可以使用 dart 和上面链接的包/工具实时解析它吗?如果是json/xml数据,我没问题。

【问题讨论】:

    标签: flutter parsing protocol-buffers


    【解决方案1】:
    1. 我不确定您想对数据做什么,但this answer 会帮助您将 .txt 文件转换为字符串。在此之后,您可以对它们做任何您想做的事情,例如:
    List<String> routes = File('routes.txt').readAsLinesSync();
    List<String> fieldHeaders = routes[0].split(",");
    print(fieldHeaders);
    for (String route in routes.sublist(1, routes.length)) {
      List<String> routeInfo = route.split(",");
      print(routeInfo);
    }
    
    1. 根据您提供的链接,GTFS 的部分定义是“所有文件都必须保存为逗号分隔的文本”,因此您可以非常确定这就是您获取数据的方式。

    2. 是的,Dart 可以轻松处理 csv .txt 文件。之所以写得不多,是因为大多数人都使用本机功能自己做。

    【讨论】:

    • 好吧,我当然可以手动解析它,但这就是我要避免的。这些软件包可供使用,但我对它们一无所知。我希望有 protobuf 经验的人在这里有一些见识。你以前用过 protobufs 吗?
    • @pianoman102 很抱歉,我不太了解您的问题。您对“手动”的定义是什么?我只在从我自己的一个 api 接收数据时使用 protobuf,在那里我可以控制格式。它使我不必使用更重的数据结构。无论如何,您都以 csv .txt 文件的形式接收数据,所以我不明白您为什么要如此糟糕地使用 protobuf。
    • @pianoman102 你的flutter应用中必须有一个查询公司api和接收文件的函数;你不能使用类似于我提供的功能来解码它们吗?对不起,如果我误解了。
    • 手动解析意味着我自己编写解析代码。我链接到的软件包就是为了做到这一点。我可以编写自己的解析器,但我不想。一个原因是因为我想学习如何使用 protobufs,其次,google 对这些数据的标准利用 protobufs 和各种包来帮助对其进行解码(developers.google.com/transit/gtfs-realtime/examples/… 特别是其他语言部分)
    • 好的,虽然我不能在这里给你一个完整的教程来告诉你如何做,也许你感到困惑的一个原因是 protobuf 只是其中的一部分。你链接的包主要是编译 .proto 文件,比如here,它自己不能做任何事情。对于 Dart,您需要使用 gRPC。也许this 会帮助你入门
    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2016-06-15
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多