GBFS-Definitionen

Bevor Sie mit diesem Abschnitt fortfahren, sollten Sie prüfen, ob die unterstützten Mikromobilitätssysteme, für die Sie den Feed erstellen, bereits vorhanden sind.

In den folgenden Abschnitten hat jede Überschrift das folgende Format: Required|Optional|Conditionally required: Feed name (System supported). Die folgenden Systeme werden unterstützt:

  • Angedocktes System
  • Stationsloses System
  • System mit und ohne Dockingstation

Damit die Integration mit Google gelingt, stellen Sie nur die Dateien bereit, die für das System erforderlich sind, das in Ihrem Feed beschrieben wird, und geben Sie die erforderlichen Felder in den entsprechenden Abschnitten an. Informationen zu bedingt erforderlichen Feldern finden Sie in der Beschreibung des jeweiligen Felds. Sie können auch optionale Felder angeben, um Informationen hinzuzufügen und die Nutzerfreundlichkeit zu erhöhen.

Erforderlicher Header für Micromobility-Feeds

Mikromobilitätsfeeds enthalten entweder angedockte oder nicht angedockte strukturierte Mikromobilitätsdaten, wie in diesem Artikel definiert.

In allen Feeds müssen die Felder in der folgenden Tabelle immer auf der obersten Ebene des JSON-Objekts angegeben werden. Sie werden zusammenfassend als gemeinsamer GBFS-Header bezeichnet.

Feldname Typ Anforderung Beschreibung
last_updated Zeitstempel Erforderlich Ein POSIX-Zeitstempel, der die Anzahl der Sekunden seit dem 1. Januar 1970 um 00:00:00 UTC angibt.

Wird auf den Zeitpunkt festgelegt, zu dem die Daten im Feed zuletzt aktualisiert wurden.

ttl Nicht negative Ganzzahl Erforderlich Eine nicht negative Ganzzahl, die die Anzahl der Sekunden angibt, die bis zur Aktualisierung des Feeds verbleiben.

Wenn die Daten mit einer konstanten Rate aktualisiert werden müssen, legen Sie diesen Wert auf 0 fest.

data JSON Erforderlich JSON-Datei mit den Datenfeldern für den einzelnen Feed.

Ein aggregierter free_bike_status.json-Feed, in dem der gemeinsame GBFS-Header angegeben ist, könnte beispielsweise so aussehen:

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

Erforderlich: system_information.json (angedocktes und nicht angedocktes System)

Weitere Informationen finden Sie in der GBFS-Spezifikation.

Dieser Feed enthält Details zum Systembetreiber.

Feldname Typ Anforderung Beschreibung
system_id ID Erforderlich Eine global eindeutige Kennung für das Carsharing-System. Dieser Wert soll über die gesamte Lebensdauer des Systems gleich bleiben. Jedes separate System oder geografische Gebiet, in dem Fahrzeuge betrieben werden, SOLLTE eine eigene system_id haben. System-IDs SOLLTEN als zu einem bestimmten System gehörig erkennbar sein und nicht als zufällige Strings – z. B. bcycle_austin oder biketown_pdx.
name String Erforderlich Der Name des Systems, der Kunden angezeigt wird.
rental_apps Objekt Erforderlich Ein JSON-Objekt, das die Informationen der Leih-App für Android und iOS in den entsprechenden Feldern enthält.
rental_apps.android Objekt Conditionally required Enthält Informationen zum Herunterladen und zur App-Erkennung von Leih-Apps für die Android-Plattform in den Feldern store_uri und discovery_uri. Wenn der Systemanbieter eine Android-Leih-App hat, ist dieses Feld erforderlich.
rental_apps.android.store_uri URI Erforderlich URI, über den die Android-App für Leihvideos heruntergeladen werden kann. Dies ist in der Regel ein URI zu einem App-Shop wie Google Play. Wenn der URI auf einen App-Store wie Google Play verweist, empfehlen wir, dass er den Android-Best-Practices entspricht, damit die Wiedergabe-App den URI direkt in der nativen App des App-Stores öffnen kann und nicht auf einer Website.
rental_apps.android.discovery_uri URI Erforderlich URI mit dem Format your_custom_scheme://your/path/here. Der URI kann von PackageManager.queryIntentActivities() verwendet werden, um herauszufinden, ob die Android-App für die Leihfunktion auf dem Gerät installiert ist.
rental_apps.ios Objekt Conditionally required Enthält Informationen zum Herunterladen und Auffinden von Leih-Apps für die iOS-Plattform in den Feldern store_uri und discovery_uri. Wenn der Systemanbieter eine iOS-Leih-App hat, ist dieses Feld erforderlich.
rental_apps.ios.store_uri URI Erforderlich URI, über den die iOS-App für den Verleih heruntergeladen werden kann. Dies ist in der Regel ein URI zu einem App-Shop wie dem App Store. Wenn der URI auf einen App-Store wie den Apple App Store verweist, empfehlen wir, dass der URI den iOS-Best Practices entspricht, damit die Wiedergabe-App den URI direkt zur nativen App-Store-App und nicht zu einer Website öffnen kann.
rental_apps.ios.discovery_uri URI Erforderlich URI mit dem Format your_custom_scheme://. Der URI kann von UIApplication canOpenURL: verwendet werden, um herauszufinden, ob die iOS-App für den Verleih auf dem Gerät installiert ist.

