Definicje GBFS

Zanim przejdziesz do tej sekcji, sprawdź, czy obsługiwane systemy mikromobilności, dla których tworzysz plik danych, są zgodne z wymaganiami.

W sekcjach poniżej każdy nagłówek ma ten format:Required|Optional|Conditionally required: Feed name (System supported) Obsługiwane są te systemy:

  • System zadokowany
  • System bez stacji dokujących
  • System stacjonarny i bezstacjonarny

Aby integracja z Google przebiegła prawidłowo, podaj tylko pliki potrzebne do systemu opisanego w kanale i określ wymagane pola w odpowiednich sekcjach. W przypadku pól wymaganych warunkowo zapoznaj się z ich opisem. Możesz też określić pola opcjonalne, które dodają informacje i zwiększają wygodę użytkowników.

Wymagany nagłówek w przypadku plików danych o mikromobilności

Pliki danych o mikromobilności to pliki danych, które zawierają uporządkowane dane o mikromobilności z dokami lub bez doków, zgodnie z definicją w tym artykule.

Wszystkie pliki danych muszą zawsze zawierać pola wymienione w tabeli poniżej na najwyższym poziomie obiektu JSON, czyli w wspólnym nagłówku GBFS.

Nazwa pola Typ Wymaganie Opis
last_updated Sygnatura czasowa Wymagane Sygnatura czasowa POSIX, która określa liczbę sekund od 1 stycznia 1970 r. 00:00:00 UTC.

Ustaw na ostatni czas aktualizacji danych w pliku danych.

ttl Nieujemna liczba całkowita Wymagane Nieujemna liczba całkowita, która reprezentuje liczbę sekund pozostałych do momentu aktualizacji pliku danych.

Jeśli dane muszą być aktualizowane ze stałą częstotliwością, ustaw tę wartość na 0.

data JSON Wymagane Plik JSON zawierający pola danych dla poszczególnych plików danych.

Na przykład zagregowany plik danych free_bike_status.json, który określa wspólny nagłówek GBFS, może wyglądać tak:

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

Wymagane: system_information.json (system stacjonarny i niestacjonarny)

W razie potrzeby zapoznaj się ze specyfikacją GBFS.

Ten plik danych zawiera szczegółowe informacje o operatorze systemu.

Nazwa pola Typ Wymaganie Opis
system_id Identyfikator Wymagane Unikalny globalnie identyfikator systemu współdzielenia pojazdów. Ta wartość powinna pozostać stała przez cały okres użytkowania systemu. Każdy odrębny system lub obszar geograficzny, na którym działają pojazdy, POWINIEN mieć własny identyfikator system_id. Identyfikatory systemów POWINNY być rozpoznawalne jako należące do konkretnego systemu, a nie jako losowe ciągi znaków – np. bcycle_austin lub biketown_pdx.
name Ciąg znaków Wymagane Nazwa systemu widoczna dla klientów.
rental_apps Obiekt Wymagane Obiekt JSON zawierający informacje o aplikacji do wypożyczania na Androida i iOS w odpowiednich polach.
rental_apps.android Obiekt Wymagane warunkowo Zawiera informacje o pobraniu aplikacji do wypożyczania i odkrywaniu aplikacji na platformie Android w polach store_uridiscovery_uri. Jeśli dostawca systemu ma aplikację na Androida do wypożyczania, to pole jest wymagane.
rental_apps.android.store_uri Identyfikator URI Wymagane Identyfikator URI, z którego można pobrać aplikację na Androida do wypożyczania. Zazwyczaj jest to URI do sklepu z aplikacjami, np. Google Play. Jeśli identyfikator URI wskazuje sklep z aplikacjami, np. Google Play, zalecamy, aby był zgodny z zasadami Androida. Dzięki temu aplikacja wyświetlająca może bezpośrednio otworzyć identyfikator URI w natywnej aplikacji sklepu z aplikacjami zamiast w witrynie.
rental_apps.android.discovery_uri Identyfikator URI Wymagane Identyfikator URI w formacie your_custom_scheme://your/path/here. Identyfikator URI może być używany przez PackageManager.queryIntentActivities() do sprawdzania, czy wypożyczona aplikacja na Androida jest zainstalowana na urządzeniu.
rental_apps.ios Obiekt Wymagane warunkowo Zawiera informacje o pobraniu aplikacji do wypożyczania i odkrywaniu aplikacji na platformie iOS w polach store_uridiscovery_uri. Jeśli dostawca systemu ma aplikację na iOS do wypożyczania, to pole jest wymagane.
rental_apps.ios.store_uri Identyfikator URI Wymagane Identyfikator URI, z którego można pobrać aplikację na iOS do wypożyczania. Zwykle jest to adres URI sklepu z aplikacjami, np. Apple App Store. Jeśli identyfikator URI wskazuje sklep z aplikacjami, np. Apple App Store, zalecamy, aby był zgodny ze sprawdzonymi metodami dotyczącymi iOS. Dzięki temu aplikacja wyświetlająca może bezpośrednio otworzyć identyfikator URI w natywnej aplikacji sklepu z aplikacjami zamiast w witrynie.
rental_apps.ios.discovery_uri Identyfikator URI Wymagane Identyfikator URI w formacie your_custom_scheme://. Identyfikator URI może być używany przez UIApplication canOpenURL: do sprawdzania, czy na urządzeniu jest zainstalowana aplikacja na iOS do wypożyczania.

