Definições da GBFS

Antes de continuar com esta seção, se ainda não tiver feito isso, verifique os sistemas de micromobilidade compatíveis para os quais você está criando o feed.

Nas seções a seguir, cada cabeçalho tem o seguinte formato: Required|Optional|Conditionally required: Feed name (System supported). Os seguintes sistemas são compatíveis:

  • Sistema encaixado
  • Sistema sem base
  • Sistema com e sem estação de ancoragem

Para fazer a integração com o Google, forneça apenas os arquivos necessários para o sistema descrito no feed e especifique os campos obrigatórios incluídos nas seções relevantes. Para campos obrigatórios sob certas condições, consulte a descrição do campo para receber orientações. Você também pode especificar campos opcionais que adicionam informações e proporcionam uma melhor experiência do usuário.

Cabeçalho obrigatório para feeds de micromobilidade

Os feeds de micromobilidade contêm dados estruturados de micromobilidade com ou sem dock, conforme definido neste artigo.

Todos os feeds precisam especificar os campos incluídos na tabela a seguir no nível superior do objeto JSON, conhecido coletivamente como o cabeçalho comum do GBFS.

Nome do campo Tipo Requisito Descrição
last_updated Carimbo de data/hora Obrigatório Um carimbo de data/hora POSIX, que especifica um número de segundos desde 1º de janeiro de 1970 00:00:00 UTC.

Definido como a última vez que os dados no feed foram atualizados.

ttl Número inteiro não negativo Obrigatório Um número inteiro não negativo que representa o número de segundos que restam até a atualização do feed.

Se os dados precisarem ser atualizados a uma taxa constante, defina esse valor como 0.

data JSON Obrigatório JSON que contém os campos de dados do feed individual.

Por exemplo, um feed free_bike_status.json agregado que especifica o cabeçalho GBFS comum pode ser assim:

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

Obrigatório: system_information.json (sistema com e sem dock)

Consulte a especificação do GBFS conforme necessário.

Este feed fornece detalhes sobre o operador do sistema.

Nome do campo Tipo Requisito Descrição
system_id ID Obrigatório Um identificador globalmente exclusivo para o sistema de compartilhamento de veículos. Esse valor deve permanecer o mesmo durante a vida útil do sistema. Cada sistema ou área geográfica distinta em que os veículos são operados DEVE ter seu próprio system_id. Os IDs de sistema PRECISAM ser reconhecíveis como pertencentes a um sistema específico, em vez de strings aleatórias. Por exemplo, bcycle_austin ou biketown_pdx.
name String Obrigatório Nome do sistema, que é exibido aos clientes.
rental_apps Objeto Obrigatório Um objeto JSON que contém as informações do app de aluguel para Android e iOS nos respectivos campos.
rental_apps.android Objeto Obrigatório sob certas condições Contém informações de download e descoberta de apps de aluguel para a plataforma Android nos campos store_uri e discovery_uri. Se o provedor do sistema tiver um app de aluguel para Android, esse campo será obrigatório.
rental_apps.android.store_uri URI Obrigatório URI em que o app Android de aluguel pode ser baixado. Normalmente, é um URI para uma app store, como o Google Play. Se o URI apontar para uma loja de apps, como o Google Play, recomendamos que ele siga as práticas recomendadas do Android para que o app de visualização possa abrir diretamente o URI para o app nativo da loja de apps em vez de um site.
rental_apps.android.discovery_uri URI Obrigatório URI que tem o formato your_custom_scheme://your/path/here. O URI pode ser usado pelo PackageManager.queryIntentActivities() para descobrir se o app Android de aluguel está instalado no dispositivo.
rental_apps.ios Objeto Obrigatório sob certas condições Contém informações de download e descoberta de apps de aluguel para a plataforma iOS nos campos store_uri e discovery_uri. Se o provedor do sistema tiver um app de aluguel para iOS, esse campo será obrigatório.
rental_apps.ios.store_uri URI Obrigatório URI em que o app iOS de aluguel pode ser baixado. Normalmente, é um URI para uma app store, como a Apple App Store. Se o URI apontar para uma loja de apps, como a Apple App Store, recomendamos que ele siga as práticas recomendadas do iOS para que o app de visualização possa abrir diretamente o URI na loja de apps nativa em vez de um site.
rental_apps.ios.discovery_uri URI Obrigatório URI que tem o formato your_custom_scheme://. O URI pode ser usado pelo UIApplication canOpenURL: para descobrir se o app de aluguel para iOS está instalado no dispositivo.

