Definizioni GBFS

Prima di procedere con questa sezione, se non l'hai ancora fatto, verifica i sistemi di micromobilità supportati per cui stai creando il feed.

Nelle sezioni seguenti, ogni intestazione ha il seguente formato: Required|Optional|Conditionally required: Feed name (System supported). Sono supportati i seguenti sistemi:

  • Sistema agganciato
  • Sistema senza stazione di ricarica
  • Sistema con base e senza base

Per eseguire l'integrazione con Google, fornisci solo i file necessari per il sistema descritto dal feed e specifica i campi obbligatori inclusi nelle sezioni pertinenti. Per i campi obbligatori in modo condizionale, consulta la descrizione del campo per indicazioni. Puoi anche specificare campi facoltativi che aggiungono informazioni e forniscono una migliore esperienza utente.

Intestazione obbligatoria per i feed di micromobilità

I feed di micromobilità sono feed che contengono dati strutturati di micromobilità con o senza stazione di ricarica, come definito in questo articolo.

Tutti i feed devono sempre specificare i campi inclusi nella tabella seguente al livello superiore dell'oggetto JSON, noti collettivamente come intestazione GBFS comune.

Nome campo Tipo Requisito Descrizione
last_updated Timestamp Obbligatorio Un timestamp POSIX, che specifica un numero di secondi dal 1° gennaio 1970 00:00:00 UTC.

Impostato sull'ultima volta che i dati nel feed sono stati aggiornati.

ttl Numero intero non negativo Obbligatorio Un numero intero non negativo che rappresenta il numero di secondi che rimangono fino al momento dell'aggiornamento del feed.

Se i dati devono essere aggiornati a una velocità costante, imposta questo valore su 0.

data JSON Obbligatorio JSON contenente i campi di dati per il singolo feed.

Ad esempio, un feed free_bike_status.json aggregato che specifica l'intestazione GBFS comune potrebbe essere il seguente:

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

Obbligatorio: system_information.json (sistema con aggancio e senza aggancio)

Fai riferimento alla specifica GBFS in base alle tue necessità.

Questo feed fornisce dettagli sull'operatore del sistema.

Nome campo Tipo Requisito Descrizione
system_id ID Obbligatorio Un identificatore univoco globale per il sistema di condivisione del veicolo. Questo valore è destinato a rimanere invariato per tutta la durata del sistema. Ogni sistema o area geografica distinta in cui vengono utilizzati i veicoli DEVE avere il proprio system_id. Gli ID sistema DEVONO essere riconoscibili come appartenenti a un sistema specifico anziché a stringhe casuali, ad esempio bcycle_austin o biketown_pdx.
name Stringa Obbligatorio Nome del sistema, che viene mostrato ai clienti.
rental_apps Oggetto Obbligatorio Un oggetto JSON contenente le informazioni dell'app di noleggio per Android e iOS nei rispettivi campi.
rental_apps.android Oggetto Obbligatorio condizionalmente Contiene informazioni sul download e sulla scoperta di app di noleggio per la piattaforma Android nei campi store_uri e discovery_uri. Se il fornitore del sistema ha un'app di noleggio per Android, questo campo è obbligatorio.
rental_apps.android.store_uri URI Obbligatorio URI da cui è possibile scaricare l'app Android per il noleggio. In genere si tratta di un URI a uno store come Google Play. Se l'URI rimanda a uno store come Google Play, ti consigliamo di seguire le best practice di Android in modo che l'app di visualizzazione possa aprire direttamente l'URI nell'app nativa dello store anziché in un sito web.
rental_apps.android.discovery_uri URI Obbligatorio URI nel formato your_custom_scheme://your/path/here. L'URI può essere utilizzato da PackageManager.queryIntentActivities() per scoprire se l'app Android di noleggio è installata sul dispositivo.
rental_apps.ios Oggetto Obbligatorio condizionalmente Contiene informazioni sul download e sulla scoperta di app di noleggio per la piattaforma iOS nei campi store_uri e discovery_uri. Se il fornitore del sistema ha un'app di noleggio per iOS, questo campo è obbligatorio.
rental_apps.ios.store_uri URI Obbligatorio URI da cui è possibile scaricare l'app iOS di noleggio. In genere si tratta di un URI a uno store come l'App Store di Apple. Se l'URI rimanda a un app store come l'App Store di Apple, ti consigliamo di seguire le best practice per iOS in modo che l'app di visualizzazione possa aprire direttamente l'URI nell'app nativa dell'app store anziché in un sito web.
rental_apps.ios.discovery_uri URI Obbligatorio URI nel formato your_custom_scheme://. L'URI può essere utilizzato da UIApplication canOpenURL: per scoprire se l'app iOS di noleggio è installata sul dispositivo.