Wymagany: free_bike_status.json (system bez stacji dokujących)

W razie potrzeby zapoznaj się ze specyfikacją GBFS.

Ten plik danych określa lokalizacje i atrybuty dostępnych pojazdów wolnostojących. Ze względu na ochronę prywatności pojazdy, które są częścią aktywnego wynajmu, nie mogą pojawiać się w tym pliku danych.

Nazwa pola Typ Wymaganie Opis
bikes Tablica Wymagane Tablica obecnie dostępnych, zatrzymanych rowerów, z których każdy jest obiektem.
bikes[].bike_id Identyfikator Wymagane Identyfikator roweru.

Aby chronić prywatność, po każdej podróży identyfikator może zostać zmieniony na losowy ciąg znaków.

bikes[].lat Szerokość geograficzna Wymagane Szerokość geograficzna roweru w systemie WGS 84 w formacie dziesiętnym.
bikes[].lon Długość geograficzna Wymagane Długość geograficzna roweru w systemie WGS 84 w formacie dziesiętnym.
bikes[].is_reserved Wartość logiczna Wymagane Określa, czy rower jest obecnie zarezerwowany:
  • Jeśli rower jest obecnie zarezerwowany, ustaw wartość true.
  • Jeśli rower nie jest obecnie zarezerwowany, ustaw wartość false.
bikes[].is_disabled Wartość logiczna Wymagane Określa, czy rower jest obecnie wyłączony lub uszkodzony:
  • Jeśli rower jest obecnie wyłączony, ustaw wartość true.
  • Jeśli rower nie jest obecnie wyłączony, ustaw wartość false.
bikes[].rental_uris Obiekt Wymagane Obiekt JSON zawierający adresy URI wypożyczenia dla Androida, iOS i internetu w odpowiednich polach.
bikes[].rental_uris.android Identyfikator URI Wymagane warunkowo Identyfikator URI, który można przekazać do aplikacji na Androida za pomocą android.intent.action.VIEWintencji Androida, aby obsługiwać precyzyjne linki na Androida. Podany rental_uris musi być linkiem do aplikacji na Androida, aby aplikacja wyświetlająca nie musiała ręcznie zarządzać przekierowaniem użytkownika do sklepu z aplikacjami w przypadku, gdy użytkownik nie ma zainstalowanej aplikacji dostawcy.

Ten URI musi być linkiem bezpośrednim do konkretnego roweru, a nie ogólną stroną wypożyczalni, która zawiera informacje o więcej niż jednym rowerze. Precyzyjny link musi prowadzić użytkownika bezpośrednio do roweru bez żadnych promptów, stron pośrednich ani logowania. Upewnij się, że użytkownicy mogą zobaczyć rower, nawet jeśli nigdy nie otworzyli aplikacji.

Adresy URI nie muszą zawierać bike_id dla roweru, o ile partner ma inne sposoby na zidentyfikowanie danego roweru. Na przykład aplikacja do wypożyczania może używać w identyfikatorze URI innych identyfikatorów, aby jednoznacznie identyfikować rower.

Jeśli partner ma aplikację na Androida do wypożyczania, to pole jest wymagane.

Przykład linku aplikacji na Androida:

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

bikes[].rental_uris.ios Identyfikator URI Wymagane warunkowo URI, którego można użyć na urządzeniu z iOS, aby uruchomić aplikację do wypożyczania roweru. Więcej informacji na ten temat znajdziesz w artykule Apple na temat niestandardowych schematów adresów URL w iOS. Podany rental_uris musi być uniwersalnym linkiem iOS, aby aplikacja wyświetlająca nie musiała ręcznie zarządzać przekierowaniem użytkownika do sklepu z aplikacjami, jeśli nie ma on zainstalowanej aplikacji dostawcy.