Erforderlich: free_bike_status.json (stationsloses System)

Weitere Informationen finden Sie in der GBFS-Spezifikation.

In diesem Feed werden die Standorte und Attribute für verfügbare freistehende Fahrzeuge definiert. Aus Datenschutzgründen dürfen Fahrzeuge, die Teil einer aktiven Vermietung sind, nicht in diesem Feed enthalten sein.

Feldname Typ Anforderung Beschreibung
bikes Array Erforderlich Ein Array mit derzeit verfügbaren, geparkten Fahrrädern, wobei jedes Fahrrad ein Objekt ist.
bikes[].bike_id ID Erforderlich Die ID eines Fahrrads.

Zum Schutz der Privatsphäre kann die ID nach jeder Fahrt in einen zufälligen String geändert werden.

bikes[].lat Breitengrad Erforderlich Der WGS84-Breitengrad des Fahrrads im Dezimalgradformat.
bikes[].lon Längengrad Erforderlich Der WGS84-Längengrad des Fahrrads im Dezimalgradformat.
bikes[].is_reserved Boolesch Erforderlich Gibt an, ob das Fahrrad derzeit reserviert ist. Mögliche Werte:
  • Wenn das Fahrrad derzeit reserviert ist, wird der Wert auf true gesetzt.
  • Wenn das Fahrrad derzeit nicht reserviert ist, setze den Wert auf false.
bikes[].is_disabled Boolesch Erforderlich Gibt an, ob das Fahrrad derzeit deaktiviert oder defekt ist:
  • Wenn das Fahrrad derzeit deaktiviert ist, setzen Sie den Wert auf true.
  • Wenn das Fahrrad derzeit nicht deaktiviert ist, stellen Sie den Wert auf false ein.
bikes[].rental_uris Objekt Erforderlich Ein JSON-Objekt, das Miet-URIs für Android, iOS und das Web in den entsprechenden Feldern enthält. Dieses Feld ist in Version 2.2 optional, aber für die Implementierung mit Google erforderlich.
bikes[].rental_uris.android URI Conditionally required Ein URI, der mit einem android.intent.action.VIEW-Android-Intent an eine Android-App übergeben werden kann, um Android-Deeplinks zu unterstützen. Der bereitgestellte rental_uris muss Android App Links sein, damit die Wiedergabe-App die Weiterleitung des Nutzers zum App-Shop nicht manuell verwalten muss, falls der Nutzer die Anbieteranwendung nicht installiert hat.

Dieser URI muss ein Deeplink sein, der sich auf das jeweilige Fahrrad bezieht, und darf keine allgemeine Verleihseite mit Informationen zu mehreren Fahrrädern sein. Über den Deeplink muss der Nutzer direkt zum Fahrrad gelangen, ohne dass er aufgefordert wird, etwas zu tun, Zwischenseiten angezeigt werden oder er sich anmelden muss. Achte darauf, dass Nutzer das Fahrrad sehen können, auch wenn sie die App noch nie geöffnet haben.

URIs müssen nicht unbedingt die bike_id für das Fahrrad enthalten, sofern der Partner andere Möglichkeiten hat, das jeweilige Fahrrad zu identifizieren. Die Verleih-App kann beispielsweise andere Kennungen im URI verwenden, um das Fahrrad eindeutig zu identifizieren.

Dieses Feld ist erforderlich, wenn der Partner eine Android-App für den Verleih hat.

Beispiel für einen Android-App-Link:

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

bikes[].rental_uris.ios URI Conditionally required Ein URI, der auf iOS verwendet werden kann, um die Leih-App für das Fahrrad zu starten. Weitere Informationen dazu finden Sie im Apple-Artikel zu benutzerdefinierten URL-Schemata für iOS. Der bereitgestellte rental_uris muss iOS-Universal-Links sein, damit die Wiedergabe-App die Weiterleitung des Nutzers zum App-Store nicht manuell verwalten muss, falls der Nutzer die Anbieteranwendung nicht installiert hat.

Dieser URI muss ein Deeplink sein, der sich auf das jeweilige Fahrrad bezieht, und darf keine allgemeine Verleihseite mit Informationen zu mehreren Fahrrädern sein. Über den Deeplink muss der Nutzer direkt zum Fahrrad gelangen, ohne dass er aufgefordert wird, etwas zu tun, Zwischenseiten angezeigt werden oder er sich anmelden muss. Achte darauf, dass Nutzer das Fahrrad sehen können, auch wenn sie die App noch nie geöffnet haben.