Obbligatorio: free_bike_status.json (sistema senza stazione di bike sharing)

Fai riferimento alla specifica GBFS in base alle tue necessità.

Questo feed definisce le posizioni e gli attributi dei veicoli indipendenti disponibili. Per motivi di privacy, i veicoli che fanno parte di un noleggio attivo non devono essere visualizzati in questo feed.

Nome campo Tipo Requisito Descrizione
bikes Array Obbligatorio Un array di biciclette attualmente disponibili e ferme, in cui ogni bicicletta è un oggetto.
bikes[].bike_id ID Obbligatorio L'identificatore di una bicicletta.

Per proteggere la privacy, l'ID può essere modificato in una stringa casuale dopo ogni viaggio.

bikes[].lat Latitudine Obbligatorio La latitudine WGS 84 della bicicletta, in formato gradi decimali.
bikes[].lon Longitudine Obbligatorio La longitudine WGS 84 della bicicletta, in formato gradi decimali.
bikes[].is_reserved Booleano Obbligatorio Indica se la bicicletta è attualmente prenotata, come segue:
  • Se la bicicletta è attualmente prenotata, imposta il valore true.
  • Se la bici non è attualmente prenotata, impostala su false.
bikes[].is_disabled Booleano Obbligatorio Indica se la bicicletta è attualmente disattivata o rotta, come segue:
  • Se la bicicletta è attualmente disattivata, imposta il valore su true.
  • Se la bicicletta non è attualmente disattivata, impostala su false.
bikes[].rental_uris Oggetto Obbligatorio Un oggetto JSON contenente gli URI di noleggio per Android, iOS e web nei rispettivi campi.
bikes[].rental_uris.android URI Obbligatorio condizionalmente Un URI che può essere trasmesso a un'app Android con un intent Android android.intent.action.VIEW per supportare i link diretti per Android. L'rental_uris fornito deve essere un link per app Android in modo che l'app di visualizzazione non debba gestire manualmente il reindirizzamento dell'utente all'app store nel caso in cui l'utente non abbia installato l'applicazione del fornitore.

Questo URI deve essere un link diretto specifico per la singola bicicletta, non una pagina di noleggio generica che include informazioni per più di una bicicletta. Il link diretto deve indirizzare l'utente direttamente alla bicicletta senza richieste, pagine interstitial o accessi. Assicurati che gli utenti possano vedere la bicicletta anche se non hanno mai aperto l'applicazione.

Non è necessario che gli URI includano bike_id per la bicicletta, a condizione che il partner disponga di altri mezzi per identificare la bicicletta in questione. Ad esempio, l'app di noleggio può utilizzare altri identificatori all'interno dell'URI per identificare in modo univoco la bicicletta.

Se il partner ha un'app di noleggio per Android, questo campo è obbligatorio.

Esempio di Link per app Android:

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

bikes[].rental_uris.ios URI Obbligatorio condizionalmente Un URI che può essere utilizzato su iOS per avviare l'app di noleggio della bicicletta. Per saperne di più, consulta l'articolo di Apple sugli schemi URL personalizzati di iOS. Il rental_uris fornito deve essere link universali iOS in modo che l'app di visualizzazione non debba gestire manualmente il reindirizzamento dell'utente all'app store nel caso in cui l'utente non abbia installato l'applicazione del fornitore.

