August 5, 2020 5:20 pm

GBFS ahora es totalmente compatible con sistemas sin estación 🛴👏

**Extra! Extra! Since this article we’ve made a lot of changes! We are thrilled to say that not only have we made v2.1 official, but also v2.2! For more information on the most recent version of GBFS, pop over to our newest article on v2.2 (also available in Spanish and French)**

¿Recuerda cuando la micromovilidad compartida era sinónimo de esto?👇

Foto de Velo Antwerpen Bike Share. Imagen: Heidi Guenin

GBFS, el formato más común para compartir datos de micromovilidad para aplicaciones móviles, se creó en ese momento, e hizo un buen trabajo al representar la información sobre sistema de alquiler de bicicletas con estación.

Sin embargo, hoy en día, la micromovilidad compartida incluye más modos y diferentes tipos de operaciones, como bicicletas electricas y patinetes en free floating (sin estación):

Foto de patinetes en free floating. Imagen: Heidi Guenin & Foto de bicicletas eléctricas Wheels. Imagen: The Verge

GBFS v2.1-RC (un “release candidate” o versión beta para el lanzamiento) permite compartir información sobre estas nuevas opciones de transporte, incluida información sobre los vehículos y dónde los viajeros pueden usarlos y devolverlos. GBFS v2.1-RC incluye las mejoras que se hicieron con v2.0, que puede leer aquí.

Tipos de vehículos 🚲 🛴 🛵

GBFS v2.1-RC permite a los proveedores de movilidad compartida poner a disposición información sobre el tipo de vehículo disponible, ya sea una bicicleta, patinete, scooter, automóvil u otro modo de transporte. v2.1-RC también ofrece información sobre cómo se alimenta un vehículo (propulsado por humanos, asistencia eléctrica, eléctrica o térmica) y qué tan lejos puede viajar un vehículo con una carga completa o un tanque de gasolina.

Google Maps screenshot of trip details using a Lime Electric Scooter with a 20.0 mi range *

Además, v2.1-RC propone información sobre qué tipos de vehículos se pueden estacionar en estaciones específicas.

Estas adiciones permiten a las aplicaciones de terceros proporcionar a los viajeros información sobre toda la gama de vehículos disponibles. La representación de los diferentes tipos de vehículos y la información sobre la distancia que puede recorrer el vehículo probablemente difieran de una aplicación a otra.

Consulte la sección “Ejemplos de datos” a continuación si desea profundizar en los detalles.

Sistemas sin estación

Cuando los viajeros alquilan vehículos compartidos sin estación (patinetes y bicis), necesitan saber dónde se les permite usar y devolver el vehículo 🗺️. GBFS v2.1-RC proporciona una forma de representar estaciones virtuales: un área limitada sin ninguna infraestructura física donde los vehículos pueden ser depositados o recuperados.

Cuando las capturas de pantalla muestran geovallas y definiciones del tipo de vehículo, las aplicaciones utilizan soluciones patentadas, que se espera que hagan la transición al formato estandarizado v2.1-RC en el futuro.

Foto de la estación virtual de obike. Imagen: @dcrainmakerblog. Foto del aparcamiento de patinetes. Imagen: Heidi Guenin.

Las estaciones virtuales, así como las áreas permitidas, se representan gracias al “geofencing” (geovalla) en GBFS v2.1-RC. El “geofencing” utiliza perímetros virtuales para definir áreas geográficas del mundo real. Además de mostrar estaciones virtuales, permite también representar otra información, como las reglas de acceso o límites de velocidad aplicados a determinadas áreas geográficas.

Captura de pantalla de la applicación de Lime con “No Ride Zone”

Consulte la sección “Ejemplos de datos” a continuación si desea profundizar en los detalles.

Tenga en cuenta que el objetivo de las geofvallas en GBFS v2.1-RC es proporcionar a los viajeros información que puedan usar al alquilar vehículos, no para usarse en el proceso regulatorio. Se creó una especificación de datos diferente, MDS, para cumplir esta función reguladora.