URIs müssen nicht unbedingt die bike_id für das Fahrrad enthalten, sofern der Partner andere Möglichkeiten hat, das jeweilige Fahrrad zu identifizieren. Die Verleih-App kann beispielsweise andere Kennungen im URI verwenden, um das Fahrrad eindeutig zu identifizieren.

Dieses Feld ist erforderlich, wenn der Partner eine iOS-Leih-App hat.

Beispiel für einen universellen iOS-Link:

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

bikes[].rental_uris.web URL Optional

Eine URL, die von einem Webbrowser verwendet werden kann, um weitere Informationen zum Mieten eines Fahrzeugs an diesem Standort anzuzeigen.

Diese URL muss ein Deeplink sein, der sich auf das jeweilige Fahrrad bezieht, und darf keine allgemeine Verleihseite mit Informationen zu mehreren Fahrrädern sein. Über den Deeplink muss der Nutzer direkt zum Fahrrad gelangen, ohne dass er aufgefordert wird, etwas zu tun, Zwischenseiten angezeigt werden oder er sich anmelden muss. Achte darauf, dass Nutzer das Fahrrad sehen können, auch wenn sie die App noch nie geöffnet haben.

URLs müssen nicht unbedingt die bike_id für das Fahrrad enthalten oder anderweitig den semantischen Konventionen der Miet-URLs für Android oder iOS entsprechen. Die Verleih-App kann andere Kennungen in der URL verwenden, die das Fahrrad eindeutig identifizieren.

Wenn dieses Feld nicht festgelegt ist, werden Deeplinks für den Webbrowser nicht unterstützt.

Beispielwert:

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

bikes[].vehicle_type_id ID Erforderlich Die vehicle_type_id des Fahrzeugs, wie im Abschnitt vehicle_types.json beschrieben.
bikes[].pricing_plan_id ID Erforderlich Kennung des Preismodells, das angewendet wird, wenn dieser Fahrzeugtyp wie im Abschnitt system_pricing_plans.json beschrieben gemietet wird.
bikes[].current_range_meters Nicht negative Gleitkommazahl Conditionally required Dieses Feld ist erforderlich, wenn die vehicle_type-Definition, die dem Fahrzeug entspricht, einen Motor hat.

Die maximale Entfernung in Metern, die das Fahrzeug mit dem aktuellen Lade- oder Kraftstoffstand zurücklegen kann, ohne dass es aufgeladen oder aufgetankt werden muss.

bikes[].last_reported Zeitstempel Optional Der Zeitpunkt, zu dem das Fahrzeug seinen Status zuletzt an das Backend des Betreibers gemeldet hat.

Das folgende Beispiel zeigt 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
}
]

Erforderlich: vehicle_types.json (System mit und ohne Stationen)

Weitere Informationen finden Sie in der GBFS-Spezifikation.

In diesem Feed werden die Details der einzelnen Fahrzeugtypen definiert, auf die im Abschnitt free_bike_status.json verwiesen wird.

Feldname Typ Anforderung Beschreibung
vehicle_types Array Erforderlich Ein Array von Objekten, wobei jedes Objekt einen bestimmten Fahrzeugtyp im Katalog des Anbieters definiert. Für einen bestimmten Fahrzeugtyp kann es nur ein Objekt geben.
vehicle_types[].vehicle_type_id ID Erforderlich Eine eindeutige Kennung für einen bestimmten Fahrzeugtyp.
vehicle_types[].form_factor Enum Erforderlich Ein Enum, das den allgemeinen Formfaktor des Fahrzeugs aus der folgenden Liste der derzeit gültigen Werte darstellt:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type Enum Erforderlich Ein Enum, das den primären Antriebstyp des Fahrzeugs aus der folgenden Liste der derzeit gültigen Werte darstellt:
  • human: Antrieb durch Treten oder mit dem Fuß
  • electric_assist: Bietet nur in Verbindung mit menschlicher Kraft Unterstützung
  • electric: Enthält den Drosselungsmodus mit einem akkubetriebenen Motor.
  • combustion: Enthält den Drosselungsmodus für einen Motor mit Verbrennungsmotor.
vehicle_types[].max_range_meters Nicht negative Gleitkommazahl Conditionally required Wenn propulsion_type nicht auf human festgelegt ist, hat das Fahrzeug einen Motor und dieses Feld ist daher erforderlich.

Gibt die maximale Entfernung in Metern an, die das Fahrzeug ohne Aufladen oder Tanken zurücklegen kann, wenn es vollständig betankt oder aufgeladen ist.

Das folgende Beispiel zeigt 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
  }
]