Questo URI deve essere un link diretto specifico per la singola bicicletta, non una pagina di noleggio generica che include informazioni per più di una bicicletta. Il link diretto deve indirizzare l'utente direttamente alla bicicletta senza richieste, pagine interstitial o accessi. Assicurati che gli utenti possano vedere la bicicletta anche se non hanno mai aperto l'applicazione.

Non è necessario che gli URI includano bike_id per la bicicletta, a condizione che il partner disponga di altri mezzi per identificare la bicicletta in questione. Ad esempio, l'app di noleggio può utilizzare altri identificatori all'interno dell'URI per identificare in modo univoco la bicicletta.

Se il partner ha un'app di noleggio per iOS, questo campo è obbligatorio.

Esempio di link universali iOS:

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

bikes[].rental_uris.web URL Facoltativo

Un URL che può essere utilizzato da un browser web per mostrare ulteriori informazioni sul noleggio di un veicolo presso questo veicolo.

Questo URL deve essere un link diretto specifico per la singola bicicletta, non una pagina di noleggio generica che include informazioni per più di una bicicletta. Il link diretto deve indirizzare l'utente direttamente alla bicicletta senza richieste, pagine interstitial o accessi. Assicurati che gli utenti possano vedere la bicicletta anche se non hanno mai aperto l'applicazione.

Non è necessario che gli URL includano bike_id per la bicicletta o che seguano le convenzioni semantiche degli URL di noleggio per Android o iOS. L'app di noleggio può utilizzare altri identificatori all'interno dell'URL che identificano in modo univoco la bicicletta.

Se questo campo non è impostato, significa che i link diretti non sono supportati per il browser web.

Valore di esempio:

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

bikes[].vehicle_type_id ID Obbligatorio Il vehicle_type_id del veicolo come descritto nella sezione vehicle_types.json.
bikes[].pricing_plan_id ID Obbligatorio Identificatore del piano tariffario applicato quando questo tipo di veicolo viene noleggiato come descritto nella sezione system_pricing_plans.json.
bikes[].current_range_meters Valore in virgola mobile non negativo Obbligatorio condizionalmente Se la definizione di vehicle_type corrispondente al veicolo ha un motore, questo campo è obbligatorio.

Impostato sulla distanza massima in metri che il veicolo può percorrere senza necessità di ricarica o rifornimento, in base al livello di carica o carburante attuale del veicolo.

bikes[].last_reported Timestamp Facoltativo Impostato sull'ultima volta che il veicolo ha comunicato il suo stato al backend dell'operatore.

Di seguito è riportato un esempio per 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
}
]

Obbligatorio: vehicle_types.json (sistema con stazione di bike sharing e senza stazione)

Fai riferimento alla specifica GBFS in base alle tue necessità.

Questo feed definisce i dettagli dei singoli tipi di veicoli, come indicato nella sezione free_bike_status.json.

Nome campo Tipo Requisito Descrizione
vehicle_types Array Obbligatorio Un array di oggetti, in cui ogni oggetto definisce un tipo di veicolo distinto nel catalogo del fornitore. Può esserci un solo oggetto per un determinato tipo di veicolo.
vehicle_types[].vehicle_type_id ID Obbligatorio Un identificatore univoco per un determinato tipo di veicolo.
vehicle_types[].form_factor Enum Obbligatorio Un'enumerazione che rappresenta il fattore di forma generale del veicolo, dall'elenco seguente di valori attualmente validi:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type Enum Obbligatorio Un'enumerazione che rappresenta il tipo di propulsione principale del veicolo, dall'elenco seguente di valori attualmente validi:
  • human: Propulsione a pedali o a piedi
  • electric_assist: Fornisce energia solo insieme alla propulsione umana
  • electric: contiene la modalità di accelerazione con un motore alimentato a batteria
  • combustion: Contiene la modalità di accelerazione con un motore alimentato da un motore a benzina
vehicle_types[].max_range_meters Valore in virgola mobile non negativo Obbligatorio condizionalmente Se propulsion_type non è impostato su human, il veicolo ha un motore, quindi questo campo è obbligatorio.

Impostato sulla distanza massima in metri che il veicolo può percorrere senza necessità di ricarica o rifornimento, quando il veicolo è completamente carico o ha il pieno.

