GBFS 定义

在继续学习本部分之前,请先验证您要为其构建 Feed 的受支持的微出行系统(如果您尚未验证)。

在以下各部分中,每个标题的格式如下:Required|Optional|Conditionally required: Feed name (System supported)。支持以下系统:

  • 已插入基座的系统
  • 无桩系统
  • 有桩和无桩系统

为了成功与 Google 集成,请仅提供您的 Feed 所描述的系统所需的文件,并指定相关部分中包含的必填字段。对于条件性必填字段,请参阅字段说明以获取指导。您还可以指定可选字段来添加信息,从而提供更好的用户体验。

微出行 Feed 的必需标头

微出行 Feed 是包含停靠式或无桩式微出行结构化数据(如本文中所述)的 Feed。

所有 Feed 都必须始终在 JSON 对象的顶层指定下表中所列的字段,这些字段统称为通用 GBFS 标头

字段名称 类型 要求 说明
last_updated 时间戳 必需 一个 POSIX 时间戳,用于指定自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。

设置为 Feed 中数据的上次更新时间。

ttl 非负整数 必需 一个非负整数,表示距离更新 Feed 的时间还剩多少秒。

如果必须以恒定速率更新数据,请将此值设置为 0

data JSON 必需 包含各个 Feed 的数据字段的 JSON。

例如,指定了通用 GBFS 标头的汇总 free_bike_status.json Feed 可能如下所示:

{
    "ttl": 30,
    "last_updated": 1576123774,
    "data": {
        "bikes": [ ... ]  // GBFS free bike status objects.
    }
}

必需:system_information.json(有基座和无基座的系统)

如有需要,请参阅 GBFS 规范

此 Feed 提供有关系统运营商的详细信息。

字段名称 类型 要求 说明
system_id ID 必需 车辆共享系统的全局唯一标识符。此值在系统生命周期内应保持不变。 车辆运行的每个不同系统或地理区域都应有自己的 system_id。系统 ID 应该能够识别为属于特定系统,而不是随机字符串 - 例如,bcycle_austin 或 biketown_pdx。
name 字符串 必需 向客户显示的系统名称。
rental_apps 对象 必需 一个 JSON 对象,其中包含 Android 和 iOS 的租赁应用信息,分别位于各自的字段中。
rental_apps.android 对象 在特定条件下必需 store_uridiscovery_uri 字段中包含 Android 平台的租赁应用下载和应用发现信息。如果系统提供商有 Android 租赁应用,则此字段为必需字段。
rental_apps.android.store_uri URI 必需 可供下载租赁 Android 应用的 URI。这通常是指向应用商店(例如 Google Play)的 URI。如果 URI 指向 Google Play 等应用商店,我们建议该 URI 遵循 Android 最佳实践,以便查看应用可以直接打开该 URI 以访问原生应用商店应用,而不是网站。
rental_apps.android.discovery_uri URI 必需 格式为 your_custom_scheme://your/path/here 的 URI。 PackageManager.queryIntentActivities() 可以使用该 URI 来发现设备上是否安装了租赁 Android 应用。
rental_apps.ios 对象 在特定条件下必需 store_uridiscovery_uri 字段中包含 iOS 平台的租赁应用下载和应用发现信息。如果系统提供商有 iOS 租赁应用,则此字段为必需字段。
rental_apps.ios.store_uri URI 必需 可供下载租赁 iOS 应用的 URI。这通常是指向应用商店(例如 Apple App Store)的 URI。如果 URI 指向 Apple App Store 等应用商店,我们建议该 URI 遵循 iOS 最佳实践,以便查看应用可以直接打开该 URI 以访问原生应用商店应用,而不是网站。
rental_apps.ios.discovery_uri URI 必需 格式为 your_custom_scheme:// 的 URI。UIApplication canOpenURL: 可使用该 URI 来发现设备上是否安装了租赁 iOS 应用。

必需:free_bike_status.json(无桩系统)

如有需要,请参阅 GBFS 规范

此 Feed 定义了可供出售的独立式车辆的位置和属性。出于隐私保护方面的考虑,此 Feed 中不得显示正在出租的车辆。

字段名称 类型 要求 说明
bikes 数组 必需 当前可用的已停止的自行车数组,其中每辆自行车都是一个对象。
bikes[].bike_id ID 必需 自行车的标识符。