Erforderlich: system_pricing_plans.json (Dockless-System)

Weitere Informationen finden Sie in der GBFS-Spezifikation.

In diesem Feed werden die Preismodelle für eigenständige Fahrzeuge definiert. Anbieter müssen Preisinformationen für freistehende Fahrzeuge angeben.

Diese Datei ist in V2.2 optional, aber für die Implementierung mit Google erforderlich.
Feldname Typ Anforderung Beschreibung
plans Array Erforderlich Ein Array von Objekten, wobei jedes Objekt einen bestimmten Tarif definiert.
plans[].plan_id ID Erforderlich Ein String, der eine eindeutige Kennung für den angegebenen Preisplan darstellt, den der Anbieter anbietet.
plans[].url URL Optional Die URL, über die Endnutzer weitere Informationen zum Tarif erhalten.
plans[].currency String Erforderlich Der ISO 4217-Standard für das Preismodell.
plans[].price Nicht negative Gleitkommazahl Erforderlich

Das Preismodell muss entweder als nicht bewertetes oder als bewertetes Preismodell definiert werden:

Tarif ohne Altersfreigabe

Dieser Tarif ist ein Pauschaltarif.

Legen Sie das folgende Feld fest:

  • price:Der Pauschalpreis für die gesamte Fahrt.
Bewerteter Tarif

Dieser Tarif ist ein stückweiser linearer Preis.

Legen Sie das folgende Feld fest:

  • price:Der Basispreis, der genau einmal pro Fahrt berechnet wird.

Legen Sie eines oder beide der folgenden Felder fest:

  • per_km_pricing:Der Preis der Fahrt, der als Preis pro Kilometer angegeben ist.
  • per_min_pricing:Der Preis der Fahrt, angegeben als Preis pro Minute.
plans[].per_km_pricing Array Conditionally required

Wenn der Preis von der zurückgelegten Strecke in Kilometern abhängt, ist dieses Feld erforderlich.

Ein Array von Objekten, wobei jedes Objekt ein bestimmtes segmentiertes Segment definiert. Der start-Wert jedes Segments muss kleiner oder gleich dem start-Wert des nächsten Segments sein.

Um den Gesamtpreis des angegebenen Tarifs zu ermitteln, addieren Sie den plans[].price-Wert des angegebenen Tarifs zu den aufgelaufenen Preisen für Segmente in plans[].per_km_pricing und plans[].per_min_pricing.

Wenn dieses Feld nicht festgelegt ist, gibt es keine variablen Preise basierend auf der Entfernung und daher sind auch keine im Gesamtpreis enthalten.

plans[].per_km_pricing[].start Nicht negative Ganzzahl Erforderlich Die Anzahl der Kilometer, ab der der Segmenttarif berechnet wird. Dieses Feld ist auf den inklusiven Wert festgelegt, mit dem der Bereich des Segments beginnt. Sobald die Anzahl der Kilometer erreicht ist, wird die rate einmal berechnet.
plans[].per_km_pricing[].rate Gleitkommazahl Erforderlich Der Preis, der für jede interval berechnet wird, beginnend mit dem inklusiven start des Segments. Wenn dieses Feld auf eine negative Zahl festgelegt ist, erhält der Reisende einen Rabatt.
plans[].per_km_pricing[].interval Nicht negative Ganzzahl Erforderlich

Das Intervall in Kilometern, in dem die rate des Segments unbegrenzt neu angewendet wird, sofern die end des Segments nicht auf eine nicht negative Ganzzahl festgelegt ist.

rate wird einmal zu Beginn jeder interval-Schleife angewendet. Die Entfernung wird dabei nicht gerundet.

Wenn der end des Segments auf eine nicht negative Ganzzahl gesetzt ist, wird der rate des Segments bis zum, aber nicht einschließlich des end-Werts des Segments noch einmal angewendet.

Wenn dieses Feld auf 0 gesetzt ist, wird die rate genau einmal am start des Segments berechnet.

plans[].per_km_pricing[].end Nicht negative Ganzzahl Optional

Die Anzahl der Kilometer, ab der die rate für das Segment nicht mehr angewendet wird. Dieses Feld wird auf den exklusiven Wert festgelegt, der den Bereich des Segments beendet. Wenn end beispielsweise auf 40 gesetzt ist, gilt die rate nicht mehr bei 40 Kilometern.

Wenn dieses Feld nicht festgelegt oder leer ist, wird der rate für das Segment bis zum Ende der Fahrt berechnet, zusätzlich zu allen weiteren Segmenten, die folgen.

plans[].per_min_pricing Array Conditionally required

Wenn der Preis von der verstrichenen Zeit (in Minuten) abhängt, ist dieses Feld erforderlich.