Próximas etapas 🔜

El siguiente paso para GBFS v2.1-RC es que tanto un productor (como un operador de bicicletas compartidas), y un consumidor (como una aplicación móvil), implementen estas nuevas funciones. Según el proceso de gobernanza de GBFS (en inglés), en cuanto un productor y un consumidor hayan implementado estos nuevos campos de datos, la especificación v2.1-RC puede salir oficialmente del estado “beta” y convertirse en v2.1. 💪

Claro, GBFS tiene “bikeshare” en el nombre, pero la comunidad de movilidad compartida ha estado pidiendo que GBFS admita otros modos de transporte desde 2017. Con la adición de “car” (coche) a los tipos de vehículos disponibles, hemos abierto la puerta a admitir información del coche compartido en el futuro. Además, estamos trabajando para mejorar la información de precios, para representar sistemas adaptables de bicicletas compartidas e identificar las prioridades de la comunidad para futuras mejoras en la definición del vehículo (como accesorios del vehículo, especificaciones del motor y mejoras en los formularios). Únase a la discusión siguiendo nuestro trabajo en el repositorio de GBFS GitHub o participe en el canal slack GBFS de MobilityData. (todos enlaces están en inglés)

¿Está interesado en ver cómo se agregan las funciones nuevas de GBFS v2.1-RC a los feeds de GBFS? Mire los ejemplos a continuación.

⬇️

Ejemplos de datos

Las definiciones de vehículos

Aunque GBFS v2.0 técnicamente no tenía una forma de representar patinetes, los operadores de patinete publicaron datos a través de GBFS, a veces solo señalando “scooter” en el nombre y proporcionando un feed de GBFS por separado.

Ahora, con la introducción de las definiciones de vehículos, se puede usar un feed GBFS para representar la gama completa de tipos de vehículos que ofrece un operador. En el siguiente ejemplo, hay cuatro tipos de vehículos definidos en vehicle_types.json: una bicicleta de propulsión humana, un patinete eléctrico que puede recorrer 12,345 metros con una carga completa, un ciclomotor eléctrico que puede recorrer 20,891 metros con una carga completa, y un automóvil con motor térmico que puede viajar 523,992 metros con el tanque lleno de gasolina.

vehicle_types.json

{
  "last_updated": 1434054678,
  "ttl": 0,
  "version": "v2.1-RC",
  "data": {
    "vehicle_types": [
      {
        "vehicle_type_id": "standardbike",
        "form_factor": "bicycle",
        "propulsion_type": "human",
        "name": "Example Basic Bike"
      },
      {
        "vehicle_type_id": "escoot3",
        "form_factor": "scooter",
        "propulsion_type": "electric",
        "name": "Example E-scooter V2",
        "max_range_meters": 12345
      }, 
      {
        "vehicle_type_id": "moped1",
        "form_factor": "moped",
        "propulsion_type": "electric",
        "name": "Electric Moped",
        "max_range_meters": 20891
      },
      {
        "vehicle_type_id": "car1",
        "form_factor": "car",
        "propulsion_type": "combustion",
        "name": "Four-door Sedan",
        "max_range_meters": 523992
      }
    ]
  }
}

Para permitir que los operadores especifiquen la capacidad del vehículo de cada estación, incluso por tipo de vehículo, se han agregado nuevos campos a station_information.json.

En el ejemplo siguiente, la estación 13, ubicada en SE Stark y SE 12th Ave en Portland, Oregon, es una estación con infraestructura física y servicios de valet. La estación tiene capacidad para 18 vehículos en total, incluidos tres de los cuatro tipos de vehículos diferentes que se ofrecen dentro del sistema: diez espacios para bicicletas estándar, seis espacios para patinetes eléctricos y dos espacios para scooter y motos.

station_information.json