为保护隐私,每次行程结束后,该 ID 都可以更改为随机字符串。

bikes[].lat 纬度 必需 自行车的 WGS 84 纬度,采用十进制度格式。
bikes[].lon 经度 必需 自行车的 WGS 84 经度,采用十进制格式。
bikes[].is_reserved 布尔值 必需 自行车当前是否已预订,如下所示:
  • 如果自行车目前处于预订状态,则设置为 true
  • 如果自行车目前未被预订,则设置为 false
bikes[].is_disabled 布尔值 必需 自行车目前是处于停用状态还是损坏状态,如下所示:
  • 如果自行车当前处于停用状态,则设置为 true
  • 如果自行车当前未停用,请设置为 false
bikes[].rental_uris 对象 必需 一个 JSON 对象,其中包含 Android、iOS 和 Web 的租赁 URI,分别位于各自的字段中。
bikes[].rental_uris.android URI 在特定条件下必需 一种 URI,可通过 android.intent.action.VIEW Android intent 传递给 Android 应用,以支持 Android 深层链接。提供的 rental_uris 必须是 Android 应用链接,这样查看应用就不需要手动管理用户重定向到应用商店的操作(如果用户未安装提供方应用)。

此 URI 必须是特定于单辆自行车的深层链接,而不是包含多辆自行车信息的通用租赁页面。 深层链接必须直接将用户引导至自行车,而不会出现任何提示、转到任何插页式网页或登录页。确保用户即使从未打开过相应应用,也可以看到自行车。

URI 不一定需要包含自行车的 bike_id,只要合作伙伴有其他方式来识别相应的自行车即可。例如,租赁应用可以使用 URI 中的其他标识符来唯一标识自行车。

如果合作伙伴有 Android 租赁应用,则此字段为必填字段。

Android 应用链接示例:

https://www.example.com/app?sid=1234567890&platform=android

bikes[].rental_uris.ios URI 在特定条件下必需 可在 iOS 上用于启动自行车租赁应用的 URI。 如需详细了解此方面的信息,请参阅 Apple 关于 iOS 自定义网址方案的文章。 提供的 rental_uris 必须是 iOS 通用链接,这样查看应用就不需要在用户未安装提供方应用的情况下手动管理用户到应用商店的重定向。

此 URI 必须是特定于单辆自行车的深层链接,而不是包含多辆自行车信息的通用租赁页面。 深层链接必须直接将用户引导至自行车,而不会出现任何提示、转到任何插页式网页或登录页。确保用户即使从未打开过相应应用,也可以看到自行车。

URI 不一定需要包含自行车的 bike_id,只要合作伙伴有其他方式来识别相应的自行车即可。例如,租赁应用可以使用 URI 中的其他标识符来唯一标识自行车。

如果合作伙伴有 iOS 租赁应用,则此字段为必填字段。

iOS 通用链接示例:

https://www.example.com/app?sid=1234567890&platform=ios

bikes[].rental_uris.web 网址 可选

可供网络浏览器使用的网址,用于显示有关在相应车辆处租车的更多信息。

此网址必须是特定于单辆自行车的深层链接,而不是包含多辆自行车信息的通用租赁页面。 深层链接必须直接将用户引导至自行车,而不会出现任何提示、转到任何插页式网页或登录页。确保用户即使从未打开过相应应用,也可以看到自行车。

网址不一定需要包含自行车的 bike_id,也不一定需要遵循 Android 或 iOS 的租赁网址的语义惯例。租赁应用可以使用网址中唯一标识自行车的其他标识符。

如果未设置此字段,则表示 Web 浏览器不支持深层链接。

示例值:

https://www.example.com/app?sid=1234567890

bikes[].vehicle_type_id ID 必需 车辆的 vehicle_type_id,如 vehicle_types.json 部分中所述。
bikes[].pricing_plan_id ID 必需 租用相应车辆类型时所应用的价位方案的标识符,如 system_pricing_plans.json 部分中所述。
bikes[].current_range_meters 非负浮点数 在特定条件下必需 如果与车辆对应的 vehicle_type 定义包含电机,则此字段为必填字段。

设置为车辆在当前充电或燃油量的情况下,无需充电或加油即可行驶的最远距离(以米为单位)。