Ein Array von Objekten, wobei jedes Objekt ein bestimmtes zeitlich unterteiltes Segment definiert. Der start-Wert jedes Segments muss kleiner oder gleich dem start-Wert des nächsten Segments sein.

Um den Gesamtpreis des angegebenen Tarifs zu ermitteln, addieren Sie den plans[].price-Wert des angegebenen Tarifs zu den aufgelaufenen Preisen für Segmente in plans[].per_km_pricing und plans[].per_min_pricing.

Wenn dieses Feld nicht festgelegt ist, gibt es keine variablen Preise basierend auf der Zeit und daher sind keine im Gesamtpreis enthalten.

plans[].per_min_pricing[].start Gleitkommazahl Erforderlich Die Anzahl der Minuten, ab der der Segmenttarif berechnet wird. Dieses Feld ist auf den inklusiven Wert festgelegt, mit dem der Bereich des Segments beginnt. Nach Ablauf der festgelegten Anzahl von Minuten wird die rate also einmal in Rechnung gestellt.
plans[].per_min_pricing[].rate Gleitkommazahl Erforderlich Der Preis, der für jede interval berechnet wird. Die Rate beginnt bei start des Segments (einschließlich). Wenn dieses Feld auf eine negative Zahl festgelegt ist, erhält der Reisende einen Rabatt.
plans[].per_min_pricing[].interval Nicht negative Ganzzahl Erforderlich

Das Intervall in Minuten, in dem die rate des Segments unbegrenzt neu angewendet wird, sofern die end des Segments auf eine nicht negative Ganzzahl festgelegt ist.

Der Wert von rate wird zu Beginn jedes interval einmal neu angewendet. Die Reisezeit wird nicht gerundet.

Wenn der end des Segments auf eine nicht negative Ganzzahl gesetzt ist, wird der rate des Segments bis zum, aber nicht einschließlich des end-Werts des Segments noch einmal angewendet.

Wenn dieses Feld auf 0 gesetzt ist, wird die rate genau einmal am start des Segments berechnet.

plans[].per_min_pricing[].end Nicht negative Ganzzahl Optional

Die Anzahl der Minuten, nach denen die rate für das Segment nicht mehr angewendet wird. Dieses Feld wird auf den exklusiven Wert festgelegt, der den Bereich des Segments beendet. Wenn end beispielsweise auf 20 gesetzt ist, gilt der rate nach 20 Minuten nicht mehr.

Wenn dieses Feld nicht festgelegt oder leer ist, wird der rate für das Segment bis zum Ende der Fahrt berechnet, zusätzlich zu allen weiteren Segmenten, die folgen.

Beispiele für system_pricing_plans.json

Dieser Abschnitt enthält informative system_pricing_plans.json-Codebeispiele. Außerdem werden die relevanten Details und Ergebnisse für jedes Beispiel angegeben.

Beispiel 1 für system_pricing_plans.json

Im folgenden Beispiel für einen Tarifplan werden Gebühren basierend auf der Fahrzeit für die folgenden Intervalle berechnet:

  • [0,1): 2 $
    • Wenn die Fahrt weniger als eine Minute dauert, zahlt der Nutzer 2 $.
    • Beispiel: Fahrt über 59 Sekunden
  • [1,2): 3 $USD
    • Wenn die Fahrt mindestens eine Minute, aber weniger als zwei Minuten dauert, zahlt der Nutzer 2 $+ 1 $= 3 $.
    • Beispiele: 1-minütige Fahrt; 1-minütige und 45-sekündige Fahrt
  • x Minuten, wobei x größer oder gleich 2 ist: 3 $ + ((2 $ + 1 $) × (x – 2 + 1)) USD
    • Wenn die Fahrt mindestens zwei Minuten dauert, zahlt der Nutzer 3 $für den Teil der Fahrt, der weniger als zwei Minuten dauert, und (1 $ [Fortsetzung des ersten Eintrags der per_min_pricing-Liste] + 2 $ [zweiter Eintrag der per_min_pricing-Liste]) für jede Minute nach und einschließlich zwei Minuten.
    • Beispiele:
      • Kosten für 2‑minütige Fahrt: 3 $+ (2 $ + 1 $) = 6 $
      • Kosten für eine 2 Minuten und 30 Sekunden lange Fahrt: 3 $+ (2 $ + 1 $) = 6 $
      • Eine 3-minütige Fahrt kostet 3 $+ (($2 + $1) × 2) = 9 $.
      • Kosten für eine 10-minütige Fahrt: 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
      }
    ],
  }
}

Beispiel 2 für system_pricing_plans.json