Ten URI musi być linkiem bezpośrednim do konkretnego roweru, a nie ogólną stroną wypożyczalni, która zawiera informacje o więcej niż jednym rowerze. Precyzyjny link musi prowadzić użytkownika bezpośrednio do roweru bez żadnych promptów, stron pośrednich ani logowania. Upewnij się, że użytkownicy mogą zobaczyć rower, nawet jeśli nigdy nie otworzyli aplikacji.

Adresy URI nie muszą zawierać identyfikatora roweru, o ile partner ma inne sposoby na identyfikację danego roweru. Na przykład aplikacja do wypożyczania może używać w identyfikatorze URI innych identyfikatorów, aby jednoznacznie identyfikować rower.

Jeśli partner ma aplikację na iOS do wypożyczania, to pole jest wymagane.

Przykład uniwersalnych linków na iOS:

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

bikes[].rental_uris.web URL Opcjonalny

Adres URL, którego przeglądarka internetowa może użyć do wyświetlenia dodatkowych informacji o wynajmie pojazdu.

Adres URL musi być linkiem bezpośrednim do konkretnego roweru, a nie ogólną stroną wypożyczalni, która zawiera informacje o więcej niż jednym rowerze. Precyzyjny link musi prowadzić użytkownika bezpośrednio do roweru bez żadnych promptów, stron pośrednich ani logowania. Upewnij się, że użytkownicy mogą zobaczyć rower, nawet jeśli nigdy nie otworzyli aplikacji.

Adresy URL nie muszą zawierać bike_idw przypadku roweru ani w inny sposób przestrzegać konwencji semantycznych adresów URL wypożyczalni na Androida lub iOS. Aplikacja do wypożyczania może używać w adresie URL innych identyfikatorów, które jednoznacznie identyfikują rower.

Jeśli to pole nie jest ustawione, oznacza to, że precyzyjne linki nie są obsługiwane w przeglądarce internetowej.

Przykładowa wartość:

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

bikes[].vehicle_type_id Identyfikator Wymagane vehicle_type_id pojazdu zgodnie z opisem w sekcji vehicle_types.json.
bikes[].pricing_plan_id Identyfikator Wymagane Identyfikator planu cenowego, który jest stosowany, gdy ten typ pojazdu jest wynajmowany zgodnie z opisem w sekcji system_pricing_plans.json.
bikes[].current_range_meters Nieujemna liczba zmiennoprzecinkowa Wymagane warunkowo Jeśli definicja vehicle_type odpowiadająca pojazdowi ma silnik, to pole jest wymagane.

Ustaw na największą odległość w metrach, jaką pojazd może przejechać bez konieczności ładowania lub tankowania, biorąc pod uwagę aktualny poziom naładowania lub paliwa.

bikes[].last_reported Sygnatura czasowa Opcjonalny Ustawiona na ostatni czas, w którym pojazd zgłosił swój stan do systemu operatora.

Oto przykład dla 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
}
]

Wymagany: vehicle_types.json (system stacyjny i bezstacyjny)

W razie potrzeby zapoznaj się ze specyfikacją GBFS.

Ten plik danych określa szczegóły poszczególnych typów pojazdów, o których mowa w sekcji free_bike_status.json.

Nazwa pola Typ Wymaganie Opis
vehicle_types Tablica Wymagane Tablica obiektów, w której każdy obiekt definiuje odrębny typ pojazdu w katalogu dostawcy. Dla danego typu pojazdu może istnieć tylko 1 obiekt.
vehicle_types[].vehicle_type_id Identyfikator Wymagane Unikalny identyfikator danego typu pojazdu.
vehicle_types[].form_factor Typ wyliczeniowy Wymagane Wyliczenie reprezentujące ogólny kształt pojazdu z tej listy obecnie prawidłowych wartości:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type Typ wyliczeniowy Wymagane Wyliczenie reprezentujące główny rodzaj napędu pojazdu z tej listy obecnie prawidłowych wartości:
  • human: napęd pedałowy lub nożny;
  • electric_assist: wspomaganie napędu ludzkiego
  • electric: zawiera tryb przepustnicy z silnikiem zasilanym baterią.
  • combustion: zawiera tryb przepustnicy z silnikiem spalinowym.
vehicle_types[].max_range_meters Nieujemna liczba zmiennoprzecinkowa Wymagane warunkowo Jeśli wartość propulsion_type nie jest ustawiona na human, pojazd ma silnik, więc to pole jest wymagane.

Ustaw na największą odległość w metrach, jaką pojazd może przejechać bez konieczności ponownego naładowania lub zatankowania, gdy jest w pełni naładowany lub zatankowany.