Obrigatório: free_bike_status.json (sistema sem dock)

Consulte a especificação do GBFS conforme necessário.

Esse feed define os locais e atributos dos veículos autônomos disponíveis. Por motivos de privacidade, os veículos que fazem parte de uma locação ativa não podem aparecer neste feed.

Nome do campo Tipo Requisito Descrição
bikes Matriz Obrigatório Uma matriz de bicicletas paradas e disponíveis no momento, em que cada bicicleta é um objeto.
bikes[].bike_id ID Obrigatório O identificador de uma bicicleta.

Para proteger a privacidade, o ID pode ser mudado para uma string aleatória após cada viagem.

bikes[].lat Latitude Obrigatório A latitude WGS 84 da bicicleta, em formato de graus decimais.
bikes[].lon Longitude Obrigatório A longitude WGS 84 da bicicleta, em formato de graus decimais.
bikes[].is_reserved Booleano Obrigatório Indica se a bicicleta está reservada no momento, da seguinte forma:
  • Se a bicicleta estiver reservada, defina como true.
  • Se a bicicleta não estiver reservada, defina como false.
bikes[].is_disabled Booleano Obrigatório Se a bicicleta está desativada ou quebrada, da seguinte forma:
  • Se a bicicleta estiver desativada, defina como true.
  • Se a bicicleta não estiver desativada, defina como false.
bikes[].rental_uris Objeto Obrigatório Um objeto JSON que contém URIs de aluguel para Android, iOS e Web nos respectivos campos.
bikes[].rental_uris.android URI Obrigatório sob certas condições Um URI que pode ser transmitido para um app Android com uma intent android.intent.action.VIEW do Android para oferecer suporte a links diretos do Android. O rental_uris fornecido precisa ser um Android App Link para que o app de visualização não precise gerenciar manualmente o redirecionamento do usuário para a app store caso ele não tenha o aplicativo do provedor instalado.

O URI precisa ser um link direto específico para a bicicleta individual, não uma página geral de aluguel que inclua informações de mais de uma bicicleta. O link direto precisa levar o usuário diretamente à bicicleta sem solicitações, páginas intersticiais ou logins. Confira se os usuários podem ver a bicicleta, mesmo que nunca tenham aberto o aplicativo.

Os URIs não precisam necessariamente incluir o bike_id da bicicleta, desde que o parceiro tenha outros meios de identificar o veículo. Por exemplo, o app de aluguel pode usar outros identificadores no URI para identificar a bicicleta de forma exclusiva.

Se o parceiro tiver um app de aluguel para Android, esse campo será obrigatório.

Exemplo de link do app Android:

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

bikes[].rental_uris.ios URI Obrigatório sob certas condições Um URI que pode ser usado no iOS para iniciar o app de aluguel da bicicleta. Para mais informações, consulte o artigo da Apple sobre esquemas de URL personalizados do iOS. O rental_uris fornecido precisa ser um link universal do iOS para que o app de visualização não precise gerenciar manualmente o redirecionamento do usuário para a app store caso ele não tenha o aplicativo do provedor instalado.

O URI precisa ser um link direto específico para a bicicleta individual, não uma página geral de aluguel que inclua informações de mais de uma bicicleta. O link direto precisa levar o usuário diretamente à bicicleta sem solicitações, páginas intersticiais ou logins. Confira se os usuários podem ver a bicicleta, mesmo que nunca tenham aberto o aplicativo.

Os URIs não precisam incluir o bike_id da bicicleta, desde que o parceiro tenha outros meios de identificar a bicicleta. Por exemplo, o app de aluguel pode usar outros identificadores no URI para identificar a bicicleta de forma exclusiva.

Se o parceiro tiver um app de aluguel para iOS, esse campo será obrigatório.

Exemplo de link universal para iOS:

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

bikes[].rental_uris.web URL Opcional

Um URL que pode ser usado por um navegador da Web para mostrar mais informações sobre o aluguel de um veículo neste local.

O URL precisa ser um link direto específico para a bicicleta, não uma página geral de aluguel que inclua informações de mais de uma bicicleta. O link direto precisa levar o usuário diretamente à bicicleta sem solicitações, páginas intersticiais ou logins. Confira se os usuários podem ver a bicicleta, mesmo que nunca tenham aberto o aplicativo.