bikes[].last_reported 时间戳 可选 设置为车辆上次向运营商后端报告状态的时间。

以下是 free_bike_status.json 的示例:

"bikes": [{
    "bike_id": "xyz123",
    "lat": 12.34,
    "lon": 56.78,
    "is_reserved": true,
    "is_disabled": false,
    "rental_uris":{
      "android": "https://www.example.com/app?sid=1234567890&platform=android",
      "ios": "https://www.example.com/app?sid=1234567890&platform=ios",
      "web": "https://www.example.com/app?sid=1234567890"
    },
    "vehicle_type_id": "scooter_electric",
    "pricing_plan_id": "sydneyPlan1",
    "current_range_meters": 4500,
    "last_reported": 1434054678
},
{
    "bike_id": "abc123",
    "lat": 1.34,
    "lon": 146.78,
    "is_reserved": false,
    "is_disabled": true,
    "rental_uris":{
      "android": "https://www.example.com/app?sid=1234567890&platform=android",
      "ios": "https://www.example.com/app?sid=1234567890&platform=ios",
      "web": "https://www.example.com/app?sid=1234567890"
    },
    "vehicle_type_id": "bike_manual",
    "pricing_plan_id": "sydneyPlan1",
    "last_reported": 1434054241
}
]

必需:vehicle_types.json(有桩和无桩系统)

如有需要,请参阅 GBFS 规范

此 Feed 定义了各个车辆类型的详细信息,如 free_bike_status.json 部分中所述。

字段名称 类型 要求 说明
vehicle_types 数组 必需 一个对象数组,其中每个对象都定义了提供商目录中的一种不同的车辆类型。对于给定的车辆类型,只能有一个对象。
vehicle_types[].vehicle_type_id ID 必需 指定车辆类型的唯一标识符。
vehicle_types[].form_factor 枚举 必需 一个枚举,表示车辆的一般外形规格,来自以下当前有效值列表:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type 枚举 必需 一个枚举,用于表示车辆的主要推进类型,目前有效的值如下:
  • human:踏板或脚部推进
  • electric_assist:仅在人力推进的同时提供动力
  • electric:包含带电池供电马达的油门模式
  • combustion:包含带汽油发动机的节流模式
vehicle_types[].max_range_meters 非负浮点数 在特定条件下必需 如果 propulsion_type 未设置为 human,则表示车辆有发动机,因此必须设置此字段。

设置为车辆在满油或满电状态下无需充电或加油即可行驶的最远距离(以米为单位)。

以下是 vehicle_types.json 的示例:

"vehicle_types": [
  {
    "vehicle_type_id": "bike_manual",
    "form_factor": "bicycle",
    "propulsion_type": "human"
  },
  {
    "vehicle_type_id": "scooter_electric",
    "form_factor": "scooter",
    "propulsion_type": "electric",
    "max_range_meters": 10000
  }
]

必需:system_pricing_plans.json(无桩系统)

如有需要,请参阅 GBFS 规范

此 Feed 定义了独立式车辆的价格方案。我们要求提供商显示独立式车辆的价格信息。

字段名称 类型 要求 说明
plans 数组 必需 一个对象数组,其中每个对象都定义了一个给定的价格方案。
plans[].plan_id ID 必需 一个字符串,表示提供商提供的给定价格方案的唯一标识符。
plans[].url 网址 可选 指向价格方案相关详情的网址,供最终用户访问。
plans[].currency 字符串 必需 价格方案的 ISO 4217 标准。
plans[].price 非负浮点数 必需

价格方案必须定义为非分级价格方案或分级价格方案:

非分级价格方案

此方案采用单一的固定票价。

设置以下字段:

  • price:整个行程的固定价格。
按费率计算的价格方案

此方案是分段线性费率价格。

设置以下字段:

  • price:基本价格,每次行程仅收取一次。

设置以下一个或两个字段:

  • per_km_pricing:按每公里费率指定的行程价格。
  • per_min_pricing:按每分钟费率计算的行程价格。
plans[].per_km_pricing 数组 在特定条件下必需

如果价格是行驶距离(以公里为单位)的函数,则此字段为必需字段。

对象数组,其中每个对象都定义了一个给定的距离划分段。每个细分的 start 值必须小于或等于下一个细分的 start 值。