Di seguito è riportato un esempio per 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
  }
]

Obbligatorio: system_pricing_plans.json (sistema senza aggancio)

Fai riferimento alla specifica GBFS in base alle tue necessità.

Questo feed definisce i piani tariffari per i veicoli indipendenti. Richiediamo ai fornitori di mostrare le informazioni sui prezzi per i veicoli indipendenti.

Nome campo Tipo Requisito Descrizione
plans Array Obbligatorio Un array di oggetti in cui ogni oggetto definisce un determinato piano tariffario.
plans[].plan_id ID Obbligatorio Una stringa che rappresenta un identificatore univoco per il piano tariffario offerto dal fornitore.
plans[].url URL Facoltativo L'URL che indirizza gli utenti finali a ulteriori informazioni sul piano tariffario.
plans[].currency Stringa Obbligatorio Lo standard ISO 4217 per il piano tariffario.
plans[].price Valore in virgola mobile non negativo Obbligatorio

Il piano tariffario deve essere definito come piano tariffario non valutato o come piano tariffario valutato:

Piano tariffario senza classificazione

Questo piano prevede una tariffa unica e fissa.

Imposta il seguente campo:

  • price: il prezzo fisso dell'intero viaggio.
Piano tariffario valutato

Questo piano è un prezzo a tariffa lineare a tratti.

Imposta il seguente campo:

  • price: il prezzo base, che viene addebitato esattamente una volta per viaggio.

Imposta uno o entrambi i seguenti campi:

  • per_km_pricing: il prezzo del viaggio specificato in base alla tariffa per chilometro.
  • per_min_pricing: il prezzo della corsa specificato alla tariffa al minuto.
plans[].per_km_pricing Array Obbligatorio condizionalmente

Se il prezzo è una funzione della distanza percorsa, visualizzata in chilometri, questo campo è obbligatorio.

Un array di oggetti in cui ogni oggetto definisce un determinato segmento diviso per distanza. Il valore start di ogni segmento deve essere minore o uguale al valore start del segmento successivo.

Per determinare il prezzo totale del piano specificato, aggiungi il valore plans[].price del piano specificato ai prezzi maturati per i segmenti in plans[].per_km_pricing e plans[].per_min_pricing.

Se questo campo non è impostato, non sono presenti prezzi variabili in base alla distanza e pertanto nessuno è incluso nel prezzo totale.

plans[].per_km_pricing[].start Numero intero non negativo Obbligatorio Il numero di chilometri a partire dal quale viene addebitata la tariffa del segmento. Questo campo è impostato sul valore inclusivo che inizia l'intervallo del segmento. Pertanto, una volta trascorsi i chilometri, l'importo rate viene addebitato una sola volta.
plans[].per_km_pricing[].rate Float Obbligatorio La tariffa addebitata per ogni interval, a partire dal start inclusivo del segmento. Se questo campo è impostato su un numero negativo, il viaggiatore riceve uno sconto.
plans[].per_km_pricing[].interval Numero intero non negativo Obbligatorio

L'intervallo in chilometri in cui viene riapplicato indefinitamente il rate del segmento, a meno che il end del segmento non sia impostato su un numero intero non negativo.

Il rate viene riapplicato una volta all'inizio di ogni interval e non viene preso in considerazione alcun arrotondamento della distanza.

Se end del segmento è impostato su un numero intero non negativo, rate del segmento viene riapplicato fino a, ma non incluso, il valore end del segmento.

Se questo campo è impostato su 0, il rate viene addebitato esattamente una volta al start del segmento.

plans[].per_km_pricing[].end Numero intero non negativo Facoltativo

Il numero di chilometri al punto in cui il rate per il segmento non viene più applicato. Questo campo è impostato sul valore esclusivo che termina l'intervallo del segmento. Ad esempio, se end è impostato su 40, rate non si applica più a 40 chilometri.

Se questo campo non è impostato o è vuoto, viene addebitato l'importo rate per il segmento fino al termine del viaggio, oltre a eventuali segmenti aggiuntivi che seguono.

plans[].per_min_pricing Array Obbligatorio condizionalmente