Oto przykład dla 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
  }
]

Wymagane: system_pricing_plans.json (system bez stacji dokujących)

W razie potrzeby zapoznaj się ze specyfikacją GBFS.

Ten plik danych określa plany cenowe dla pojazdów wolnostojących. Wymagamy od dostawców wyświetlania informacji o cenach pojazdów wolnostojących.

Nazwa pola Typ Wymaganie Opis
plans Tablica Wymagane Tablica obiektów, z których każdy definiuje dany plan cenowy.
plans[].plan_id Identyfikator Wymagane Ciąg znaków, który reprezentuje unikalny identyfikator danego abonamentu oferowanego przez dostawcę.
plans[].url URL Opcjonalny Adres URL, pod którym użytkownicy mogą znaleźć więcej informacji o abonamencie.
plans[].currency Ciąg znaków Wymagane Standard ISO 4217 dla abonamentu.
plans[].price Nieujemna liczba zmiennoprzecinkowa Wymagane

Cena musi być zdefiniowana jako cena bez oceny lub cena z oceną:

Plan cenowy bez oceny

Jest to pojedyncza, stała opłata.

Ustaw to pole:

  • price: stała cena całej podróży.
Plan cenowy oparty na ocenie

Jest to cena z liniową stawką za poszczególne przedziały.

Ustaw to pole:

  • price: cena podstawowa, która jest naliczana dokładnie raz za przejazd.

Ustaw co najmniej 1 z tych pól:

  • per_km_pricing: cena przejazdu określona na podstawie stawki za kilometr.
  • per_min_pricing: cena przejazdu określona w stawce za minutę.
plans[].per_km_pricing Tablica Wymagane warunkowo

Jeśli cena zależy od przebytej odległości (wyrażonej w kilometrach), to to pole jest wymagane.

Tablica obiektów, w której każdy obiekt definiuje dany segment podzielony według odległości. Wartość start każdego segmentu musi być mniejsza lub równa wartości start następnego segmentu.

Aby określić łączną cenę danego planu, dodaj wartość plans[].price danego planu do naliczonych cen segmentów w plans[].per_km_pricingplans[].per_min_pricing.

Jeśli to pole nie jest skonfigurowane, nie ma cen zmiennych w zależności od odległości, więc nie są one uwzględniane w cenie całkowitej.

plans[].per_km_pricing[].start Nieujemna liczba całkowita Wymagane Liczba kilometrów, od której zaczyna się naliczanie stawki za odcinek. To pole jest ustawione na wartość włączającą, która rozpoczyna zakres segmentu. Dlatego po przejechaniu określonej liczby kilometrów opłata w wysokości rate jest pobierana jednorazowo.
plans[].per_km_pricing[].rate Liczba zmiennoprzecinkowa Wymagane Stawka za każde interval, która zaczyna się od start w segmencie. Jeśli to pole ma wartość ujemną, podróżny otrzymuje zniżkę.
plans[].per_km_pricing[].interval Nieujemna liczba całkowita Wymagane

Interwał w kilometrach, po którym rate segmentu jest ponownie stosowany w nieskończoność, chyba że end segmentu jest ustawiony na dowolną nieujemną liczbę całkowitą.

rate jest ponownie stosowany na początku każdego interval, a zaokrąglanie odległości nie jest brane pod uwagę.

Jeśli end segmentu jest ustawiona na dowolną nieujemną liczbę całkowitą, rate segmentu jest ponownie stosowana do wartości end segmentu, ale nie włącznie z nią.

Jeśli to pole ma wartość 0, opłata rate jest pobierana dokładnie raz w momencie start segmentu.

plans[].per_km_pricing[].end Nieujemna liczba całkowita Opcjonalny

Liczba kilometrów, po której rate dla segmentu przestaje być stosowana. To pole jest ustawione na wartość wyłączną, która kończy zakres segmentu. Jeśli na przykład wartość end jest ustawiona na 40, reguła rate nie ma już zastosowania w odległości 40 km.

Jeśli to pole nie jest ustawione lub jest puste, opłata rate za segment jest naliczana do końca podróży, a także za wszystkie kolejne segmenty.

plans[].per_min_pricing Tablica Wymagane warunkowo

Jeśli cena zależy od czasu, który upłynął (wyrażonego w minutach), to to pole jest wymagane.

Tablica obiektów, z których każdy określa dany segment podzielony na przedziały czasowe. Wartość start każdego segmentu musi być mniejsza lub równa wartości start następnego segmentu.

Aby określić łączną cenę danego planu, dodaj wartość plans[].price danego planu do naliczonych cen segmentów w plans[].per_km_pricingplans[].per_min_pricing.