若要确定指定方案的总价格,请将指定方案的 plans[].price 值添加到 plans[].per_km_pricingplans[].per_min_pricing 中各细分的累计价格。

如果未设置此字段,则不会有基于距离的变动价格,因此也不会将其纳入总价。

plans[].per_km_pricing[].start 非负整数 必需 开始按分段费率收费的里程数(以公里为单位)。 此字段设置为细分的范围的起始值(含)。因此,一旦行驶里程达到相应公里数,系统就会收取一次 rate
plans[].per_km_pricing[].rate 浮点数 必需 每个 interval 的收费费率,从区段的起始值(含)start 开始。如果此字段设置为负数,则旅客可享受折扣。
plans[].per_km_pricing[].interval 非负整数 必需

细分受众群的 rate 无限期重新应用的间隔(以公里为单位),除非细分受众群的 end 设置为任何非负整数。

rate 在每个 interval 开始时重新应用一次,并且不考虑距离的四舍五入。

如果将细分的 end 设置为任何非负整数,则会重新应用细分的 rate,直到(但不包括)细分的 end 值。

如果此字段设置为 0,则在细分受众群的 start 仅收取一次 rate

plans[].per_km_pricing[].end 非负整数 可选

不再应用相应路段的 rate 的公里数。此字段设置为结束相应细分范围的不含边界值的值。例如,如果将 end 设置为 40,则 rate 不再适用于 40 公里。

如果未设置此字段或此字段为空,则系统会针对相应路段的 rate 收费,直到行程结束,此外还会针对后续的任何其他路段收费。

plans[].per_min_pricing 数组 在特定条件下必需

如果价格是时间的函数(以分钟为单位),则此字段为必需字段。

一个对象数组,其中每个对象都定义了一个给定的时间划分段。每个区段的 start 值必须小于或等于下一个区段的 start 值。

若要确定指定方案的总价格,请将指定方案的 plans[].price 值添加到 plans[].per_km_pricingplans[].per_min_pricing 中各细分的累计价格。

如果未设置此字段,则不存在基于时间的可变价格,因此总价格中不包含任何可变价格。

plans[].per_min_pricing[].start 浮点数 必需 开始按细分费率收费的分钟数。 此字段设置为细分的范围的起始值(含)。因此,一旦设定的分钟数过去,系统就会收取一次 rate 费用。
plans[].per_min_pricing[].rate 浮点数 必需 针对每个 interval 收取的费率。速率从区段的起始值(含)start 开始。如果此字段设置为负数,则旅客可享受折扣。
plans[].per_min_pricing[].interval 非负整数 必需

细分的 rate 无限期重新应用的间隔时间(以分钟为单位),除非细分的 end 设置为任何非负整数。

rate 会在每个 interval 开始时重新应用一次,并且不会考虑出行时间的四舍五入。

如果将细分的 end 设置为任何非负整数,则会重新应用细分的 rate,直到(但不包括)细分的 end 值。

如果此字段设置为 0,则在细分受众群的 start 仅收取一次 rate

plans[].per_min_pricing[].end 非负整数 可选

细分受众群的 rate 不再适用的分钟数。此字段设置为结束相应细分范围的不含边界值的值。例如,如果将 end 设置为 20,则 rate 不再适用于 20 分钟。

如果未设置此字段或此字段为空,则系统会收取相应路段的 rate,直到行程结束,此外还会收取后续任何路段的费用。

system_pricing_plans.json 的示例

本部分提供了信息丰富的 system_pricing_plans.json 代码示例。此外,我们还提供了每个示例的相关详细信息和结果。

system_pricing_plans.json 的示例 1

