General Bikeshare Feed Specification (GBFS)
R gbfs
NBSA system.csv
install_github("ds-civic-data/gbfs")
library(gbfs)
library(tidyverse)
library(ggmap)
withr::with_dir(tempdir(), get_gbfs(city = "https://gbfs.fordgobike.com/gbfs/gbfs.json", feeds = "all", directory = "pdx_gbfs"))
withr::with_dir(tempdir(), list.files("pdx_gbfs"))
[1] "station_information.rds" "station_status.rds" "system_alerts.rds" "system_information.rds"
[5] "system_regions.rds"
station_information <- withr::with_dir(tempdir(), readRDS("pdx_gbfs/station_information.rds"))
head(station_information)
nrow(station_information)
[1] 302
station_information %>% ggplot(aes(x=lon, y=lat, color=region_id)) + geom_point()

bayarea <- get_map(location = "hayward")
Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=hayward&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=hayward&sensor=false
ggmap(bayarea) +
geom_point(data = station_information, aes(x = lon, y = lat, color = region_id, alpha = 0.1), size = 2, shape = 19) # 21

station_status <- withr::with_dir(tempdir(), readRDS("pdx_gbfs/station_status.rds"))
head(station_status)
nrow(station_status)
[1] 604
system_alerts <- withr::with_dir(tempdir(), readRDS("pdx_gbfs/system_alerts.rds"))
head(system_alerts)
list()
nrow(system_alerts)
NULL
system_information <- withr::with_dir(tempdir(), readRDS("pdx_gbfs/system_information.rds"))
head(system_information)
nrow(system_information)
[1] 1
system_regions <- withr::with_dir(tempdir(), readRDS("pdx_gbfs/system_regions.rds"))
head(system_regions)
nrow(system_regions)
[1] 6
LS0tDQp0aXRsZTogIkZvcmQgR28gQmlrZSBBUEkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpbR2VuZXJhbCBCaWtlc2hhcmUgRmVlZCBTcGVjaWZpY2F0aW9uIChHQkZTKV0oaHR0cHM6Ly9naXRodWIuY29tL05BQlNBL2diZnMvYmxvYi9tYXN0ZXIvZ2Jmcy5tZCkNCg0KW1IgZ2Jmc10oaHR0cHM6Ly9naXRodWIuY29tL2RzLWNpdmljLWRhdGEvZ2JmcykNCg0KW05CU0FdKGh0dHBzOi8vZ2l0aHViLmNvbS9OQUJTQSkgW3N5c3RlbS5jc3ZdKGh0dHBzOi8vZ2l0aHViLmNvbS9OQUJTQS9nYmZzL2Jsb2IvbWFzdGVyL3N5c3RlbXMuY3N2KQ0KDQoNCg0KYGBge3IsIGV2YWw9RkFMU0V9DQppbnN0YWxsX2dpdGh1YigiZHMtY2l2aWMtZGF0YS9nYmZzIikNCmBgYA0KDQpgYGB7cn0NCmxpYnJhcnkoZ2JmcykNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnZ21hcCkNCmBgYA0KDQpgYGB7cn0NCndpdGhyOjp3aXRoX2Rpcih0ZW1wZGlyKCksIGdldF9nYmZzKGNpdHkgPSAiaHR0cHM6Ly9nYmZzLmZvcmRnb2Jpa2UuY29tL2diZnMvZ2Jmcy5qc29uIiwgZmVlZHMgPSAiYWxsIiwgZGlyZWN0b3J5ID0gInBkeF9nYmZzIikpDQoNCndpdGhyOjp3aXRoX2Rpcih0ZW1wZGlyKCksIGxpc3QuZmlsZXMoInBkeF9nYmZzIikpDQpgYGANCg0KYGBge3J9DQpzdGF0aW9uX2luZm9ybWF0aW9uIDwtIHdpdGhyOjp3aXRoX2Rpcih0ZW1wZGlyKCksIHJlYWRSRFMoInBkeF9nYmZzL3N0YXRpb25faW5mb3JtYXRpb24ucmRzIikpDQpoZWFkKHN0YXRpb25faW5mb3JtYXRpb24pDQpucm93KHN0YXRpb25faW5mb3JtYXRpb24pDQoNCg0Kc3RhdGlvbl9pbmZvcm1hdGlvbiAlPiUgZ2dwbG90KGFlcyh4PWxvbiwgeT1sYXQsIGNvbG9yPXJlZ2lvbl9pZCkpICsgZ2VvbV9wb2ludCgpDQoNCmJheWFyZWEgPC0gZ2V0X21hcChsb2NhdGlvbiA9ICJoYXl3YXJkIikNCg0KZ2dtYXAoYmF5YXJlYSkgKw0KICBnZW9tX3BvaW50KGRhdGEgPSBzdGF0aW9uX2luZm9ybWF0aW9uLCBhZXMoeCA9IGxvbiwgeSA9IGxhdCwgIGNvbG9yICA9IHJlZ2lvbl9pZCwgYWxwaGEgPSAwLjEpLCBzaXplID0gMiwgc2hhcGUgPSAxOSkgICMgMjENCg0KYGBgDQoNCmBgYHtyfQ0Kc3RhdGlvbl9zdGF0dXMgPC0gd2l0aHI6OndpdGhfZGlyKHRlbXBkaXIoKSwgcmVhZFJEUygicGR4X2diZnMvc3RhdGlvbl9zdGF0dXMucmRzIikpDQpoZWFkKHN0YXRpb25fc3RhdHVzKQ0KbnJvdyhzdGF0aW9uX3N0YXR1cykNCmBgYA0KDQpgYGB7cn0NCnN5c3RlbV9hbGVydHMgPC0gd2l0aHI6OndpdGhfZGlyKHRlbXBkaXIoKSwgcmVhZFJEUygicGR4X2diZnMvc3lzdGVtX2FsZXJ0cy5yZHMiKSkNCmhlYWQoc3lzdGVtX2FsZXJ0cykNCm5yb3coc3lzdGVtX2FsZXJ0cykNCmBgYA0KDQpgYGB7cn0NCnN5c3RlbV9pbmZvcm1hdGlvbiA8LSB3aXRocjo6d2l0aF9kaXIodGVtcGRpcigpLCByZWFkUkRTKCJwZHhfZ2Jmcy9zeXN0ZW1faW5mb3JtYXRpb24ucmRzIikpDQpoZWFkKHN5c3RlbV9pbmZvcm1hdGlvbikNCm5yb3coc3lzdGVtX2luZm9ybWF0aW9uKQ0KYGBgDQoNCmBgYHtyfQ0Kc3lzdGVtX3JlZ2lvbnMgPC0gd2l0aHI6OndpdGhfZGlyKHRlbXBkaXIoKSwgcmVhZFJEUygicGR4X2diZnMvc3lzdGVtX3JlZ2lvbnMucmRzIikpDQpoZWFkKHN5c3RlbV9yZWdpb25zKQ0KbnJvdyhzeXN0ZW1fcmVnaW9ucykNCmBgYA0KDQoNCg==