Se il prezzo è una funzione del tempo trascorso, visualizzato in minuti, questo campo è obbligatorio.

Un array di oggetti in cui ogni oggetto definisce un segmento diviso in base al tempo. Il valore start di ogni segmento deve essere inferiore o uguale al valore start del segmento successivo.

Per determinare il prezzo totale del piano specificato, aggiungi il valore plans[].price del piano specificato ai prezzi maturati per i segmenti in plans[].per_km_pricing e plans[].per_min_pricing.

Se questo campo non è impostato, non sono presenti prezzi variabili in base al tempo e pertanto nessuno è incluso nel prezzo totale.

plans[].per_min_pricing[].start Float Obbligatorio Il numero di minuti a partire dal quale viene addebitata la tariffa del segmento. Questo campo è impostato sul valore inclusivo che inizia l'intervallo del segmento. Pertanto, una volta trascorso il numero di minuti impostato, il rate viene addebitato una sola volta.
plans[].per_min_pricing[].rate Float Obbligatorio Il tasso addebitato per ogni interval. La tariffa inizia dall'inclusivo start del segmento. Se questo campo è impostato su un numero negativo, il viaggiatore riceve uno sconto.
plans[].per_min_pricing[].interval Numero intero non negativo Obbligatorio

L'intervallo in minuti in cui viene riapplicato rate del segmento indefinitamente, a meno che end del segmento non sia impostato su un numero intero non negativo.

Il rate viene riapplicato una volta all'inizio di ogni interval e non viene preso in considerazione alcun arrotondamento del tempo di viaggio.

Se end del segmento è impostato su un numero intero non negativo, rate del segmento viene riapplicato fino a, ma non incluso, il valore end del segmento.

Se questo campo è impostato su 0, il rate viene addebitato esattamente una volta al start del segmento.

plans[].per_min_pricing[].end Numero intero non negativo Facoltativo

Il numero di minuti dopo i quali il rate per il segmento non viene più applicato. Questo campo è impostato sul valore esclusivo che termina l'intervallo del segmento. Ad esempio, se end è impostato su 20, rate non si applica più dopo 20 minuti.

Se questo campo non è impostato o è vuoto, viene addebitato il rate per il segmento fino al termine del viaggio, oltre a eventuali segmenti aggiuntivi che seguono.

Esempi per system_pricing_plans.json

Questa sezione fornisce esempi di codice system_pricing_plans.json informativi. Vengono forniti anche i dettagli e i risultati pertinenti di ciascun esempio.

Esempio 1 per system_pricing_plans.json

Il seguente esempio di codice del piano tariffario mostra gli addebiti in base alla durata del viaggio per i seguenti intervalli:

  • [0,1): 2 $
    • Se il viaggio dura meno di un minuto, l'utente paga 2 $.
    • Esempio: viaggio di 59 secondi
  • [1,2): 3 $ USD
    • Se il viaggio dura almeno un minuto, ma meno di due minuti, l'utente paga 2 $+ 1 $= 3 $.
    • Esempi: corsa di 1 minuto; corsa di 1 minuto e 45 secondi
  • x numero di minuti in cui x è maggiore o uguale a 2: $3 + (($2 + $1) * (x - 2 + 1)) USD
    • Se il viaggio dura almeno due minuti, l'utente paga 3 $per la parte del viaggio inferiore a due minuti e (1 $ [continuando dalla prima voce dell'elenco per_min_pricing] + 2 $ [la seconda voce dell'elenco per_min_pricing]) per ogni minuto successivo e inclusi i due minuti.
    • Esempi:
      • Costo della corsa di 2 minuti: 3 $+ (2 $ + 1 $) = 6 $
      • Costo della corsa di 2 minuti e 30 secondi: 3 $+ (2 $ + 1 $) = 6 $
      • Costo della corsa di 3 minuti: 3 $+ (($2 + $1) * 2) = 9 $
      • Costo della corsa di 10 minuti: 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
      }
    ],
  }
}

Esempio 2 per system_pricing_plans.json