Não é necessário que os URLs incluam o bike_id para a bicicleta ou sigam as convenções semânticas dos URLs de aluguel para Android ou iOS. O app de aluguel pode usar outros identificadores no URL que identificam a bicicleta de maneira exclusiva.

Se esse campo não estiver definido, isso significa que os links diretos não são compatíveis com o navegador da Web.

Exemplo de valor:

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

bikes[].vehicle_type_id ID Obrigatório O vehicle_type_id do veículo, conforme descrito na seção vehicle_types.json.
bikes[].pricing_plan_id ID Obrigatório Identificador do plano de preços aplicado quando este tipo de veículo é alugado, conforme descrito na seção system_pricing_plans.json.
bikes[].current_range_meters Valor flutuante não negativo Obrigatório sob certas condições Se a definição de vehicle_type que corresponde ao veículo tiver um motor, esse campo será obrigatório.

Definido como a maior distância em metros que o veículo pode percorrer sem precisar de recarga ou reabastecimento, considerando o nível atual de carga ou combustível do veículo.

bikes[].last_reported Carimbo de data/hora Opcional Definido como a última vez que o veículo informou o status ao back-end do operador.

Confira abaixo um exemplo de 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
}
]

Obrigatório: vehicle_types.json (sistema com e sem estação)

Consulte a especificação do GBFS conforme necessário.

Esse feed define os detalhes dos tipos de veículos individuais, conforme mencionado na seção free_bike_status.json.

Nome do campo Tipo Requisito Descrição
vehicle_types Matriz Obrigatório Uma matriz de objetos, em que cada objeto define um tipo de veículo distinto no catálogo do provedor. Só pode haver um objeto para um determinado tipo de veículo.
vehicle_types[].vehicle_type_id ID Obrigatório Um identificador exclusivo para um determinado tipo de veículo.
vehicle_types[].form_factor Enumeração Obrigatório Um enum que representa o formato geral do veículo, da seguinte lista de valores válidos no momento:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type Enumeração Obrigatório Um enum que representa o tipo de propulsão principal do veículo, da seguinte lista de valores válidos no momento:
  • human: propulsão a pedal ou a pé
  • electric_assist: fornece energia somente com propulsão humana
  • electric: contém o modo de aceleração com um motor movido a bateria.
  • combustion: contém o modo de aceleração com um motor movido a gasolina
vehicle_types[].max_range_meters Valor flutuante não negativo Obrigatório sob certas condições Se propulsion_type não estiver definido como human, o veículo terá um motor, e esse campo será obrigatório.

Definido como a maior distância em metros que o veículo pode percorrer sem precisar de recarga ou reabastecimento, quando o veículo está totalmente abastecido ou totalmente carregado.

Confira abaixo um exemplo de 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
  }
]

Obrigatório: system_pricing_plans.json (sistema sem dock)

Consulte a especificação do GBFS conforme necessário.

Esse feed define os planos de preços para veículos autônomos. Exigimos que os provedores mostrem informações de preços para veículos autônomos.

Nome do campo Tipo Requisito Descrição
plans Matriz Obrigatório Uma matriz de objetos em que cada objeto define um determinado plano de preços.
plans[].plan_id ID Obrigatório Uma string que representa um identificador exclusivo do plano de preços oferecido pelo provedor.
plans[].url URL Opcional O URL que direciona os usuários finais para mais informações sobre o plano de preços.
plans[].currency String Obrigatório O padrão ISO 4217 para o plano de preços.
plans[].price Valor flutuante não negativo Obrigatório

O plano de preços precisa ser definido como um plano não classificado ou classificado:

Plano de preços sem classificação

Esse plano tem uma tarifa única e fixa.

Defina o seguinte campo:

  • price:o preço fixo de toda a viagem.
Plano de preços classificado

Esse plano é um preço de taxa linear por partes.

Defina o seguinte campo:

  • price:o preço base, que é cobrado exatamente uma vez por viagem.

Defina um ou ambos os campos a seguir:

  • per_km_pricing:o preço da viagem especificado na taxa por quilômetro.
  • per_min_pricing:o preço da viagem especificado na taxa por minuto.
plans[].per_km_pricing Matriz Obrigatório sob certas condições

Se o preço for uma função da distância percorrida, exibida em quilômetros, esse campo será obrigatório.

Uma matriz de objetos em que cada objeto define um segmento dividido por distância. O valor de start de cada segmento precisa ser menor ou igual ao valor de start do próximo segmento.