In diesem Beispiel sehen Sie ein Codebeispiel für ein Preismodell, das sowohl nach Minuten als auch nach Kilometern berechnet wird:

  • Konkret werden dem Endnutzer 0,25 $ (CAD) pro Kilometer sowie 0,50 $ (CAD) pro Minute berechnet.
  • Beide Raten treten gleichzeitig auf und sind nicht voneinander abhängig.
  • Eine 10-minütige Fahrt über einen Kilometer kostet also 9 CAD. Die Kosten setzen sich so zusammen:
    • 3 $, Grundpreis
    • 0,25 $ × 2, einmal zu Beginn der Fahrt und einmal nach 1 km.
    • 0,5 $ * 11, einmalig zu Beginn jeder Minute in Rechnung gestellt. Die Abrechnung beginnt bei 0 Sekunden. Das letzte Intervall wird nach 10 Minuten abgerechnet.
{
  "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
    }]
  }
}

Bedingt erforderlich: geofencing_zones.json (System mit und ohne Ladestation)

Weitere Informationen finden Sie in der GBFS-Spezifikation.

In diesem Feed werden die Geofencing-Daten für freistehende Fahrzeuge definiert. Geofencing-Daten umfassen die geografischen Grenzen, die angeben, wo Fahrzeuge die Fahrt beginnen und beenden dürfen, sowie die Geschwindigkeit, mit der die Fahrzeuge fahren dürfen. Diese Geschwindigkeit ist entweder die Höchstgeschwindigkeit des Fahrzeugs oder die Geschwindigkeitsbegrenzung der Straße, auf der sich das Fahrzeug befindet, je nachdem, welcher Wert niedriger ist. Fahrer müssen die örtlichen Gesetze und Verordnungen einhalten.

Wir verwenden diese Daten, damit das Ergebnis für Mikromobilität herausgefiltert wird, wenn das Ende der Fahrt außerhalb der angegebenen Geofences liegt. Wenn keine Geofences angegeben werden, behandelt Google den Dienst so, als ob er keine Grenzwerteinschränkungen hat.

Feldname Typ Anforderung Beschreibung
geofencing_zones Objekt Erforderlich Ein FeatureCollection-Objekt, wie in IETF RFC 7946 beschrieben, ist ein Objekt mit einem Feld namens features. Der Wert von features ist ein JSON-Array. Jedes Element des JSON-Arrays ist ein Feature-Objekt.

Jede Zone mit geografischer Eingrenzung, die zugehörigen Regeln und Attribute sowie die Definitionen der FeatureCollection werden hier als Teil der geofencing_zones.json-Feeddefinitionen angegeben.

geofencing_zones.type String Erforderlich Auf FeatureCollection festgelegt, wie in IETF RFC 7946 beschrieben.
geofencing_zones.features Array Erforderlich Ein JSON-Array, in dem jedes Element des JSON-Arrays ein Feature-Objekt ist.
geofencing_zones.features[].type String Erforderlich Auf Feature festgelegt, wie in IETF RFC 7946 beschrieben.
geofencing_zones.features[].geometry GeoJSON-Multipolygon Erforderlich Ein GeoJSON-Multipolygon, das beschreibt, wo Fahrten nicht beginnen, enden oder durchfahren werden können, sowie andere Einschränkungen. Durch eine Anordnung der Punkte im Uhrzeigersinn wird die vom Polygon umschlossene Fläche definiert, durch eine Anordnung gegen den Uhrzeigersinn die Fläche außerhalb des Polygons. Weitere Informationen finden Sie unter Rechte-Hand-Regel.
geofencing_zones.features[].properties Objekt Erforderlich Ein Objekt, das die Reisezulagen und ‑beschränkungen definiert.
geofencing_zones.features[].properties.rules Array Optional Ein Array von Objekten, wobei jedes Objekt genau eine Regel definiert. Wenn sich zwei oder mehr Regeln überschneiden, kollidieren oder auf andere Weise in Konflikt stehen, hat die Regel, die in der JSON-Datei zuerst definiert wurde, Vorrang.
geofencing_zones.features[].properties.rules[].vehicle_type_id Array Optional Ein Array von Fahrzeugtyp-IDs, wobei jedes Element ein vehicle_type_id ist, für das Einschränkungen gelten. Wenn kein vehicle_type_id angegeben ist, gelten die Einschränkungen für alle Fahrzeugtypen.
geofencing_zones.features[].properties.rules[].ride_allowed Boolesch Erforderlich Gibt an, ob eine freistehende („nicht angedockte“) Fahrradtour in der Zone beginnen und enden kann. Mögliche Werte sind:
  • Wenn die Fahrt mit dem nicht angedockten Fahrrad in der Zone beginnen und enden kann, legen Sie true fest.
  • Wenn die Fahrt mit dem nicht angedockten Fahrrad nicht in der Zone beginnen und enden kann, legen Sie false fest.

Das folgende Beispiel zeigt 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]
      ]]]
    }
  }]
}

Erforderlich: station_information.json (Dockingstation)

Weitere Informationen finden Sie in der GBFS-Spezifikation.

