Прежде чем продолжить работу с этим разделом, проверьте, для каких поддерживаемых систем микромобильности вы создаете канал, если вы этого еще не сделали.
В следующих разделах каждый заголовок имеет следующий формат: Required|Optional|Conditionally required: Feed name (System supported)
. Поддерживаются следующие системы:
- Пристыкованная система
- Система без док-станции
- Система с док-станцией и без док-станции
Для успешной интеграции с Google предоставьте только те файлы, которые необходимы для системы, описанной в вашем фиде, и укажите обязательные поля в соответствующих разделах. Информация об условно обязательных полях приведена в их описании. Вы также можете указать необязательные поля, которые дополняют информацию и улучшают пользовательский интерфейс.
Обязательный заголовок для каналов Micromobility
Каналы Micromobility — это каналы, которые содержат структурированные данные Micromobility, как закрепленные, так и не закрепленные, как определено в этой статье.
Во всех каналах всегда должны быть указаны поля, включенные в следующую таблицу на верхнем уровне объекта JSON, которые вместе называются общим заголовком GBFS .
Имя поля | Тип | Требование | Описание |
---|---|---|---|
last_updated | Метка времени | Необходимый | Метка времени POSIX, которая указывает количество секунд с 1 января 1970 года 00:00:00 UTC. Устанавливается на время последнего обновления данных в ленте. |
ttl | Неотрицательное целое число | Необходимый | Неотрицательное целое число, представляющее количество секунд, оставшихся до обновления ленты. Если данные должны обновляться с постоянной скоростью, установите это значение равным |
data | JSON | Необходимый | JSON, содержащий поля данных для отдельного канала. |
Например, агрегированный канал free_bike_status.json
, который указывает общий заголовок GBFS , может выглядеть следующим образом:
{
"ttl": 30,
"last_updated": 1576123774,
"data": {
"bikes": [ ... ] // GBFS free bike status objects.
}
}
Обязательно: system_information.json (система с пристыкованным и непристыкованным интерфейсом)
При необходимости обратитесь к спецификации GBFS .
В этом канале представлена подробная информация об операторе системы.
Имя поля | Тип | Требование | Описание |
---|---|---|---|
system_id | ИДЕНТИФИКАТОР | Необходимый | Глобальный уникальный идентификатор системы совместного использования транспортных средств. Это значение должно оставаться неизменным на протяжении всего срока службы системы. Каждая отдельная система или географический регион, в котором эксплуатируются транспортные средства, ДОЛЖЕН иметь свой собственный идентификатор system_id. Идентификаторы систем ДОЛЖНЫ быть распознаваемыми как принадлежащие конкретной системе, а не случайные строки, например, bcycle_austin или biketown_pdx. |
name | Нить | Необходимый | Название системы, которое отображается клиентам. |
rental_apps | Объект | Необходимый | Объект JSON, содержащий информацию о приложении аренды для Android и iOS в соответствующих полях. |
rental_apps.android | Объект | Условно требуется | Содержит информацию о загрузке и обнаружении приложения для Android в полях store_uri и discovery_uri . Если у поставщика системы есть приложение для Android, предоставляющее услуги аренды, это поле обязательно для заполнения. |
rental_apps.android.store_uri | URI | Необходимый | URI, откуда можно загрузить арендуемое Android-приложение. Обычно это URI магазина приложений, например Google Play. Если URI указывает на магазин приложений, например Google Play, мы рекомендуем использовать URI, соответствующий рекомендациям Android, чтобы приложение для просмотра могло напрямую открыть URI приложения из магазина приложений, а не веб-сайта. |
rental_apps.android.discovery_uri | URI | Необходимый | URI в формате your_custom_scheme://your/path/here . Этот URI может использоваться методом PackageManager.queryIntentActivities() для определения того, установлено ли на устройстве арендованное Android-приложение. |
rental_apps.ios | Объект | Условно требуется | Содержит информацию о загрузке и обнаружении приложения для аренды на платформе iOS в полях store_uri и discovery_uri . Если у поставщика системы есть приложение для аренды iOS, это поле обязательно для заполнения. |
rental_apps.ios.store_uri | URI | Необходимый | URI, откуда можно загрузить арендованное приложение iOS. Обычно это URI магазина приложений, например Apple App Store. Если URI указывает на магазин приложений, например Apple App Store, мы рекомендуем использовать URI, соответствующий лучшим практикам iOS, чтобы приложение для просмотра могло напрямую открыть URI приложения из магазина приложений, а не веб-сайта. |
rental_apps.ios.discovery_uri | URI | Необходимый | URI в формате your_custom_scheme:// . URI может использоваться UIApplication canOpenURL: для определения того, установлено ли на устройстве приложение iOS, предлагаемое в аренду. |
Обязательно: free_bike_status.json (система без док-станции)
При необходимости обратитесь к спецификации GBFS .
В этом фиде указаны местоположения и характеристики доступных отдельно стоящих автомобилей. В целях конфиденциальности автомобили, находящиеся в аренде, не должны отображаться в этом фиде.
Имя поля | Тип | Требование | Описание |
---|---|---|---|
bikes | Множество | Необходимый | Массив доступных на данный момент остановленных велосипедов, где каждый велосипед является объектом. |
bikes[].bike_id | ИДЕНТИФИКАТОР | Необходимый | Идентификатор велосипеда. В целях защиты конфиденциальности идентификатор можно менять на случайную строку после каждой поездки. |
bikes[].lat | Широта | Необходимый | Широта велосипеда в системе координат WGS 84 в десятичных градусах. |
bikes[].lon | Долгота | Необходимый | Долгота велосипеда в системе координат WGS 84 в десятичном формате градусов. |
bikes[].is_reserved | Булевое значение | Необходимый | Зарезервирован ли велосипед в настоящее время, можно узнать следующим образом:
|
bikes[].is_disabled | Булевое значение | Необходимый | Если велосипед в настоящее время неисправен или сломан, выполните следующие действия:
|
bikes[].rental_uris | Объект | Необходимый | Объект JSON, содержащий URI аренды для Android, iOS и веб-сайтов в соответствующих полях. |
bikes[].rental_uris.android | URI | Условно требуется | URI, который можно передать приложению Android с намерением android.intent.action.VIEW для поддержки Android Deep Links . В качестве rental_uris должны быть указаны ссылки на приложения Android , чтобы приложению просмотра не приходилось вручную управлять перенаправлением пользователя в магазин приложений, если у пользователя не установлено приложение поставщика.Этот URI должен представлять собой глубокую ссылку, относящуюся к конкретному велосипеду, а не общую страницу аренды, содержащую информацию о нескольких велосипедах. Глубокая ссылка должна вести пользователя непосредственно к велосипеду без каких-либо подсказок, промежуточных страниц или входа в систему. Убедитесь, что пользователи видят велосипед, даже если они никогда не открывали приложение. URI не обязательно должны включать Если у партнера есть приложение для аренды Android, это поле обязательно для заполнения. Пример ссылок на приложения Android: |
bikes[].rental_uris.ios | URI | Условно требуется | URI, который можно использовать в iOS для запуска приложения аренды велосипеда. Подробнее об этом см. в статье Apple о пользовательских URL-схемах iOS . Предоставляемый rental_uris должен быть универсальным URL-адресом iOS , чтобы приложению просмотра не приходилось вручную управлять перенаправлением пользователя в магазин приложений, если у него не установлено приложение поставщика.Этот URI должен представлять собой глубокую ссылку, относящуюся к конкретному велосипеду, а не общую страницу аренды, содержащую информацию о нескольких велосипедах. Глубокая ссылка должна вести пользователя непосредственно к велосипеду без каких-либо подсказок, промежуточных страниц или входа в систему. Убедитесь, что пользователи видят велосипед, даже если они никогда не открывали приложение. URI не обязательно должны включать идентификатор bike_id велосипеда, если у партнёра есть другие способы идентифицировать соответствующий велосипед. Например, приложение проката может использовать другие идентификаторы в URI для уникальной идентификации велосипеда. Если у партнера есть приложение для аренды iOS, это поле обязательно для заполнения. Пример универсальных ссылок iOS: |
bikes[].rental_uris.web | URL | Необязательный | URL-адрес, который может использоваться веб-браузером для отображения дополнительной информации об аренде транспортного средства в этом транспортном средстве. Этот URL должен представлять собой глубокую ссылку на конкретный велосипед, а не на общую страницу аренды, содержащую информацию о нескольких велосипедах. Глубокая ссылка должна вести пользователя непосредственно к велосипеду без каких-либо подсказок, промежуточных страниц или входа в систему. Убедитесь, что пользователи видят велосипед, даже если они никогда не открывали приложение. URL-адреса не обязательно должны включать идентификатор Если это поле не задано, это означает, что глубокие ссылки не поддерживаются веб-браузером. Пример значения: |
bikes[].vehicle_type_id | ИДЕНТИФИКАТОР | Необходимый | vehicle_type_id транспортного средства, как описано в разделе vehicle_types.json . |
bikes[].pricing_plan_id | ИДЕНТИФИКАТОР | Необходимый | Идентификатор ценового плана, который применяется при аренде данного типа транспортного средства, как описано в разделе system_pricing_plans.json . |
bikes[].current_range_meters | Неотрицательное число с плавающей точкой | Условно требуется | Если определение vehicle_type , соответствующее транспортному средству, имеет двигатель, то это поле обязательно для заполнения.Установите максимальное расстояние в метрах, которое транспортное средство может проехать без подзарядки или дозаправки, учитывая текущий уровень заряда или топлива транспортного средства. |
bikes[].last_reported | Метка времени | Необязательный | Устанавливается на момент последнего сообщения о состоянии транспортного средства в систему оператора. |
Ниже приведен пример free_bike_status.json
:
"bikes": [{
"bike_id": "xyz123",
"lat": 12.34,
"lon": 56.78,
"is_reserved": true,
"is_disabled": false,
"rental_uris":{
"android": "https://www.example.com/app?sid=1234567890&platform=android",
"ios": "https://www.example.com/app?sid=1234567890&platform=ios",
"web": "https://www.example.com/app?sid=1234567890"
},
"vehicle_type_id": "scooter_electric",
"pricing_plan_id": "sydneyPlan1",
"current_range_meters": 4500,
"last_reported": 1434054678
},
{
"bike_id": "abc123",
"lat": 1.34,
"lon": 146.78,
"is_reserved": false,
"is_disabled": true,
"rental_uris":{
"android": "https://www.example.com/app?sid=1234567890&platform=android",
"ios": "https://www.example.com/app?sid=1234567890&platform=ios",
"web": "https://www.example.com/app?sid=1234567890"
},
"vehicle_type_id": "bike_manual",
"pricing_plan_id": "sydneyPlan1",
"last_reported": 1434054241
}
]
Обязательно: vehicle_types.json (система с док-станцией и без нее)
При необходимости обратитесь к спецификации GBFS .
Этот канал определяет подробную информацию об отдельных типах транспортных средств, как указано в разделе free_bike_status.json
.
Имя поля | Тип | Требование | Описание |
---|---|---|---|
vehicle_types | Множество | Необходимый | Массив объектов, каждый из которых определяет отдельный тип транспортного средства в каталоге поставщика. Для каждого типа транспортного средства может быть только один объект. |
vehicle_types[].vehicle_type_id | ИДЕНТИФИКАТОР | Необходимый | Уникальный идентификатор для данного типа транспортного средства. |
vehicle_types[].form_factor | Перечисление | Необходимый | Перечисление, представляющее общий форм-фактор транспортного средства, из следующего списка допустимых в настоящее время значений:
|
vehicle_types[].propulsion_type | Перечисление | Необходимый | Перечисление, представляющее основной тип двигателя транспортного средства, из следующего списка допустимых в настоящее время значений:
|
vehicle_types[].max_range_meters | Неотрицательное число с плавающей точкой | Условно требуется | Если propulsion_type не установлен на human , то транспортное средство имеет двигатель, и поэтому это поле является обязательным.Установите максимальное расстояние в метрах, которое транспортное средство может проехать без необходимости подзарядки или дозаправки, когда оно полностью заправлено или полностью заряжено. |
Ниже приведен пример для vehicle_types.json
:
"vehicle_types": [
{
"vehicle_type_id": "bike_manual",
"form_factor": "bicycle",
"propulsion_type": "human"
},
{
"vehicle_type_id": "scooter_electric",
"form_factor": "scooter",
"propulsion_type": "electric",
"max_range_meters": 10000
}
]
Обязательно: system_pricing_plans.json (система без док-станции)
При необходимости обратитесь к спецификации GBFS .
Этот фид определяет тарифные планы для отдельно стоящих автомобилей. Мы требуем от поставщиков предоставлять информацию о ценах на отдельно стоящие автомобили.
Имя поля | Тип | Требование | Описание |
---|---|---|---|
plans | Множество | Необходимый | Массив объектов, где каждый объект определяет заданный ценовой план. |
plans[].plan_id | ИДЕНТИФИКАТОР | Необходимый | Строка, представляющая собой уникальный идентификатор для данного ценового плана, предлагаемого провайдером. |
plans[].url | URL | Необязательный | URL-адрес, направляющий конечных пользователей к дополнительной информации о ценовом плане. |
plans[].currency | Нить | Необходимый | Стандарт ISO 4217 для ценового плана. |
plans[].price | Неотрицательное число с плавающей точкой | Необходимый | Ценовой план должен быть определен либо как нетарифицируемый, либо как тарифицируемый:
|
plans[].per_km_pricing | Множество | Условно требуется | Если цена зависит от пройденного расстояния и отображается в километрах, то это поле обязательно для заполнения. Массив объектов, где каждый объект определяет заданный сегмент, разделённый расстоянием. Чтобы определить общую стоимость данного плана, добавьте значение Если это поле не заполнено, то переменные цены в зависимости от расстояния отсутствуют и, следовательно, не включаются в общую цену. |
plans[].per_km_pricing[].start | Неотрицательное целое число | Необходимый | Количество километров, с которого начинается тарификация сегмента. В этом поле указывается начальное значение сегмента, включая указанное. Таким образом, по достижении указанного количества километров rate взимается один раз. |
plans[].per_km_pricing[].rate | Плавать | Необходимый | Тариф, взимаемый за каждый interval , начиная с start сегмента (включительно). Если в этом поле указано отрицательное число, путешественник получает скидку. |
plans[].per_km_pricing[].interval | Неотрицательное целое число | Необходимый | Интервал в километрах, с которым Если Если это поле равно |
plans[].per_km_pricing[].end | Неотрицательное целое число | Необязательный | Количество километров, по достижении которого Если это поле не задано или пусто, |
plans[].per_min_pricing | Множество | Условно требуется | Если цена является функцией прошедшего времени и отображается в минутах, то это поле обязательно для заполнения. Массив объектов, где каждый объект определяет заданный сегмент, разделённый по времени. Чтобы определить общую стоимость данного плана, добавьте значение Если это поле не заполнено, переменные цены, зависящие от времени, отсутствуют и, следовательно, не включаются в общую цену. |
plans[].per_min_pricing[].start | Плавать | Необходимый | Количество минут, с которого начинается тарификация сегмента. В этом поле указывается начальное значение сегмента (включительно ). Таким образом, по истечении заданного количества минут rate списывается один раз. |
plans[].per_min_pricing[].rate | Плавать | Необходимый | Тариф, взимаемый за каждый interval . Тариф начинается с start сегмента (включительно). Если в этом поле указано отрицательное число, путешественник получает скидку. |
plans[].per_min_pricing[].interval | Неотрицательное целое число | Необходимый | Интервал в минутах, с которым Если Если это поле равно |
plans[].per_min_pricing[].end | Неотрицательное целое число | Необязательный | Количество минут, по истечении которых Если это поле не задано или пусто, |
Примеры для system_pricing_plans.json
В этом разделе представлены информативные примеры кода system_pricing_plans.json
. Также представлены подробные сведения и результаты для каждого примера.
Пример 1 для system_pricing_plans.json
В следующем примере кода тарифного плана показана плата, рассчитываемая на основе времени в пути для следующих интервалов:
- [0,1): 2 доллара США
- Если поездка занимает менее минуты, пользователь платит 2 доллара США.
- Пример: поездка продолжительностью 59 секунд
- [1,2): 3 доллара США
- Если поездка длится дольше или равна одной минуте, но меньше двух минут, пользователь платит 2 доллара + 1 доллар = 3 доллара США.
- Примеры: поездка продолжительностью 1 мин.; поездка продолжительностью 1 мин. 45 сек.
- x количество минут, где x больше или равно 2: $3 + (($2 + $1) * ( x - 2 + 1)) USD
- Если поездка длится дольше или равна двум минутам, пользователь платит 3 доллара за часть поездки продолжительностью менее двух минут и (1 доллар [продолжая с первой записи списка
per_min_pricing
] + 2 доллара [вторая запись спискаper_min_pricing
]) за каждую минуту после двух минут включительно. - Примеры:
- Стоимость двухминутной поездки: 3 доллара + (2 доллара + 1 доллар) = 6 долларов США
- Стоимость поездки продолжительностью 2 мин. 30 сек.: 3 долл. США + (2 долл. США + 1 долл. США) = 6 долл. США
- Стоимость 3-минутной поездки: 3 доллара + ((2 доллара + 1 доллар) * 2) = 9 долларов США
- Стоимость 10-минутной поездки: 3 доллара + ((2 доллара + 1 доллар) * 9) = 30 долларов США
- Если поездка длится дольше или равна двум минутам, пользователь платит 3 доллара за часть поездки продолжительностью менее двух минут и (1 доллар [продолжая с первой записи списка
{
"plans": {
"plan_id": "plan1",
"currency": "USD",
"price": 2,
"per_min_pricing": [
{
"interval": 1,
"rate": 1,
"start": 1
},
{
"interval": 1,
"rate": 2,
"start": 2
}
],
}
}
Пример 2 для system_pricing_plans.json
В этом примере мы показываем пример кода для тарифного плана, который тарифицируется как поминутно, так и по километрам:
- В частности, с конечного пользователя взимается плата в размере 0,25 канадских долларов за км, а также 0,50 канадских долларов за минуту.
- Оба эти показателя происходят одновременно и не зависят друг от друга.
- Таким образом, поездка длиной в один километр продолжительностью 10 минут стоит 9 канадских долларов. Стоимость распределяется следующим образом:
- 3 доллара, базовая цена
- 0,25 $ * 2, взимается один раз в начале поездки и один раз на отметке 1 км.
- 0,5 доллара США * 11, взимается один раз в начале каждой минуты. Тарификация начинается с 0 секунд, последний интервал — 10 минут.
{
"plans": {
"plan_id": "plan2",
"currency": "CAD",
"price": 3,
"per_km_pricing": [{
"start": 0,
"rate": 0.25,
"interval": 1
}],
"per_min_pricing": [{
"start": 0,
"rate": 0.50,
"interval": 1
}]
}
}
Условно требуется: geofencing_zones.json (система с док-станцией и без нее)
При необходимости обратитесь к спецификации GBFS .
Этот фид определяет данные геозонирования для отдельно стоящих транспортных средств. Данные геозонирования включают географические границы, определяющие, где транспортным средствам разрешено начинать и заканчивать поездку, а также допустимую скорость. Эта скорость представляет собой либо максимальную скорость транспортного средства, либо ограничение скорости на дороге, по которой оно движется, в зависимости от того, какое значение меньше. Водители обязаны соблюдать местные законы и постановления.
Мы используем эти данные, чтобы при поиске пользователем заданного маршрута, если конечная точка поездки находится за пределами определённых геозон, результат поиска Micrimobility отфильтровывался. Если геозоны не указаны, Google рассматривает сервис как не имеющий ограничений по границам.
Имя поля | Тип | Требование | Описание |
---|---|---|---|
geofencing_zones | Объект | Необходимый | Объект FeatureCollection , описанный в IETF RFC 7946, — это объект с полем features . Значение поля features представляет собой массив JSON. Каждый элемент массива JSON является объектом Feature . Каждая геозона, связанные с ней правила и атрибуты, а также определения |
geofencing_zones.type | Нить | Необходимый | Установите значение FeatureCollection , как описано в IETF RFC 7946 . |
geofencing_zones.features | Множество | Необходимый | Массив JSON, где каждый элемент массива JSON является объектом Feature . |
geofencing_zones.features[].type | Нить | Необходимый | Установите значение Feature , как описано в IETF RFC 7946 . |
geofencing_zones.features[].geometry | GeoJSON Мультиполигон | Необходимый | Мультиполигон GeoJSON, описывающий места, где не могут начинаться, заканчиваться и проходить аттракционы, а также другие ограничения. Расположение точек по часовой стрелке определяет область, ограниченную полигоном, а расположение против часовой стрелки — область за пределами полигона. Подробнее об этом см. в правиле правой руки . |
geofencing_zones.features[].properties | Объект | Необходимый | Объект, определяющий командировочные расходы и ограничения. |
geofencing_zones.features[].properties.rules | Множество | Необязательный | Массив объектов, где каждый объект определяет одно и только одно правило. Если два или более правил пересекаются, конфликтуют или иным образом конфликтуют, приоритет имеет правило, заданное первым в порядке следования в JSON-файле. |
geofencing_zones.features[].properties.rules[].vehicle_type_id | Множество | Необязательный | Массив идентификаторов типов транспортных средств, где каждый элемент — это vehicle_type_id , к которому должны быть применены ограничения. Если vehicle_type_id не указан, то ограничения применяются ко всем типам транспортных средств. |
geofencing_zones.features[].properties.rules[].ride_allowed | Булевое значение | Необходимый | Может ли велопробег с самостоятельным «неприпаркованным» велосипедом начинаться и заканчиваться в зоне следующим образом:
|
Ниже приведен пример geofencing_zones.json
:
"geofencing_zones":{
"type":"FeatureCollection",
"features":[{
"type":"Feature",
"properties":{
"rules":[{
"vehicle_type_id":"scooter",
"ride_allowed": false
}]
},
"geometry":{
"type":"MultiPolygon",
"coordinates":[[[
[-122.66780376434326, 45.49896266763551],
[-122.66810417175292, 45.49824825558575],
[-122.66830801963805, 45.49632305799116],
[-122.66780376434326, 45.49896266763551]
]]]
}
}]
}
Обязательно: station_information.json (система с пристыковкой)
При необходимости обратитесь к спецификации GBFS .
В этом канале содержится общая информация об общественных станциях проката велосипедов.
Имя поля | Тип | Требование | Описание |
---|---|---|---|
stations | Множество | Необходимый | Массив объектов, где каждый объект определяет одну и только одну станцию. |
stations[].station_id | Нить | Необходимый | Идентификатор станции. |
stations[].name | Нить | Необходимый | Публичное название станции на языке города, в котором она расположена. name должно соответствовать названию, используемому на вывесках на станции (если таковые имеются), или отражать местоположение станции, используя название перекрёстка или местной достопримечательности. Не используйте сокращения, например, «St.» вместо «Street», если только это не указано на вывесках. name должно быть написано с заглавными буквами, в соответствии с местными правилами написания названий населённых пунктов. |
stations[].lat | Широта | Необходимый | Широта станции в системе координат WGS 84 в десятичных градусах. |
stations[].lon | Долгота | Необходимый | Долгота станции в системе координат WGS 84 в десятичных градусах. |
stations[].capacity | Неотрицательное целое число | Необязательный | Неотрицательное целое число, представляющее общее количество стыковочных точек, установленных на станции, как доступных, так и недоступных. |
stations[].rental_uris | Объект | Необходимый | Объект JSON, содержащий URI аренды для Android, iOS и веб-сайтов в соответствующих полях. Если указаны эти URI, они переопределяют глубинные ссылки по умолчанию, которые были установлены при подключении поставщика. |
stations[].rental_uris.android | URI | Условно требуется | URI, который можно передать приложению Android с намерением Этот URI должен представлять собой глубокую ссылку, относящуюся к конкретной станции, а не общую страницу аренды, содержащую информацию о нескольких станциях. Глубокая ссылка должна вести пользователя непосредственно на станцию без каких-либо подсказок, промежуточных страниц или входа в систему. Убедитесь, что пользователи видят станцию, даже если они никогда не открывали приложение. URI не обязательно должны включать Если у партнера есть приложение для аренды Android, это поле обязательно для заполнения. Пример ссылок на приложения Android: |
stations[].rental_uris.ios | URI | Условно требуется | URI, который можно использовать в iOS для запуска приложения аренды станции. Подробнее об этом см. в статье Apple о пользовательских URL-схемах iOS . Предоставляемый Этот URI должен представлять собой глубокую ссылку, относящуюся к конкретной станции, а не общую страницу аренды, содержащую информацию о нескольких станциях. Глубокая ссылка должна вести пользователя непосредственно на станцию без каких-либо подсказок, промежуточных страниц или входа в систему. Убедитесь, что пользователи видят станцию, даже если они никогда не открывали приложение. URI не обязательно должны включать Если у партнера есть приложение для аренды iOS, это поле обязательно для заполнения. Пример универсальных ссылок iOS: |
stations[].rental_uris.web | URL | Необязательный | URL-адрес, который может использоваться веб-браузером для отображения дополнительной информации о том, как арендовать транспортное средство на этой станции. Этот URL должен представлять собой глубокую ссылку, относящуюся к конкретной станции, а не общую страницу аренды, содержащую информацию о нескольких станциях. Глубокая ссылка должна вести пользователя непосредственно на станцию без каких-либо подсказок, промежуточных страниц или входа в систему. Убедитесь, что пользователи видят станцию, даже если они никогда не открывали приложение. URL-адреса не обязательно должны включать Если это поле не задано, это означает, что глубокие ссылки не поддерживаются веб-браузером. Пример значения: |
Ниже приведен пример для station_information.json
:
"stations": [
{
"station_id": "597",
"name": "Silverthorne Road, Battersea",
"lat": 51.472865,
"lon": -0.148059,
"capacity": 10,
"rental_uris": {
"android": "https://www.example.com/app?sid=1234567890&platform=android",
"ios": "https://www.exampleexample.com/app?sid=1234567890&platform=ios",
"web": "https://www.example.com/app?sid=1234567890&platform=web"
}
},
]
Обязательно: station_status.json (система с пристыковкой)
При необходимости обратитесь к спецификации GBFS .
В этом канале отображается актуальная информация о состоянии общественных станций проката велосипедов.
Имя поля | Тип | Требование | Описание |
---|---|---|---|
stations | Множество | Необходимый | Массив объектов, где каждый объект определяет одну и только одну станцию. |
stations[].station_id | Нить | Необходимый | Идентификатор станции. |
stations[].num_bikes_available | Неотрицательное целое число | Необходимый | Неотрицательное целое число, представляющее количество исправных велосипедов, которые физически находятся на станции и которые могут быть предложены для аренды. Чтобы определить, сдает ли станция в аренду велосипеды, необходимо проверить поле |
stations[].vehicle_types_available | Множество | Необязательный | Массив объектов, определяющий общее количество транспортных средств, сгруппированных по типу транспортного средства, доступному на станции. Каждый объект моделирует общее количество транспортных средств соответствующего типа. Суммарное количество транспортных средств каждого из этих объектов должно соответствовать значению, указанному в поле |
stations[].vehicle_types_available[].vehicle_type_id | ИДЕНТИФИКАТОР | Необходимый | |
stations[].vehicle_types_available[].count | Неотрицательное целое число | Необходимый | Общее количество доступных транспортных средств для соответствующего |
stations[].num_docks_available | Неотрицательное целое число | Условно требуется | Поле обязательно для заполнения, если только станция не имеет неограниченного количества стыковочных мест. Например, виртуальные станции имеют неограниченное количество стыковочных мест, и это поле не является обязательным. Неотрицательное целое число, представляющее общее количество физически имеющихся на станции функциональных доков, которые могут принять возвращаемые транспортные средства. Чтобы определить, принимает ли станция в настоящее время возврат велосипедов, необходимо проверить поле |
stations[].is_installed | Булевое значение | Необходимый | Логическое значение, указывающее, верно ли, что станция в данный момент находится на улице и установлена. Если станция установлена на улице, установите значение Если станция не установлена на улице, установите значение |
stations[].is_renting | Булевое значение | Необходимый | Логическое значение, указывающее, верно ли, что на станции в настоящее время сдается в аренду велосипеды. Если на станции в настоящее время можно арендовать велосипеды, установите значение Если на станции в настоящее время не осуществляется прокат велосипедов, установите значение |
stations[].is_returning | Булевое значение | Необходимый | Логический, который указывает, правда ли это, что станция в настоящее время принимает возвращение велосипедов. Если станция в настоящее время принимает возврат велосипедов, установите на Если станция в настоящее время не принимает возврат велосипеда, установите на |
Ниже приведен пример 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
},
]