Para determinar o preço total do plano, adicione o valor plans[].price do plano aos preços acumulados dos segmentos em plans[].per_km_pricing e plans[].per_min_pricing.

Se esse campo não estiver definido, não haverá preços variáveis com base na distância e, portanto, nenhum será incluído como parte do preço total.

plans[].per_km_pricing[].start Número inteiro não negativo Obrigatório O número de quilômetros em que a taxa de segmento começa a ser cobrada. Esse campo é definido como o valor inclusivo que inicia o intervalo do segmento. Assim, quando o número de quilômetros for atingido, o rate será cobrado uma vez.
plans[].per_km_pricing[].rate Ponto flutuante Obrigatório A taxa cobrada por interval, que começa no start inclusivo do segmento. Se esse campo for definido como um número negativo, o viajante vai receber um desconto.
plans[].per_km_pricing[].interval Número inteiro não negativo Obrigatório

O intervalo em quilômetros em que o rate do segmento é reaplicado indefinidamente, a menos que o end do segmento seja definido como qualquer número inteiro não negativo.

O rate é reaplicado uma vez no início de cada interval, e nenhum arredondamento da distância é considerado.

Se o end do segmento for definido como um número inteiro não negativo, o rate do segmento será reaplicado até o valor end do segmento, mas não o incluindo.

Se esse campo estiver definido como 0, o rate será cobrado exatamente uma vez no start do segmento.

plans[].per_km_pricing[].end Número inteiro não negativo Opcional

O número de quilômetros em que o rate do segmento não é mais aplicado. Esse campo é definido como o valor exclusivo que encerra o intervalo do segmento. Por exemplo, se end for definido como 40, o rate não será mais aplicado a 40 quilômetros.

Se esse campo não estiver definido ou estiver vazio, a rate do segmento será cobrada até o fim da viagem, além de outros segmentos que a seguem.

plans[].per_min_pricing Matriz Obrigatório sob certas condições

Se o preço for uma função do tempo decorrido, exibido em minutos, esse campo será obrigatório.

Uma matriz de objetos em que cada objeto define um segmento dividido por tempo. O valor de start de cada segmento precisa ser menor ou igual ao valor de start do próximo segmento.

Para determinar o preço total do plano, adicione o valor plans[].price do plano aos preços acumulados dos segmentos em plans[].per_km_pricing e plans[].per_min_pricing.

Se esse campo não estiver definido, não haverá preços variáveis com base no tempo e, portanto, nenhum será incluído como parte do preço total.

plans[].per_min_pricing[].start Ponto flutuante Obrigatório O número de minutos em que a taxa do segmento começa a ser cobrada. Esse campo é definido como o valor inclusivo que inicia o intervalo do segmento. Assim, quando o número definido de minutos expirar, o rate será cobrado uma vez.
plans[].per_min_pricing[].rate Ponto flutuante Obrigatório A taxa cobrada por interval. A taxa começa no start inclusivo do segmento. Se esse campo for definido como um número negativo, o viajante vai receber um desconto.
plans[].per_min_pricing[].interval Número inteiro não negativo Obrigatório

O intervalo em minutos em que o rate do segmento é reaplicado indefinidamente, a menos que o end do segmento seja definido como um número inteiro não negativo.

O rate é reaplicado uma vez no início de cada interval, e nenhum arredondamento do tempo de viagem é considerado.

Se o end do segmento for definido como um número inteiro não negativo, o rate do segmento será reaplicado até o valor end do segmento, mas não o incluindo.

Se esse campo estiver definido como 0, o rate será cobrado exatamente uma vez no start do segmento.

plans[].per_min_pricing[].end Número inteiro não negativo Opcional

O número de minutos em que o rate do segmento não é mais aplicado. Esse campo é definido como o valor exclusivo que encerra o intervalo do segmento. Por exemplo, se end for definido como 20, o rate não será mais aplicado em 20 minutos.

Se esse campo não estiver definido ou estiver vazio, a rate do segmento será cobrada até o fim da viagem, além de quaisquer outros segmentos que a sigam.

Exemplos para system_pricing_plans.json

Esta seção fornece exemplos de código system_pricing_plans.json informativos. Os detalhes e resultados relevantes de cada exemplo também são fornecidos.

Exemplo 1 para system_pricing_plans.json