以下价格方案代码示例显示了基于行程时间的费用,时间间隔如下:

  • [0,1):2 美元
    • 如果行程时间不到 1 分钟,用户需支付 2 美元。
    • 示例:59 秒的行程
  • [1,2):3 美元
    • 如果行程时长不低于 1 分钟但低于 2 分钟,用户需支付 2 美元 + 1 美元 = 3 美元。
    • 示例:1 分钟的行程;1 分 45 秒的行程
  • x 分钟数,其中 x 大于或等于 2: $3 + (($2 + $1) * (x - 2 + 1)) 美元
    • 如果行程时长大于或等于 2 分钟,用户需支付 3 美元(行程时长不足 2 分钟的部分)以及(1 美元 [per_min_pricing 列表中的第一个条目] + 2 美元 [per_min_pricing 列表中的第二个条目])乘以 2 分钟之后每分钟的费用(包括 2 分钟)。
    • 示例:
      • 2 分钟行程的费用为 3 美元 +(2 美元 + 1 美元)= 6 美元
      • 2 分 30 秒的行程费用为 $3 + ($2 + $1) = $6 美元
      • 3 分钟行程的费用为 3 美元 + (($2 + $1) * 2) = 9 美元
      • 10 分钟行程的费用为 3 美元 + (($2 + $1) * 9) = 30 美元
{
  "plans": {
    "plan_id": "plan1",
    "currency": "USD",
    "price": 2,
    "per_min_pricing": [
      {
          "interval": 1,
          "rate": 1,
          "start": 1
      },
      {
          "interval": 1,
          "rate": 2,
          "start": 2
      }
    ],
  }
}

system_pricing_plans.json 的示例 2

在此示例中,我们展示了一个价格方案的代码示例,该方案按分钟和公里数收取费用:

  • 具体而言,最终用户需支付每公里 0.25 加元以及每分钟 0.50 加元的费用。
  • 这两种速率同时发生,并且互不依赖。
  • 因此,10 分钟的 1 公里行程的费用为 9 加元。费用明细如下:
    • 3 美元,基本价格
    • 0.25 美元 * 2,在行程开始时收取一次,在达到 1 公里时收取一次。
    • $0.5 * 11,每分钟开始时收取一次。费用从 0 秒开始计算,最后一个间隔的费用在 10 分钟时计算。
{
  "plans": {
    "plan_id": "plan2",
    "currency": "CAD",
    "price": 3,
    "per_km_pricing": [{
      "start": 0,
      "rate": 0.25,
      "interval": 1
    }],
    "per_min_pricing": [{
      "start": 0,
      "rate": 0.50,
      "interval": 1
    }]
  }
}

有条件地必需:geofencing_zones.json(有桩和无桩系统)

如有需要,请参阅 GBFS 规范

此 Feed 定义了独立式车辆的地理围栏数据。地理围栏数据包括指定车辆允许开始行程和结束行程的地理边界,以及车辆可以行驶的速度。此速度为车辆的最大速度或车辆所在道路的速度限制,以较低者为准。司机必须遵守当地法律和法规。

我们使用此数据,以便在用户搜索特定路线时,如果行程的终点位于特定地理围栏之外,则过滤掉微出行结果。如果未提供地理围栏,Google 会将相应服务视为不受边界限制。

字段名称 类型 要求 说明
geofencing_zones 对象 必需 根据 IETF RFC 7946 的描述,FeatureCollection 对象是指具有名为 features 的字段的对象。features 的值是一个 JSON 数组。 JSON 数组的每个元素都是一个 Feature 对象。

每个地理围栏区域、其关联的规则和属性以及 FeatureCollection 的定义在此处指定,作为 geofencing_zones.json Feed 定义的一部分。

geofencing_zones.type 字符串 必需 根据 IETF RFC 7946 的描述,设置为 FeatureCollection
geofencing_zones.features 数组 必需 一个 JSON 数组,其中 JSON 数组的每个元素都是一个 Feature 对象。
geofencing_zones.features[].type 字符串 必需 根据 IETF RFC 7946 的描述,设置为 Feature
geofencing_zones.features[].geometry GeoJSON 多边形 必需 一个 GeoJSON Multipolygon,用于描述行程无法开始、结束、途经的地点,以及其他限制。按顺时针排列的点定义了多边形所围合的区域,而按逆时针排列的点定义了多边形之外的区域。如需详细了解此信息,请参阅 右手定则
geofencing_zones.features[].properties 对象 必需 用于定义差旅津贴和限制的对象。
geofencing_zones.features[].properties.rules 数组 可选 一个对象数组,其中每个对象都定义了一条且仅一条规则。如果两个或多个规则在某种程度上重叠、冲突或以其他方式发生冲突,则 JSON 文件中按顺序最早定义的规则优先。
geofencing_zones.features[].properties.rules[].vehicle_type_id 数组 可选 车辆类型 ID 的数组,其中每个元素都是一个 vehicle_type_id,必须对该 ID 应用任何限制。 如果未指定任何 vehicle_type_id,则限制适用于所有车辆类型。
geofencing_zones.features[].properties.rules[].ride_allowed 布尔值 必需 自由停放的“无桩”骑行活动是否可以在区域内开始和结束,如下所示:
  • 如果无桩单车行程可以在该区域内开始和结束,则设置为 true
  • 如果无桩单车行程无法在区域内开始和结束,则设置为 false