Jeśli to pole nie jest ustawione, nie ma cen zmiennych w zależności od czasu, więc nie są one uwzględniane w cenie całkowitej.

plans[].per_min_pricing[].start Liczba zmiennoprzecinkowa Wymagane Liczba minut, od której zaczyna się naliczanie opłaty za segment. To pole jest ustawione na wartość włączającą, która rozpoczyna zakres segmentu. Dlatego po upływie określonej liczby minut rate zostanie obciążony(-a) opłatą tylko raz.
plans[].per_min_pricing[].rate Liczba zmiennoprzecinkowa Wymagane Stawka za każdy interval. Stawka zaczyna się od start segmentu (włącznie). Jeśli to pole ma wartość ujemną, podróżny otrzymuje zniżkę.
plans[].per_min_pricing[].interval Nieujemna liczba całkowita Wymagane

Interwał w minutach, po którym rate segmentu jest ponownie stosowany w nieskończoność, chyba że end segmentu jest ustawiony na dowolną nieujemną liczbę całkowitą.

rate jest ponownie stosowany raz na początku każdego interval, a czas podróży nie jest zaokrąglany.

Jeśli end segmentu jest ustawiona na dowolną nieujemną liczbę całkowitą, rate segmentu jest ponownie stosowana do wartości end segmentu, ale nie włącznie z nią.

Jeśli to pole ma wartość 0, opłata rate jest pobierana dokładnie raz w momencie start segmentu.

plans[].per_min_pricing[].end Nieujemna liczba całkowita Opcjonalny

Liczba minut, po której rate dla segmentu przestaje być stosowana. To pole jest ustawione na wartość wyłączną, która kończy zakres segmentu. Jeśli na przykład wartość end zostanie ustawiona na 20, zasada rate nie będzie już obowiązywać po 20 minutach.

Jeśli to pole nie jest ustawione lub jest puste, opłata rate za segment jest naliczana do końca przejazdu, a także za wszystkie kolejne segmenty.

Przykłady pliku system_pricing_plans.json

Ta sekcja zawiera informacyjne system_pricing_plans.json przykłady kodu. Podane są też szczegóły i wyniki każdego przykładu.

Przykład 1 pliku system_pricing_plans.json

Poniższy przykładowy kod planu cenowego pokazuje opłaty na podstawie czasu podróży w przypadku tych przedziałów:

  • [0,1): 2 PLN
    • Jeśli przejazd trwa krócej niż minutę, użytkownik płaci 2 USD.
    • Przykład: 59-sekundowa podróż
  • [1,2): 3 PLN
    • Jeśli podróż trwa co najmniej minutę, ale mniej niż 2 minuty, użytkownik płaci 2 USD + 1 USD = 3 USD.
    • Przykłady: 1-minutowy przejazd, 1-minutowy i 45-sekundowy przejazd
  • Liczba minut x, w których x jest większa lub równa 2: 3 PLN + (($2 PLN + $1 PLN) * (x – 2 + 1)) PLN
    • Jeśli podróż trwa co najmniej 2 minuty, użytkownik płaci 3 USD za część podróży trwającą krócej niż 2 minuty oraz (1 USD [kontynuacja pierwszego elementu listyper_min_pricing] + 2 USD [drugi element listyper_min_pricing]) za każdą minutę po upływie 2 minut, włącznie z tą minutą.
    • Przykłady:
      • 2-minutowy przejazd kosztuje 3 USD + (2 USD + 1 USD) = 6 USD.
      • Koszt 2-minutowej i 30-sekundowej przejażdżki: 3 zł + (2 zł + 1 zł) = 6 zł
      • 3-minutowy przejazd kosztuje 3 zł + (($2 zł + 1 zł) * 2) = 9 zł
      • 10-minutowy przejazd kosztuje 3 zł + ((2 zł + 1 zł) * 9) = 30 zł
{
  "plans": {
    "plan_id": "plan1",
    "currency": "USD",
    "price": 2,
    "per_min_pricing": [
      {
          "interval": 1,
          "rate": 1,
          "start": 1
      },
      {
          "interval": 1,
          "rate": 2,
          "start": 2
      }
    ],
  }
}

Przykład 2 pliku system_pricing_plans.json