A amostra de código do plano de preços a seguir mostra cobranças com base no tempo de viagem para os seguintes intervalos:

  • [0,1): US$ 2
    • Se a viagem durar menos de um minuto, o usuário vai pagar US $2.
    • Exemplo: viagem de 59 segundos
  • [1,2): US$ 3
    • Se o trajeto durar um minuto ou mais, mas menos de dois minutos, o usuário paga US $2 + US $1 = US $3.
    • Exemplos: viagem de 1 minuto; viagem de 1 minuto e 45 segundos
  • Número x de minutos em que x é maior ou igual a 2: $3 + (($2 + $1) * (x - 2 + 1)) USD
    • Se o trajeto for maior ou igual a dois minutos, o usuário paga US $3 pela parte do trajeto com menos de dois minutos e (US$ 1 [continuando da primeira entrada da lista per_min_pricing] + US $2 [a segunda entrada da lista per_min_pricing]) por minuto após e incluindo dois minutos.
    • Exemplos:
      • Uma viagem de dois minutos custa US $3 + (US$ 2 + US $1) = US $6
      • Uma viagem de 2 minutos e 30 segundos custa R $3 + (R$ 2 + R $1) = R $6
      • Uma viagem de 3 minutos custa R $3 + (($2 + $1) * 2) = R $9
      • Uma viagem de 10 minutos custa R $3 + (($2 + $1) * 9) = R $30
{
  "plans": {
    "plan_id": "plan1",
    "currency": "USD",
    "price": 2,
    "per_min_pricing": [
      {
          "interval": 1,
          "rate": 1,
          "start": 1
      },
      {
          "interval": 1,
          "rate": 2,
          "start": 2
      }
    ],
  }
}

Exemplo 2 para system_pricing_plans.json

Neste exemplo, mostramos uma amostra de código para um plano de preços cobrado por uma taxa de minutos e quilômetros:

  • Especificamente, o usuário final recebe uma cobrança de US $0,25 CAD por km e US $0,50 CAD por minuto.
  • As duas taxas acontecem simultaneamente e não dependem uma da outra.
  • Portanto, uma viagem de um quilômetro que dura 10 minutos custa R $9 CAD. A divisão do custo é a seguinte:
    • US$ 3, preço base
    • US$ 0,25 * 2, cobrados uma vez no início da viagem e outra no marco de 1 km.
    • US$ 0,5 * 11, cobrado uma vez no início de cada minuto. As cobranças começam em 0 segundos, e o último intervalo é cobrado em 10 minutos.
{
  "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
    }]
  }
}

Condicionalmente obrigatório: geofencing_zones.json (sistema com e sem dock)

Consulte a especificação do GBFS conforme necessário.

Esse feed define os dados de geocercas para veículos autônomos. Os dados de geocercas incluem os limites geográficos que especificam onde os veículos podem começar e terminar a viagem, além da velocidade máxima permitida. Essa velocidade é a máxima do veículo ou o limite da via em que ele está, o que for menor. Os motoristas precisam obedecer às leis e regulamentações locais.

Usamos esses dados para que, quando um usuário pesquisar um determinado trajeto, se o fim da viagem estiver fora dos geofences específicos, o resultado de micromobilidade seja filtrado. Se as geocercas não forem fornecidas, o Google vai tratar o serviço como se não tivesse restrições de limite.

Nome do campo Tipo Requisito Descrição
geofencing_zones Objeto Obrigatório Um objeto FeatureCollection, conforme descrito pela IETF RFC 7946, é um objeto que tem um campo chamado features. O valor de features é uma matriz JSON. Cada elemento da matriz JSON é um objeto Feature.

Cada zona de geocerca, as regras e os atributos associados e as definições de FeatureCollection são especificados aqui como parte das definições do feed geofencing_zones.json.