In questo esempio, mostriamo un codice campione per un piano tariffario che viene addebitato a una tariffa sia per minuti che per chilometri:

  • Nello specifico, all'utente finale vengono addebitati 0,25 $CAD per km e 0,50 $CAD al minuto.
  • Entrambi questi tassi si verificano contemporaneamente e non dipendono l'uno dall'altro.
  • Pertanto, una corsa di un chilometro che dura 10 minuti costa 9 $CAD. La ripartizione del costo è la seguente:
    • 3 $, prezzo base
    • 0,25 $ * 2, addebitato una volta all'inizio del viaggio e una volta al chilometro.
    • 0,5 $ * 11, addebitato una volta all'inizio di ogni minuto. Gli addebiti iniziano a 0 secondi, con l'ultimo intervallo addebitato a 10 minuti.
{
  "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
    }]
  }
}

Obbligatorio condizionalmente: geofencing_zones.json (sistema con e senza aggancio)

Fai riferimento alla specifica GBFS in base alle tue necessità.

Questo feed definisce i dati di geofencing per i veicoli indipendenti. I dati di geofencing includono i confini geografici che specificano dove i veicoli sono autorizzati a iniziare e terminare la corsa, nonché la velocità a cui i veicoli possono andare. Questa velocità è la velocità massima del veicolo o il limite di velocità della strada su cui si trova il veicolo, a seconda di quale sia inferiore. I conducenti devono rispettare le leggi e le ordinanze locali.

Utilizziamo questi dati in modo che, quando un utente cerca un determinato percorso, se la fine del viaggio non rientra nei geofence specifici, il risultato di micromobilità venga filtrato. Se non vengono forniti recinti virtuali, Google considera il servizio come se non avesse restrizioni di confine.

Nome campo Tipo Requisito Descrizione
geofencing_zones Oggetto Obbligatorio Un oggetto FeatureCollection come descritto da IETF RFC 7946 è un oggetto con un campo denominato features. Il valore di features è un array JSON. Ogni elemento della matrice JSON è un oggetto Feature.

Ogni zona recintata, le relative regole e attributi e le definizioni di FeatureCollection sono specificati qui come parte delle definizioni del feed geofencing_zones.json.

geofencing_zones.type Stringa Obbligatorio Impostato su FeatureCollection come descritto nella RFC 7946 di IETF.
geofencing_zones.features Array Obbligatorio Una matrice JSON, in cui ogni elemento è un oggetto Feature.
geofencing_zones.features[].type Stringa Obbligatorio Impostato su Feature come descritto nella RFC 7946 di IETF.
geofencing_zones.features[].geometry Multipoligono GeoJSON Obbligatorio Un Multipolygon GeoJSON che descrive dove non è possibile iniziare, terminare o attraversare le corse, oltre ad altre limitazioni. Una disposizione in senso orario dei punti definisce l'area racchiusa dal poligono, mentre un ordine antiorario definisce l'area esterna al poligono. Per ulteriori informazioni, consulta la regola della mano destra.
geofencing_zones.features[].properties Oggetto Obbligatorio Un oggetto che definisce le indennità e le limitazioni di viaggio.
geofencing_zones.features[].properties.rules Array Facoltativo Un array di oggetti, in cui ogni oggetto definisce una e una sola regola. Se due o più regole si sovrappongono, si scontrano o sono in conflitto in qualche modo, ha la precedenza la regola definita per prima nell'ordine del file JSON.
geofencing_zones.features[].properties.rules[].vehicle_type_id Array Facoltativo Un array di ID tipo di veicolo, in cui ogni elemento è un vehicle_type_id, a cui devono essere applicate eventuali limitazioni. Se non è specificato alcun vehicle_type_id, le limitazioni si applicano a tutti i tipi di veicoli.
geofencing_zones.features[].properties.rules[].ride_allowed Booleano Obbligatorio Se il giro in bicicletta "sganciato" può iniziare e terminare nella zona, come segue:
  • Se la corsa in bicicletta senza aggancio può iniziare e terminare nella zona, imposta true.
  • Se la corsa in bicicletta sganciata non può iniziare e terminare nella zona, imposta false.

Di seguito è riportato un esempio per 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]
      ]]]
    }
  }]
}