W tym przykładzie pokazujemy przykładowy kod abonamentu, w którym opłaty są naliczane zarówno za minuty, jak i za kilometry:

  • Użytkownik końcowy płaci 0,25 CAD za kilometr i 0,50 CAD za minutę.
  • Oba te wskaźniki są obliczane jednocześnie i nie są od siebie zależne.
  • Dlatego przejazd o długości 1 km, który trwa 10 minut, kosztuje 9 CAD. Koszt ten jest rozłożony w następujący sposób:
    • 3 USD, cena podstawowa
    • 0,25 USD * 2, pobierana raz na początku przejazdu i raz po przejechaniu 1 km.
    • 0,5 USD * 11, opłata naliczana raz na początku każdej minuty. Opłaty zaczynają być naliczane od 0 sekund, a ostatni przedział czasu jest naliczany po 10 minutach.
{
  "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
    }]
  }
}

Wymagane warunkowo: geofencing_zones.json (system stacjonarny i bezstacjonarny)

W razie potrzeby zapoznaj się ze specyfikacją GBFS.

Ten plik danych określa dane geofencingu dla pojazdów wolnostojących. Dane dotyczące geofencingu obejmują granice geograficzne określające, gdzie pojazdy mogą rozpocząć i zakończyć przejazd, a także prędkość, z jaką mogą się poruszać. Prędkość ta jest równa maksymalnej prędkości pojazdu lub ograniczeniu prędkości na drodze, po której się porusza, w zależności od tego, która z tych wartości jest niższa. Kierowcy muszą przestrzegać lokalnych przepisów i rozporządzeń.

Używamy tych danych, aby w przypadku, gdy użytkownik wyszukuje daną trasę, a koniec podróży wypada poza określonymi geofencami, wynik dotyczący mikromobilności był odfiltrowywany. Jeśli geofence nie są podane, Google traktuje usługę tak, jakby nie miała ograniczeń dotyczących granic.

Nazwa pola Typ Wymaganie Opis
geofencing_zones Obiekt Wymagane Obiekt FeatureCollection opisany w dokumencie IETF RFC 7946 to obiekt, który ma pole o nazwie features. Wartość features to tablica JSON. Każdy element tablicy JSON to obiekt Feature.

Każda strefa objęta geofencingiem, powiązane z nią reguły i atrybuty oraz definicje FeatureCollection są tutaj określone jako część definicji pliku danych geofencing_zones.json.

geofencing_zones.type Ciąg znaków Wymagane Ustaw wartość FeatureCollection zgodnie z opisem w dokumencie IETF RFC 7946.
geofencing_zones.features Tablica Wymagane Tablica JSON, której każdy element jest obiektem Feature.
geofencing_zones.features[].type Ciąg znaków Wymagane Ustaw wartość Feature zgodnie z opisem w dokumencie IETF RFC 7946.
geofencing_zones.features[].geometry Wielokąt GeoJSON Wymagane Wielokąt GeoJSON opisujący miejsca, w których nie można rozpocząć, zakończyć ani odbyć przejazdu, a także inne ograniczenia. Punkty ułożone zgodnie z ruchem wskazówek zegara wyznaczają obszar wewnątrz wielokąta, a punkty ułożone w kierunku przeciwnym do ruchu wskazówek zegara wyznaczają obszar na zewnątrz wielokąta. Więcej informacji na ten temat znajdziesz w artykule reguła prawej dłoni.
geofencing_zones.features[].properties Obiekt Wymagane Obiekt, który określa limity i ograniczenia dotyczące podróży.
geofencing_zones.features[].properties.rules Tablica Opcjonalny Tablica obiektów, z których każdy definiuje dokładnie 1 regułę. Jeśli 2 lub więcej reguł nakłada się na siebie, koliduje lub w inny sposób powoduje konflikt, pierwszeństwo ma reguła zdefiniowana najwcześniej w kolejności pliku JSON.
geofencing_zones.features[].properties.rules[].vehicle_type_id Tablica Opcjonalny Tablica identyfikatorów typów pojazdów, gdzie każdy element to vehicle_type_id, w przypadku których należy zastosować ograniczenia. Jeśli nie podasz żadnego symbolu vehicle_type_id, ograniczenia będą dotyczyć wszystkich typów pojazdów.
geofencing_zones.features[].properties.rules[].ride_allowed Wartość logiczna Wymagane Określa, czy jazda na rowerze w trybie „wolnostojącym” może się zaczynać i kończyć w strefie, w ten sposób:
  • Jeśli przejazd na odpiętym rowerze może rozpocząć się i zakończyć w strefie, ustaw wartość true.
  • Jeśli przejazd rowerem bez stacji dokującej nie może rozpocząć się ani zakończyć w strefie, ustaw wartość false.

Oto przykład dla 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]
      ]]]
    }
  }]
}

Wymagany: station_information.json (system dokowania)

W razie potrzeby zapoznaj się ze specyfikacją GBFS.