{
  ...
  "stations": [ {
      "station_id": "station13",
      "station_name": "SE Stark & SE 12th",
      "lat": 45.5194,
      "lon": -122.6535,
      "is_virtual_station": false,
      "capacity": 18,
      "is_valet_station": true,
      "vehicle_type_capacity": {
        "standardbike": 10,
        "escoot3": 6,
        "moped1": 2,  
        "car1": 0
      }
    }
   ]
  }

station_status.json también se ha actualizado para incluir información en tiempo real sobre la disponibilidad del tipo de vehículo para las estaciones, que incluye:

  • El número de plazas disponibles por tipo de vehículo y
  • Tipo y rango actual de vehículos en la estación y si están reservados o deshabilitados.

En el siguiente ejemplo, station1 tiene tres plazas disponibles. Hay dos vehículos únicos en la estación que están disponibles para alquilar: una bicicleta estándar y un patinete eléctrico. El scooter eléctrico, bike_id pqr678, tiene un alcance de 5,432 metros para su nivel de potencia actual. Finalmente, esta estación tiene dos tipos de plazas diferentes; actualmente tiene dos plazas disponibles para bicicletas estándar y uno para un patinete eléctrico.

station_status.json

{
  "last_updated": 1434054678,
  "ttl": 0,
  "version": "v2.1-RC",
  "data": {
    "stations": [
      {
        "station_id": "station1",
        "...”,
        "num_docks_available": 3,
        "vehicles": [{
          "bike_id": "mno345",
          "...”,
          "vehicle_type_id": "standardbike"
        }, {
          "bike_id": "pqr678",
          "is_reserved": false,
          "is_disabled": false,
          "vehicle_type_id": "escoot3",
          "current_range_meters": 5432
        }],
        "vehicle_docks_available": [{
          "vehicle_type_ids": ["standardbike"],
          "count": 2
        }, {
          "vehicle_type_ids": ["escoot3"],
          "count": 1
        }]
      },

station2 tiene ocho plazas operativas. Hay dos vehículos en la estación disponibles para alquiler. Ambos vehículos en la estación 2 tienen un alcance definido, el ciclomotor eléctrico que tiene un alcance actual de 1,234 metros y el patinete eléctrico que tiene un alcance actual de 4,321 metros. A diferencia de la estación 1, todos los tipos de vehículos se pueden devolver a cualquiera plaza de esta estación porque el campo vehicle_docks_available no está incluido.

station_status.json (cont)

{
        "station_id": "station2",
        "is_installed": true,
        "is_renting": true,
        "is_returning": true,
        "last_reported": 1434054678,
        "num_docks_available": 8,
        "vehicles": [{
          "bike_id": "stu901",
          "is_reserved": false,
          "is_disabled": false,
          "vehicle_type_id": "moped1",
          "current_range_meters": 1234
        }, {
          "bike_id": "vwx234",
          "is_reserved": false,
          "is_disabled": false,
          "vehicle_type_id": "escoot3",
          "current_range_meters": 4321
        }]
      }
    ]
  }
}

free_bike_status.json se ha actualizado para incluir información en tiempo real sobre los tipos de vehículos sin estación:

  • La identificación del tipo de vehículo,
  • La última vez que se informó del estado del vehículo al backend del operador, y
  • El rango actual en metros.

En este ejemplo, hay dos vehículos disponibles: una bicicleta estándar y un patinete eléctrico. El patinete tiene un alcance actual de 6,543 metros, y ambos vehículos informaron por última vez al back-end de los operadores el jueves 11 de junio de 2015, 8:31:27 p.m., GMT.

free_bike_status.json

{
  "last_updated": 1434054678,
  "ttl": 0,
  "version": "v2.1-RC",
  "data": {
    "bikes": [
      {
        "bike_id": "ghi789",
        "last_reported": 1434054678,
        "lat": 12.3499,
        "lon": 56.7899,
        "is_reserved": false,
        "is_disabled": false,
        "vehicle_type_id": "standardbike"
      }, {
        "bike_id": "jkl012",
        "last_reported": 1434054687,
        "lat": 12.3499,
        "lon": 56.7899,
        "is_reserved": false,
        "is_disabled": false,
        "vehicle_type_id": "escoot3",
        "current_range_meters": 6543
      }
    ]
  }
}