Obbligatorio: station_information.json (sistema agganciato)

Fai riferimento alla specifica GBFS in base alle tue necessità.

Questo feed definisce le informazioni generali sulle stazioni di bike sharing pubblico.

Nome campo Tipo Requisito Descrizione
stations Array Obbligatorio Un array di oggetti in cui ogni oggetto definisce una e una sola stazione.
stations[].station_id Stringa Obbligatorio L'identificatore della stazione.
stations[].name Stringa Obbligatorio Il nome pubblico della stazione nella lingua locale della città in cui si trova la stazione. Il name deve rispettare quanto utilizzato sulla segnaletica della stazione, se disponibile, oppure deve riflettere la posizione della stazione tramite l'utilizzo di una strada trasversale o di un punto di riferimento locale. Non utilizzare abbreviazioni come "Via" per "Via", a meno che non siano utilizzate esplicitamente nella segnaletica e name deve essere in formato misto seguendo le convenzioni locali per l'uso delle maiuscole nei nomi di luoghi e non in maiuscolo.
stations[].lat Latitudine Obbligatorio La latitudine WGS 84 della stazione, in formato gradi decimali.
stations[].lon Longitudine Obbligatorio La longitudine WGS 84 della stazione, in formato gradi decimali.
stations[].capacity Numero intero non negativo Facoltativo Un numero intero non negativo che rappresenta il numero totale di punti di aggancio installati nella stazione, sia disponibili che non disponibili.
stations[].rental_uris Oggetto Obbligatorio

Un oggetto JSON contenente gli URI di noleggio per Android, iOS e web nei rispettivi campi.

Se questi URI sono specificati, sostituiscono i link diretti predefiniti impostati durante l'onboarding del fornitore.

stations[].rental_uris.android URI Obbligatorio condizionalmente

Un URI che può essere trasmesso a un'app Android con un intent Android android.intent.action.VIEW per supportare i link diretti per Android. L'rental_uris fornito deve essere un Android App Link, in modo che l'app di visualizzazione non debba gestire manualmente il reindirizzamento dell'utente all'app store nel caso in cui l'utente non abbia installato l'applicazione del fornitore.

Questo URI deve essere un link diretto specifico per la singola stazione, non una pagina di noleggio generale che include informazioni per più di una stazione. Il link diretto deve indirizzare l'utente direttamente alla stazione senza prompt, pagine interstitial o accessi. Assicurati che gli utenti possano vedere la stazione anche se non hanno mai aperto l'applicazione.

Non è necessario che gli URI includano station_id per la stazione, purché il partner disponga di altri mezzi per identificare la rispettiva stazione. Ad esempio, l'app di noleggio può utilizzare altri identificatori all'interno dell'URI per identificare in modo univoco la stazione.

Se il partner ha un'app di noleggio per Android, questo campo è obbligatorio.

Esempio di Link per app Android:

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

stations[].rental_uris.ios URI Obbligatorio condizionalmente

Un URI che può essere utilizzato su iOS per avviare l'app di noleggio per la stazione. Per saperne di più, consulta l'articolo di Apple sugli schemi URL personalizzati di iOS. Il rental_uris fornito deve essere link universali iOS in modo che l'app di visualizzazione non debba gestire manualmente il reindirizzamento dell'utente all'app store nel caso in cui l'utente non abbia installato l'applicazione del fornitore.

Questo URI deve essere un link diretto specifico per la singola stazione, non una pagina di noleggio generale che include informazioni per più di una stazione. Il link diretto deve indirizzare l'utente direttamente alla stazione senza prompt, pagine interstitial o accessi. Assicurati che gli utenti possano vedere la stazione anche se non hanno mai aperto l'applicazione.

Non è necessariamente necessario includere station_id per la stazione negli URI. L'app di noleggio può utilizzare altri identificatori all'interno dell'URI per identificare in modo univoco la stazione.

Se il partner ha un'app di noleggio per iOS, questo campo è obbligatorio.

Esempio di link universali iOS:

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

stations[].rental_uris.web URL Facoltativo

Un URL che può essere utilizzato da un browser web per mostrare ulteriori informazioni su come noleggiare un veicolo in questa stazione.