Ten plik danych określa ogólne informacje o publicznych stacjach rowerów miejskich.

Nazwa pola Typ Wymaganie Opis
stations Tablica Wymagane Tablica obiektów, z których każdy definiuje dokładnie jedną stację.
stations[].station_id Ciąg znaków Wymagane Identyfikator stacji.
stations[].name Ciąg znaków Wymagane Publiczna nazwa stacji w języku lokalnym miasta, w którym się ona znajduje. Wartość name musi być zgodna z oznaczeniami na stacji (jeśli są dostępne) lub odzwierciedlać lokalizację stacji poprzez użycie nazwy ulicy poprzecznej lub lokalnego punktu orientacyjnego. Nie używaj skrótów, np. „St.” zamiast „Street”, chyba że są one wyraźnie używane na znakach. W przypadku name musisz stosować wielkie i małe litery zgodnie z lokalnymi zasadami pisowni nazw miejsc, a nie tylko wielkie litery.
stations[].lat Szerokość geograficzna Wymagane Szerokość geograficzna stacji w systemie WGS 84 w formacie dziesiętnym.
stations[].lon Długość geograficzna Wymagane Długość geograficzna stacji w systemie WGS 84 w formacie dziesiętnym.
stations[].capacity Nieujemna liczba całkowita Opcjonalny Nieujemna liczba całkowita reprezentująca łączną liczbę punktów dokowania zainstalowanych na stacji, zarówno dostępnych, jak i niedostępnych.
stations[].rental_uris Obiekt Wymagane

Obiekt JSON, który zawiera adresy URI wypożyczenia dla Androida, iOS i internetu w odpowiednich polach.

Jeśli te identyfikatory URI są określone, zastępują domyślne precyzyjne linki, które zostały ustawione podczas rejestracji dostawcy.

stations[].rental_uris.android Identyfikator URI Wymagane warunkowo

Identyfikator URI, który można przekazać do aplikacji na Androida za pomocą android.intent.action.VIEWintencji Androida, aby obsługiwać precyzyjne linki na Androidzie. Podany adres rental_uris musi być linkiem do aplikacji na Androida, aby aplikacja wyświetlająca nie musiała ręcznie zarządzać przekierowaniem użytkownika do sklepu z aplikacjami, jeśli nie ma on zainstalowanej aplikacji dostawcy.

Ten URI musi być linkiem bezpośrednim do konkretnej stacji, a nie ogólną stroną wypożyczalni, która zawiera informacje o więcej niż jednej stacji. Precyzyjny link musi prowadzić użytkownika bezpośrednio do stacji bez żadnych monitów, stron pośrednich ani logowania. Zadbaj o to, aby użytkownicy mogli zobaczyć stację, nawet jeśli nigdy nie otworzyli aplikacji.

Adresy URI nie muszą zawierać station_id stacji, o ile partner ma inne sposoby na jej identyfikację. Na przykład aplikacja do wypożyczania może używać w identyfikatorze URI innych identyfikatorów, aby jednoznacznie określić stację.

Jeśli partner ma aplikację na Androida do wypożyczania, to pole jest wymagane.

Przykład linku aplikacji na Androida:

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

stations[].rental_uris.ios Identyfikator URI Wymagane warunkowo

URI, którego można użyć na urządzeniu z iOS, aby uruchomić aplikację do wypożyczania stacji. Więcej informacji na ten temat znajdziesz w artykule Apple na temat niestandardowych schematów adresów URL w iOS. Podany rental_uris musi być uniwersalnym linkiem iOS, aby aplikacja wyświetlająca nie musiała ręcznie zarządzać przekierowaniem użytkownika do sklepu z aplikacjami, jeśli nie ma on zainstalowanej aplikacji dostawcy.

Ten URI musi być linkiem bezpośrednim do konkretnej stacji, a nie ogólną stroną wypożyczalni, która zawiera informacje o więcej niż jednej stacji. Precyzyjny link musi prowadzić użytkownika bezpośrednio do stacji bez żadnych monitów, stron pośrednich ani logowania. Zadbaj o to, aby użytkownicy mogli zobaczyć stację, nawet jeśli nigdy nie otworzyli aplikacji.

Identyfikatory URI nie muszą zawierać znaku station_id w przypadku stacji. Aplikacja do wypożyczania może używać w URI innych identyfikatorów, aby jednoznacznie identyfikować stację.

Jeśli partner ma aplikację na iOS do wypożyczania, to pole jest wymagane.

Przykład uniwersalnych linków na iOS:

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

stations[].rental_uris.web URL Opcjonalny

Adres URL, którego przeglądarka internetowa może użyć, aby wyświetlić więcej informacji o tym, jak wypożyczyć pojazd na tej stacji.