以下是 geofencing_zones.json 的示例:

"geofencing_zones":{
  "type":"FeatureCollection",
  "features":[{
    "type":"Feature",
    "properties":{
      "rules":[{
        "vehicle_type_id":"scooter",
        "ride_allowed": false
      }]
    },
    "geometry":{
      "type":"MultiPolygon",
      "coordinates":[[[
        [-122.66780376434326, 45.49896266763551],
        [-122.66810417175292, 45.49824825558575],
        [-122.66830801963805, 45.49632305799116],
        [-122.66780376434326, 45.49896266763551]
      ]]]
    }
  }]
}

必需:station_information.json(停靠系统)

如有需要,请参阅 GBFS 规范

此 Feed 定义了公共自行车共享站的一般信息。

字段名称 类型 要求 说明
stations 数组 必需 一个对象数组,其中每个对象都定义一个且仅一个站。
stations[].station_id 字符串 必需 车站的标识符。
stations[].name 字符串 必需 车站的公开名称,以车站所在城市的本地语言表示。name 必须与车站标牌上使用的名称一致(如有),或者必须通过使用交叉街道或当地地标来反映车站位置。 请勿使用“Street”等缩写形式,除非路牌上明确使用了此类缩写,并且 name 必须采用混合大小写形式,遵循地名大小写的当地惯例,而不能全部大写。
stations[].lat 纬度 必需 站点的 WGS 84 纬度,以十进制度格式表示。
stations[].lon 经度 必需 站点的 WGS 84 经度,采用十进制度格式。
stations[].capacity 非负整数 可选 一个非负整数,表示车站安装的停靠点总数(包括可用和不可用的停靠点)。
stations[].rental_uris 对象 必需

一个 JSON 对象,其中包含 Android、iOS 和 Web 的租赁 URI,分别位于各自的字段中。

如果指定了这些 URI,它们会替换提供商启用时设置的默认深层链接。

stations[].rental_uris.android URI 在特定条件下必需

一种可使用 android.intent.action.VIEW Android intent 传递给 Android 应用的 URI,用于支持 Android 深层链接。提供的 rental_uris 必须是 Android 应用链接,这样查看应用就不需要在用户未安装提供方应用的情况下手动管理用户到应用商店的重定向。

此 URI 必须是特定于单个站点的深层链接,而不是包含多个站点信息的常规租赁页面。深层链接必须将用户直接转到电台,而不会出现任何提示、转到任何插页式网页或登录页。确保用户即使从未打开过相应应用,也可以看到电台。

URI 不一定需要包含电台的 station_id,只要合作伙伴有其他方式来识别相应电台即可。例如,租赁应用可以使用 URI 中的其他标识符来唯一标识电台。

如果合作伙伴有 Android 租赁应用,则此字段为必填字段。

Android 应用链接示例:

https://www.example.com/app?sid=1234567890&platform=android

stations[].rental_uris.ios URI 在特定条件下必需

可在 iOS 上用于启动车站租车应用的 URI。 如需详细了解此方面的信息,请参阅 Apple 关于 iOS 自定义网址方案的文章。 提供的 rental_uris 必须是 iOS 通用链接,这样查看应用就不需要在用户未安装提供方应用的情况下手动管理用户到应用商店的重定向。

此 URI 必须是特定于单个站点的深层链接,而不是包含多个站点信息的常规租赁页面。深层链接必须将用户直接转到电台,而不会出现任何提示、转到任何插页式网页或登录页。确保用户即使从未打开过相应应用,也可以看到电台。

URI 不一定需要包含电台的 station_id。租赁应用可以使用 URI 中的其他标识符来唯一标识电台。

如果合作伙伴有 iOS 租赁应用,则此字段为必填字段。