geofencing_zones.type String Obrigatório Definido como FeatureCollection, conforme descrito pelo IETF RFC 7946.
geofencing_zones.features Matriz Obrigatório Uma matriz JSON, em que cada elemento é um objeto Feature.
geofencing_zones.features[].type String Obrigatório Definido como Feature, conforme descrito pelo IETF RFC 7946.
geofencing_zones.features[].geometry Multipolígono GeoJSON Obrigatório Um MultiPolygon GeoJSON que descreve onde as viagens não podem começar, terminar ou passar, além de outras limitações. Uma disposição no sentido horário de pontos define a área delimitada pelo polígono, enquanto uma ordem no sentido anti-horário define a área fora do polígono. Para mais informações sobre isso, consulte a regra da mão direita.
geofencing_zones.features[].properties Objeto Obrigatório Um objeto que define as permissões e limitações de viagem.
geofencing_zones.features[].properties.rules Matriz Opcional Uma matriz de objetos, em que cada objeto define uma e apenas uma regra. Se duas ou mais regras se sobrepuserem, entrarem em conflito ou tiverem algum outro tipo de conflito, a regra definida primeiro na ordem do arquivo JSON terá precedência.
geofencing_zones.features[].properties.rules[].vehicle_type_id Matriz Opcional Uma matriz de IDs de tipo de veículo, em que cada elemento é um vehicle_type_id, para o qual as restrições precisam ser aplicadas. Se nenhum vehicle_type_id for especificado, as restrições vão se aplicar a todos os tipos de veículos.
geofencing_zones.features[].properties.rules[].ride_allowed Booleano Obrigatório Se o passeio de bicicleta independente "sem dock" pode começar e terminar na zona, da seguinte forma:
  • Se o percurso de bicicleta sem dock puder começar e terminar na zona, defina como true.
  • Se o percurso de bicicleta sem dock não puder começar e terminar na zona, defina como false.

Confira abaixo um exemplo de 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]
      ]]]
    }
  }]
}

Obrigatório: station_information.json (sistema com dock)

Consulte a especificação do GBFS conforme necessário.

Este feed define as informações gerais sobre estações públicas de compartilhamento de bicicletas.

Nome do campo Tipo Requisito Descrição
stations Matriz Obrigatório Uma matriz de objetos em que cada objeto define uma única estação.
stations[].station_id String Obrigatório O identificador da estação.
stations[].name String Obrigatório O nome público da estação no idioma local da cidade em que ela está localizada. O name precisa seguir o que é usado nas placas da estação, quando disponíveis, ou ser um reflexo do local da estação usando uma rua transversal ou um ponto de referência local. Não use abreviações como "R." para "Rua", a menos que seja usado explicitamente em placas. O name precisa estar em letras maiúsculas e minúsculas, seguindo as convenções locais para nomes de lugares, e não em letras maiúsculas.
stations[].lat Latitude Obrigatório A latitude WGS 84 da estação, em formato de graus decimais.
stations[].lon Longitude Obrigatório A longitude WGS 84 da estação, em formato de graus decimais.
stations[].capacity Número inteiro não negativo Opcional Um número inteiro não negativo que representa o número total de pontos de encaixe instalados na estação, disponíveis e indisponíveis.
stations[].rental_uris Objeto Obrigatório

Um objeto JSON que contém URIs de aluguel para Android, iOS e Web nos respectivos campos.

Se esses URIs forem especificados, eles vão substituir os links diretos padrão definidos quando o provedor foi integrado.

stations[].rental_uris.android URI Obrigatório sob certas condições

Um URI que pode ser transmitido para um app Android com uma intent android.intent.action.VIEW do Android para oferecer suporte a links diretos do Android. O rental_uris fornecido precisa ser um App Link do Android para que o app de visualização não precise gerenciar manualmente o redirecionamento do usuário para a app store caso ele não tenha o aplicativo do provedor instalado.

O URI precisa ser um link direto específico para a estação individual, não uma página geral de aluguel que inclua informações de mais de uma estação. O link direto precisa levar o usuário diretamente à estação sem solicitações, páginas intersticiais ou logins. Confira se os usuários podem ver a estação mesmo que nunca tenham aberto o app.

Não é necessário que os URIs incluam o station_id da estação, desde que o parceiro tenha outros meios de identificar a estação respectiva. Por exemplo, o app de aluguel pode usar outros identificadores no URI para identificar a estação de forma exclusiva.

Se o parceiro tiver um app de aluguel para Android, esse campo será obrigatório.

Exemplo de link do app Android:

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

stations[].rental_uris.ios URI Obrigatório sob certas condições

Um URI que pode ser usado no iOS para iniciar o app de aluguel da estação. Para mais informações, consulte o artigo da Apple sobre esquemas de URL personalizados do iOS. O rental_uris fornecido precisa ser um link universal do iOS para que o app de visualização não precise gerenciar manualmente o redirecionamento do usuário para a app store caso ele não tenha o aplicativo do provedor instalado.