Geovalla y soporte de sistema sin estación

Las estaciones en GBFS v1.0 estaban representadas por latitud y longitud, y v2.1-RC agrega la representación de estaciones virtuales a través de nueva información en station_information.json, que incluye:

  • si una estación es virtual,
  • el área de una estación virtual, y
  • si una estación es una estación de valet.

En el siguiente ejemplo, la estación no incluye infraestructura física o servicios de valet. Es una estación virtual con espacio para 16 vehículos: ocho bicicletas estándar y ocho patinetes eléctricos.

station_information.json

{
  ...
  "stations": [
    {
      "station_id": "station12",
      "station_name": "SE Belmont & SE 10th",
      "is_valet_station": false
      "is_virtual_station": true,
      "station_area": {
        "type": "MultiPolygon",
        "coordinates": [ [
          [
            [
              -122.6559,
              45.5163
            ], 
            [
              -122.6557,
              45.5163
            ],
            [
              -122.6557,
              45.5164
            ],
            [
              -122.6559,
              45.5164
            ],
            [
              -122.6559,
              45.5163
            ]
          ]
        ] ]
      },
      "capacity": 16,
      "vehicle_capacity": {
        "standardbike": 8,
        "escoot3": 8,
        "moped1": 0,
        "car1": 0
      }
    }
   ]
 }

La adición del soporte de geovalla en v2.1-RC también permite la representación de dónde los viajeros pueden usar y devolver vehículos.📍

geofencing_zones.json es un nuevo archivo que incluye:

  • El nombre y la geografía de la zona geovallada (definida como una función GeoJSON FeatureCollection)

Las limitaciones de la zona geovallada, definidas en el campo properties, que incluyen:

  • el nombre y las horas de inicio y finalización de las limitaciones,
  • los tipos de vehículos a los que se aplica una limitación,
  • si un viaje puede comenzar y detenerse en la zona,
  • si se permite que un viaje pase por la zona, y
  • la velocidad máxima permitida en la zona.

En el ejemplo a continuación, se define un área llamada “NE 24th / NE Knott” en la que los ciclomotores eléctricos y los automóviles con motor térmico no pueden comenzar o finalizar un viaje, pero pueden viajar en la zona, a una velocidad máxima de 10 km / hora. Estas reglas son válidas desde el sábado 4 de julio de 2020 4:00:00 GMT hasta el domingo 5 de julio de 2020 12:01:00 GMT.

geofencing_zones.json

{
  "geofencing_zones": [
    {
      "type": "FeatureCollection",
      "features": [
        {
          "type": "Feature",
          "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
              [
                [
                  [
                    -122.578067779541,
                    45.562982266067905
                  ],
                  [
                    -122.66183853149414,
                    45.562741896778604
                  ],
                  [
                    -122.66115188598633,
                    45.50454228987185
                  ],
                  [
                    -122.57892608642578,
                    45.50466259908575
                  ],
                  [
                    -122.578067779541,
                    45.562982266067905
                  ]
                ]
              ],
              [
                [
                  [
                    -122.65068054199219,
                    45.54819764153181
                  ],
                  [
                    -122.65085220336914,
                    45.534731835669675
                  ],
                  [
                    -122.63093948364258,
                    45.53521281284293
                  ],
                  [
                    -122.63042449951172,
                    45.54819764153181
                  ],
                  [
                    -122.65068054199219,
                    45.54819764153181
                  ]
                ]
              ]
            ]
          },
          "properties": {
            "name": "NE 24th/NE Knott",
            "start": 1593878400,
            "end": 1593907260,
            "rules": {
              "vehicle_type_id": [
                "moped1",
                "car1"
              ],
              "ride_allowed": false,
              "ride_through_allowed": true,
              "maximum_speed_kph": 10
            }
          }
        }
      ]
    }
  ]
}