Questo URL deve essere un link diretto specifico per la singola stazione, non una pagina di noleggio generale che include informazioni per più di una stazione. Il link diretto deve indirizzare l'utente direttamente alla stazione senza richieste, pagine interstitial o accessi. Assicurati che gli utenti possano vedere la stazione anche se non hanno mai aperto l'applicazione.

Non è necessario che gli URL includano station_id per la stazione o che seguano le convenzioni semantiche degli URL di noleggio per Android o iOS. L'app di noleggio può utilizzare altri identificatori all'interno dell'URL che identificano in modo univoco la stazione.

Se questo campo non è impostato, significa che i link diretti non sono supportati per il browser web.

Valore di esempio:

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

Di seguito è riportato un esempio per 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"
    }
  },
]

Obbligatorio: station_status.json (sistema di aggancio)

Fai riferimento alla specifica GBFS in base alle tue necessità.

Questo feed definisce lo stato attuale e aggiornato delle stazioni di bike sharing pubbliche.

Nome campo Tipo Requisito Descrizione
stations Array Obbligatorio Un array di oggetti, in cui ogni oggetto definisce una e una sola stazione.
stations[].station_id Stringa Obbligatorio L'identificatore della stazione.
stations[].num_bikes_available Numero intero non negativo Obbligatorio

Un numero intero non negativo che rappresenta il numero di biciclette funzionanti che si trovano fisicamente nella stazione e che potrebbero essere offerte per il noleggio.

Per determinare se la stazione noleggia biciclette, devi controllare il campo is_renting della stazione e trovare un valore booleano true.

stations[].vehicle_types_available Array Facoltativo

Un array di oggetti che definisce il numero totale di veicoli, classificati in base al tipo di veicolo individuale disponibile in una stazione. Ogni oggetto modella il numero totale di veicoli per il tipo di veicolo associato. Il numero totale di veicoli di ciascuno di questi oggetti deve corrispondere al valore specificato nel campo num_bikes_available.

stations[].vehicle_types_available[].vehicle_type_id ID Obbligatorio

Il vehicle_type_id di ogni tipo di veicolo disponibile presso la stazione, come descritto in vehicle_types.json.

stations[].vehicle_types_available[].count Numero intero non negativo Obbligatorio

Il numero totale di veicoli disponibili per il vehicle_type_id corrispondente presso la stazione, come definito in vehicle_types.json.

stations[].num_docks_available Numero intero non negativo Obbligatorio condizionalmente

Il campo è obbligatorio, a meno che la stazione non abbia una capacità di aggancio illimitata. Ad esempio, le stazioni virtuali hanno capacità di aggancio illimitate e il campo non è obbligatorio.

Un numero intero non negativo che rappresenta il numero totale di stazioni di ricarica funzionanti fisicamente presso la stazione in grado di accettare i resi dei veicoli.

Per determinare se la stazione accetta attualmente la restituzione di biciclette, devi ispezionare il campo is_returning della stazione e trovare un valore booleano true.

stations[].is_installed Booleano Obbligatorio

Un valore booleano che indica se la stazione è attualmente sulla strada e installata.

Se la stazione è installata sulla strada, imposta il valore su true.

Se la stazione non è installata sulla strada, impostala su false.

stations[].is_renting Booleano Obbligatorio

Un valore booleano che indica se la stazione attualmente noleggia biciclette.

Se la stazione attualmente noleggia biciclette, imposta il valore su true. Anche se la stazione è vuota, se è impostata per consentire i noleggi is_renting è impostato su true.

Se la stazione non noleggia biciclette, imposta il valore false.

stations[].is_returning Booleano Obbligatorio

Un valore booleano che indica se è vero che la stazione attualmente accetta la restituzione di biciclette.

Se la stazione accetta attualmente la restituzione delle biciclette, imposta il valore su true. Anche se la stazione è piena, ma consentirebbe la restituzione se non lo fosse, is_returning è impostato su true.

Se la stazione non accetta attualmente la restituzione di biciclette, imposta false.

Di seguito è riportato un esempio di 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
        },
]