iOS 通用链接示例:

https://www.example.com/app?sid=1234567890&platform=ios

stations[].rental_uris.web 网址 可选

网址,可供网络浏览器用来显示有关如何在此车站租车的更多信息。

此网址必须是特定于单个站点的深层链接,而不是包含多个站点信息的常规租赁页面。 深层链接必须将用户直接转到电台,而不会出现任何提示、转到任何插页式网页或登录页。确保用户即使从未打开过相应应用,也可以看到车站。

网址不一定需要包含影音平台的 station_id,也不一定需要遵循 Android 或 iOS 租赁网址的语义惯例。租赁应用可以使用网址中唯一标识站点的其他标识符。

如果未设置此字段,则表示 Web 浏览器不支持深层链接。

示例值:

https://www.example.com/app?sid=1234567890

以下是 station_information.json 的示例:

"stations": [
  {
    "station_id": "597",
    "name": "Silverthorne Road, Battersea",
    "lat": 51.472865,
    "lon": -0.148059,
    "capacity": 10,
    "rental_uris": {
        "android": "https://www.example.com/app?sid=1234567890&platform=android",
        "ios": "https://www.exampleexample.com/app?sid=1234567890&platform=ios",
        "web": "https://www.example.com/app?sid=1234567890&platform=web"
    }
  },
]

必需:station_status.json(已停靠的系统)

如有需要,请参阅 GBFS 规范

此 Feed 定义了公共共享单车站点的最新当前状态。

字段名称 类型 要求 说明
stations 数组 必需 一个对象数组,其中每个对象都定义一个且仅一个站。
stations[].station_id 字符串 必需 车站的标识符。
stations[].num_bikes_available 非负整数 必需

一个非负整数,表示实际位于车站且可能可供租借的可用自行车数量。

如需确定相应车站目前是否出租自行车,您必须检查该车站的 is_renting 字段,并找到一个布尔值 true。

stations[].vehicle_types_available 数组 可选

一个对象数组,用于定义车辆总数,按车站提供的各个车辆类型进行分类。每个对象都用于表示关联车辆类型的车辆总数。每个对象的车辆总数必须与 num_bikes_available 字段中指定的值相加。

stations[].vehicle_types_available[].vehicle_type_id ID 必需

车站提供的每种车辆类型的 vehicle_type_id,如 vehicle_types.json 中所述。

stations[].vehicle_types_available[].count 非负整数 必需

vehicle_types.json 中定义的车站内相应 vehicle_type_id 的可用车辆总数。

stations[].num_docks_available 非负整数 在特定条件下必需

除非车站的停靠容量不受限制,否则此字段是必填字段。例如,虚拟站点的停靠容量不受限制,因此无需填写此字段。

一个非负整数,表示车站中可接受车辆归还的可用功能性停靠站的总数。

如需确定车站目前是否接受自行车归还,您必须检查车站的 is_returning 字段,并找到 true 布尔值。

stations[].is_installed 布尔值 必需

一个布尔值,用于指示相应站是否目前位于街道上并已安装。

如果充电站安装在街道上,请设置为 true

如果车站未安装在街道上,请设置为 false

stations[].is_renting 布尔值 必需

一个布尔值,用于指示相应车站目前是否提供自行车租赁服务。

如果服务站目前出租自行车,则设置为 true。即使车站为空,如果设置为允许租借,is_renting 也会设置为 true

如果车站目前不提供自行车租赁服务,请设置为 false

stations[].is_returning 布尔值 必需

一个布尔值,用于指示相应车站目前是否接受自行车归还。

如果车站目前接受自行车归还,则设置为 true。 即使车位已满,但如果未满则允许还车,is_returning 也会设置为 true

如果车站目前不接受自行车归还,则设置为 false

以下是 station_status.json 的示例:

"stations": [
        {
          "station_id": "2",
          "num_bikes_available": 6,
          "vehicle_types_available": [
            {
              "vehicle_type_id" : "scooter_electric",
              "count" : 2
            },
            {
              "vehicle_type_id" : "bike_manual",
              "count" : 4
            }
          ],
          "num_docks_available": 30,
          "is_installed": true,
          "is_renting": true,
          "is_returning": true,
          "last_reported": 1576119631
        },
]