In diesem Feed werden die allgemeinen Informationen zu öffentlichen Leihfahrradstationen definiert.

Feldname Typ Anforderung Beschreibung
stations Array Erforderlich Ein Array von Objekten, wobei jedes Objekt genau eine Station definiert.
stations[].station_id String Erforderlich Die ID der Station.
stations[].name String Erforderlich Der öffentliche Name des Bahnhofs in der lokalen Sprache der Stadt, in der sich der Bahnhof befindet. Die name muss, sofern verfügbar, mit den Schildern am Bahnhof übereinstimmen oder den Standort des Bahnhofs anhand einer Querstraße oder eines lokalen Orientierungspunkts widerspiegeln. Verwenden Sie keine Abkürzungen wie „Str.“ für „Straße“, es sei denn, sie werden auf Schildern explizit verwendet. Die name muss in gemischter Groß- und Kleinschreibung angegeben werden, die den lokalen Konventionen für die Groß- und Kleinschreibung von Ortsnamen entspricht, und darf nicht nur aus Großbuchstaben bestehen.
stations[].lat Breitengrad Erforderlich Der WGS84-Breitengrad der Station im Dezimalgradformat.
stations[].lon Längengrad Erforderlich Der WGS84-Längengrad der Station im Dezimalgradformat.
stations[].capacity Nicht negative Ganzzahl Optional Eine nicht negative Ganzzahl, die die Gesamtzahl der an der Station installierten Andockpunkte darstellt, sowohl verfügbare als auch nicht verfügbare.
stations[].rental_uris Objekt Erforderlich

Ein JSON-Objekt, das Miet-URIs für Android, iOS und das Web in den entsprechenden Feldern enthält.

Wenn diese URIs angegeben sind, überschreiben sie die Standard-Deeplinks, die beim Onboarding des Anbieters festgelegt wurden.

Dieses Feld ist in Version 2.2 optional, aber für die Implementierung mit Google erforderlich.
stations[].rental_uris.android URI Conditionally required

Ein URI, der mit einem android.intent.action.VIEW-Android-Intent an eine Android-App übergeben werden kann, um Android-Deeplinks zu unterstützen. Der bereitgestellte rental_uris muss ein Android App Link sein, damit die Wiedergabe-App die Weiterleitung des Nutzers zum App-Shop nicht manuell verwalten muss, falls der Nutzer die Anbieteranwendung nicht installiert hat.

Dieser URI muss ein Deeplink sein, der sich auf die einzelne Station bezieht, und darf keine allgemeine Verleihseite mit Informationen zu mehreren Stationen sein. Der Deeplink muss den Nutzer direkt zum Sender weiterleiten, ohne dass Aufforderungen, Interstitials oder Anmeldungen erforderlich sind. Nutzer müssen den Sender sehen können, auch wenn sie die App noch nie geöffnet haben.

URIs müssen nicht unbedingt die station_id für den Sender enthalten, sofern der Partner andere Möglichkeiten hat, den jeweiligen Sender zu identifizieren. Die Verleih-App kann beispielsweise andere IDs im URI verwenden, um die Station eindeutig zu identifizieren.

Dieses Feld ist erforderlich, wenn der Partner eine Android-App für den Verleih hat.

Beispiel für einen Android-App-Link:

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

stations[].rental_uris.ios URI Conditionally required

Ein URI, der auf iOS verwendet werden kann, um die Verleih-App für die Station zu starten. Weitere Informationen dazu finden Sie im Apple-Artikel zu benutzerdefinierten URL-Schemas für iOS. Der bereitgestellte rental_uris muss ein iOS-Universallink sein, damit die Wiedergabe-App die Weiterleitung des Nutzers zum App-Store nicht manuell verwalten muss, falls der Nutzer die Anbieteranwendung nicht installiert hat.

Dieser URI muss ein Deeplink sein, der sich auf die einzelne Station bezieht, und darf keine allgemeine Verleihseite mit Informationen zu mehreren Stationen sein. Der Deeplink muss den Nutzer direkt zum Sender weiterleiten, ohne dass Aufforderungen, Interstitials oder Anmeldungen erforderlich sind. Nutzer müssen den Sender sehen können, auch wenn sie die App noch nie geöffnet haben.

URIs müssen nicht unbedingt die station_id für den Sender enthalten. Die Verleih-App kann andere Kennungen im URI verwenden, um die Station eindeutig zu identifizieren.

Dieses Feld ist erforderlich, wenn der Partner eine iOS-Leih-App hat.

Beispiel für einen universellen iOS-Link:

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

stations[].rental_uris.web URL Optional

Eine URL, die von einem Webbrowser verwendet werden kann, um weitere Informationen zum Mieten eines Fahrzeugs an dieser Station anzuzeigen.