Ten adres URL musi być linkiem bezpośrednim prowadzącym do konkretnej stacji, a nie ogólną stroną wypożyczalni, która zawiera informacje o więcej niż jednej stacji. Precyzyjny link musi prowadzić użytkownika bezpośrednio do stacji bez żadnych monitów, stron pośrednich ani logowania. Zadbaj o to, aby użytkownicy mogli zobaczyć stację, nawet jeśli nigdy nie otworzyli aplikacji.

Adresy URL nie muszą zawierać station_id dla stacji ani w inny sposób być zgodne z konwencjami semantycznymi adresów URL wypożyczalni na Androida lub iOS. Aplikacja do wypożyczania może używać w adresie URL innych identyfikatorów, które jednoznacznie identyfikują stację.

Jeśli to pole nie jest ustawione, oznacza to, że precyzyjne linki nie są obsługiwane w przeglądarce internetowej.

Przykładowa wartość:

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

Oto przykład dla 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"
    }
  },
]

Wymagane: station_status.json (system dokowania)

W razie potrzeby zapoznaj się ze specyfikacją GBFS.

Ten plik danych określa aktualny stan publicznych stacji rowerów miejskich.

Nazwa pola Typ Wymaganie Opis
stations Tablica Wymagane Tablica obiektów, z których każdy definiuje tylko jedną stację.
stations[].station_id Ciąg znaków Wymagane Identyfikator stacji.
stations[].num_bikes_available Nieujemna liczba całkowita Wymagane

Nieujemna liczba całkowita, która reprezentuje liczbę sprawnych rowerów znajdujących się fizycznie na stacji i które mogą być oferowane do wypożyczenia.

Aby sprawdzić, czy stacja obecnie wypożycza rowery, musisz sprawdzić pole is_renting stacji i znaleźć wartość logiczną „prawda”.

stations[].vehicle_types_available Tablica Opcjonalny

Tablica obiektów określająca łączną liczbę pojazdów podzielonych na poszczególne typy pojazdów dostępnych na stacji. Każdy obiekt modeluje łączną liczbę pojazdów danego typu. Łączna liczba pojazdów z każdego z tych obiektów musi być zgodna z wartością podaną w polu num_bikes_available.

stations[].vehicle_types_available[].vehicle_type_id Identyfikator Wymagane

vehicle_type_id każdego typu pojazdu dostępnego na stacji zgodnie z opisem w vehicle_types.json.

stations[].vehicle_types_available[].count Nieujemna liczba całkowita Wymagane

Łączna liczba dostępnych pojazdów dla odpowiedniego vehicle_type_id na stacji zgodnie z definicją w vehicle_types.json.

stations[].num_docks_available Nieujemna liczba całkowita Wymagane warunkowo

To pole jest wymagane, chyba że stacja ma nieograniczoną liczbę miejsc dokowania. Na przykład stacje wirtualne mają nieograniczoną liczbę miejsc dokowania i to pole nie jest wymagane.

Nieujemna liczba całkowita reprezentująca łączną liczbę funkcjonalnych doków na stacji, które mogą przyjmować zwroty pojazdów.

Aby sprawdzić, czy stacja obecnie przyjmuje zwroty rowerów, musisz sprawdzić pole is_returning stacji i znaleźć wartość logiczną true.

stations[].is_installed Wartość logiczna Wymagane

Wartość logiczna wskazująca, czy stacja jest obecnie na ulicy i zainstalowana.

Jeśli stacja jest zainstalowana na ulicy, ustaw true.

Jeśli stacja nie jest zainstalowana na ulicy, ustaw wartość false.

stations[].is_renting Wartość logiczna Wymagane

Wartość logiczna wskazująca, czy stacja obecnie wypożycza rowery.

Jeśli stacja obecnie wypożycza rowery, ustaw wartość true. Nawet jeśli stacja jest pusta, a wypożyczanie jest dozwolone, wartość is_renting jest ustawiona na true.

Jeśli stacja nie wypożycza obecnie rowerów, ustaw wartość false.

stations[].is_returning Wartość logiczna Wymagane

Wartość logiczna wskazująca, czy stacja obecnie przyjmuje zwroty rowerów.

Jeśli stacja obecnie akceptuje zwroty rowerów, ustaw wartość true. Nawet jeśli stacja jest pełna, ale zezwalałaby na zwrot, gdyby nie była pełna, parametr is_returning ma wartość true.

Jeśli stacja nie przyjmuje obecnie zwrotów rowerów, ustaw wartość false.

Oto przykład właściwości 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
        },
]