O URI precisa ser um link direto específico para a estação individual, não uma página geral de aluguel que inclua informações de mais de uma estação. O link direto precisa levar o usuário diretamente à estação sem solicitações, páginas intersticiais ou logins. Confira se os usuários podem ver a estação mesmo que nunca tenham aberto o app.

Não é necessário que os URIs incluam o station_id da estação. O app de aluguel pode usar outros identificadores no URI para identificar a estação de maneira exclusiva.

Se o parceiro tiver um app de aluguel para iOS, esse campo será obrigatório.

Exemplo de link universal para iOS:

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

stations[].rental_uris.web URL Opcional

Um URL que pode ser usado por um navegador da Web para mostrar mais informações sobre como alugar um veículo nessa estação.

Esse URL precisa ser um link direto específico para a estação individual, não uma página geral de aluguel que inclua informações de mais de uma estação. O link direto precisa levar o usuário diretamente à estação, sem solicitações, páginas intersticiais ou logins. Confira se os usuários podem ver a estação mesmo que nunca tenham aberto o aplicativo.

Não é necessário que os URLs incluam o station_id da estação ou sigam as convenções semânticas dos URLs de aluguel para Android ou iOS. O app de aluguel pode usar outros identificadores no URL que identificam a estação de maneira exclusiva.

Se esse campo não estiver definido, isso significa que os links diretos não são compatíveis com o navegador da Web.

Exemplo de valor:

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

Confira abaixo um exemplo de 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"
    }
  },
]

Obrigatório: station_status.json (sistema encaixado)

Consulte a especificação do GBFS conforme necessário.

Esse feed define o status atualizado das estações públicas de compartilhamento de bicicletas.

Nome do campo Tipo Requisito Descrição
stations Matriz Obrigatório Uma matriz de objetos, em que cada objeto define uma única estação.
stations[].station_id String Obrigatório O identificador da estação.
stations[].num_bikes_available Número inteiro não negativo Obrigatório

Um número inteiro não negativo que representa o número de bicicletas funcionais que estão fisicamente na estação e podem ser oferecidas para locação.

Para determinar se a estação aluga bicicletas no momento, inspecione o campo is_renting da estação e encontre um valor booleano verdadeiro.

stations[].vehicle_types_available Matriz Opcional

Uma matriz de objetos que define o número total de veículos, categorizados pelo tipo de veículo individual disponível em uma estação. Cada objeto modela o número total de veículos para o tipo de veículo associado. O número total de veículos de cada um desses objetos precisa corresponder ao valor especificado no campo num_bikes_available.

stations[].vehicle_types_available[].vehicle_type_id ID Obrigatório

O vehicle_type_id de cada tipo de veículo disponível na estação, conforme descrito em vehicle_types.json.

stations[].vehicle_types_available[].count Número inteiro não negativo Obrigatório

O número total de veículos disponíveis para o vehicle_type_id correspondente na estação, conforme definido em vehicle_types.json.

stations[].num_docks_available Número inteiro não negativo Obrigatório sob certas condições

O campo é obrigatório, a menos que a estação tenha capacidade ilimitada de encaixe. Por exemplo, as estações virtuais têm capacidade ilimitada de encaixe, e o campo não é obrigatório.

Um número inteiro não negativo que representa o número total de estações de recarga funcionais na estação que podem aceitar devoluções de veículos.

Para determinar se a estação aceita devoluções de bicicletas, inspecione o campo is_returning e encontre um valor booleano true.

stations[].is_installed Booleano Obrigatório

Um booleano que indica se a estação está na rua e instalada.

Se a estação estiver instalada na rua, defina como true.

Se a estação não estiver instalada na rua, defina como false.

stations[].is_renting Booleano Obrigatório

Um booleano que indica se é verdade que a estação aluga bicicletas no momento.

Se a estação aluga bicicletas, defina como true. Mesmo que a estação esteja vazia, se ela estiver configurada para permitir aluguéis, is_renting será definido como true.

Se a estação não alugar bicicletas no momento, defina como false.

stations[].is_returning Booleano Obrigatório

Um booleano que indica se é verdade que a estação aceita devoluções de bicicletas no momento.

Se a estação aceita devoluções de bicicletas, defina como true. Mesmo que a estação esteja cheia, mas permitiria uma devolução se não estivesse, is_returning será definido como true.

Se a estação não aceitar devoluções de bicicletas no momento, defina como false.

Confira abaixo um exemplo de 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
        },
]