Diese URL muss ein Deeplink sein, der sich auf die einzelne Station bezieht, und darf keine allgemeine Verleihseite mit Informationen zu mehreren Stationen sein. Über den Deeplink muss der Nutzer direkt zum Sender gelangen, ohne dass er aufgefordert wird, etwas zu tun, oder dass er Interstitials oder Anmeldeseiten sieht. Achte darauf, dass Nutzer den Sender sehen können, auch wenn sie die Anwendung noch nie geöffnet haben.

URLs müssen nicht unbedingt station_id für den Sender enthalten oder den semantischen Konventionen der Leih-URLs für Android oder iOS entsprechen. Die Verleih-App kann in der URL andere Kennungen verwenden, die die Station eindeutig identifizieren.

Wenn dieses Feld nicht festgelegt ist, werden Deeplinks für den Webbrowser nicht unterstützt.

Beispielwert:

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

Das folgende Beispiel zeigt 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"
    }
  },
]

Erforderlich: station_status.json (angedocktes System)

Weitere Informationen finden Sie in der GBFS-Spezifikation.

In diesem Feed wird der aktuelle Status öffentlicher Bikesharing-Stationen definiert.

Feldname Typ Anforderung Beschreibung
stations Array Erforderlich Ein Array von Objekten, wobei jedes Objekt genau einen Sender definiert.
stations[].station_id String Erforderlich Die ID der Station.
stations[].num_bikes_available Nicht negative Ganzzahl Erforderlich

Eine nicht negative Ganzzahl, die die Anzahl der funktionsfähigen Fahrräder angibt, die sich physisch an der Station befinden und möglicherweise zur Vermietung angeboten werden.

Um festzustellen, ob an der Station derzeit Fahrräder vermietet werden, müssen Sie das Feld is_renting der Station prüfen und nach einem booleschen Wert „true“ suchen.

stations[].vehicle_types_available Array Optional

Ein Array von Objekten, das die Gesamtzahl der Fahrzeuge definiert, kategorisiert nach dem jeweiligen Fahrzeugtyp, der an einer Station verfügbar ist. Jedes Objekt modelliert die Gesamtzahl der Fahrzeuge für den zugehörigen Fahrzeugtyp. Die Gesamtzahl der Fahrzeuge aus jedem dieser Objekte muss dem Wert im Feld num_bikes_available entsprechen.

stations[].vehicle_types_available[].vehicle_type_id ID Erforderlich

Die vehicle_type_id der einzelnen Fahrzeugtypen, die an der Station verfügbar sind, wie in vehicle_types.json beschrieben.

stations[].vehicle_types_available[].count Nicht negative Ganzzahl Erforderlich

Die Gesamtzahl der verfügbaren Fahrzeuge für den entsprechenden vehicle_type_id an der Station, wie in vehicle_types.json definiert.

stations[].num_docks_available Nicht negative Ganzzahl Conditionally required

Das Feld ist erforderlich, sofern die Station nicht über eine unbegrenzte Anzahl von Andockplätzen verfügt. Virtuelle Stationen haben beispielsweise eine unbegrenzte Anzahl an Andockplätzen und das Feld ist nicht erforderlich.

Eine nicht negative Ganzzahl, die die Gesamtzahl der funktionsfähigen Docks an der Station angibt, die für die Rückgabe von Fahrzeugen geeignet sind.

Um festzustellen, ob an der Station derzeit Fahrräder zurückgegeben werden können, müssen Sie das Feld is_returning der Station prüfen und nach einem booleschen Wert true suchen.

stations[].is_installed Boolesch Erforderlich

Ein boolescher Wert, der angibt, ob die Station derzeit auf der Straße installiert ist.

Wenn die Ladestation auf der Straße installiert ist, stellen Sie den Wert auf true ein.

Wenn die Station nicht auf der Straße installiert ist, legen Sie den Wert auf false fest.

stations[].is_renting Boolesch Erforderlich

Ein boolescher Wert, der angibt, ob an der Station derzeit Fahrräder ausgeliehen werden.

Wenn an der Station derzeit Fahrräder verliehen werden, legen Sie den Wert auf true fest. Auch wenn die Station leer ist, wird is_renting auf true gesetzt, wenn die Vermietung erlaubt ist.

Wenn an der Station derzeit keine Fahrräder vermietet werden, setzen Sie den Wert auf false.

stations[].is_returning Boolesch Erforderlich

Ein boolescher Wert, der angibt, ob an der Station derzeit Fahrräder zurückgegeben werden können.

Wenn an der Station derzeit Fahrräder zurückgegeben werden können, auf true setzen. Auch wenn die Station voll ist, aber eine Rückgabe möglich wäre, wenn sie nicht voll wäre, wird is_returning auf true gesetzt.

Wenn an der Station derzeit keine Rückgabe von Fahrrädern möglich ist, setzen Sie den Wert auf false.

Hier ein Beispiel für 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
        },
]