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 |
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_uri i discovery_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_uri i discovery_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:
|
bikes[].is_disabled |
Wartość logiczna | Wymagane | Określa, czy rower jest obecnie wyłączony lub uszkodzony:
|
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.VIEW intencji 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ć Jeśli partner ma aplikację na Androida do wypożyczania, to pole jest wymagane. Przykład linku aplikacji na Androida:
|
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:
|
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ć Jeśli to pole nie jest ustawione, oznacza to, że precyzyjne linki nie są obsługiwane w przeglądarce internetowej. Przykładowa wartość:
|
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:
|
vehicle_types[].propulsion_type |
Typ wyliczeniowy | Wymagane | Wyliczenie reprezentujące główny rodzaj napędu pojazdu z tej listy obecnie prawidłowych wartości:
|
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ą:
|
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ść Aby określić łączną cenę danego planu, dodaj wartość 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
Jeśli Jeśli to pole ma wartość |
plans[].per_km_pricing[].end |
Nieujemna liczba całkowita | Opcjonalny |
Liczba kilometrów, po której Jeśli to pole nie jest ustawione lub jest puste, opłata |
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ść Aby określić łączną cenę danego planu, dodaj wartość 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
Jeśli Jeśli to pole ma wartość |
plans[].per_min_pricing[].end |
Nieujemna liczba całkowita | Opcjonalny |
Liczba minut, po której Jeśli to pole nie jest ustawione lub jest puste, opłata |
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 listy
per_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ł
- 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 listy
{
"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 |
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:
|
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ą 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ć Jeśli partner ma aplikację na Androida do wypożyczania, to pole jest wymagane. Przykład linku aplikacji na Androida:
|
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 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 Jeśli partner ma aplikację na iOS do wypożyczania, to pole jest wymagane. Przykład uniwersalnych linków na 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ć Jeśli to pole nie jest ustawione, oznacza to, że precyzyjne linki nie są obsługiwane w przeglądarce internetowej. Przykładowa wartość:
|
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 |
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 |
stations[].vehicle_types_available[].vehicle_type_id |
Identyfikator | Wymagane |
|
stations[].vehicle_types_available[].count |
Nieujemna liczba całkowita | Wymagane |
Łączna liczba dostępnych pojazdów dla odpowiedniego |
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 |
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 Jeśli stacja nie jest zainstalowana na ulicy, ustaw wartość |
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ść Jeśli stacja nie wypożycza obecnie rowerów, ustaw wartość |
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ść Jeśli stacja nie przyjmuje obecnie zwrotów rowerów, ustaw wartość |
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
},
]