当前位置:首页>python>GIS数据获取 | 用Python获取加拿大蒙特利尔BIXI共享单车实时数据

GIS数据获取 | 用Python获取加拿大蒙特利尔BIXI共享单车实时数据

  • 2026-09-18 09:55:06
GIS数据获取 | 用Python获取加拿大蒙特利尔BIXI共享单车实时数据

点击上方蓝字,欢迎关注“每天学点呗”

加拿大蒙特利尔BIXI是一个覆盖广泛的公共自行车共享系统。BIXI蒙特利尔提供了官方和第三方的公开数据集,主要包括行程记录、实时站点状态、站点空间数据三类。

在GIS数据分享 | 加拿大蒙特利尔BIXI共享单车数据此文中介绍了历史行程记录数据的获取与处理。

本文主要介绍如何应用Python来获取实时数据

官方网站:https://bixi.com/en/open-data

点击后,是这样的信息

这个JSON文件按语言("en" 英语 / "fr" 法语)组织了数据源,我们看"en" 英语部分,主要是提供了5类数据的获取地址

序号数据源名称作用说明
1
system_information系统基本信息,如名称、网址、邮箱、时区等
2
station_status最重要的实时数据,包括每个站点当前可用自行车数、空车位数等
3
vehicle_types车辆类型信息,如人力车、电助力车、货运自行车等
4
system_alerts系统公告,如某区域临时关闭、恶劣天气影响等
5
station_information站点的静态信息,如站点ID、名称、地理位置(经纬度)

2、 把“GIS应用”翻译为“求职地图”

上图中我们对GIS能解决的交通问题域进行了梳理。但许多同学们仍然困惑:既然GIS的交通应用这么广泛,可以解决这么多交通问题,为什么感觉能去的对应的企业和岗位不多呢?

借助AI的回答,我们试着一起把这些“GIS应用”翻译成具体的“企业”和“岗位”。

一、获取数据

1.导入模块
import jsonimport requestsimport pandas as pdfrom datetime import datetime
2. 找到真实数据源的地址

# 1. 获取数据获取的入口地址

gbfs_url = "https://gbfs.velobixi.com/gbfs/2-2/gbfs.json?_gl=1*1ymwu1o*_gcl_au*MTQ3MzYxNjU3Mi4xNzc0NDI3MTI4*_ga*MTE0MDMzNDUzMy4xNzc0NDI3MTI5*_ga_5DRPF9PX4V*czE3NzU3MDg0MjIkbzEwJGcwJHQxNzc1NzA4NDI4JGo1NCRsMCRoMA.."

def fetch_bixi_data():print("🚴 开始获取蒙特利尔BIXI实时数据...\n")# 2. 获取目录文件,找到真实数据源的地址try:        response = requests.get(gbfs_url)        response.raise_for_status()        gbfs_data = response.json()# 我们使用英文(en)的数据源feeds = gbfs_data['data']['en']['feeds']# 从目录中提取所需数据的URLstation_info_url = Nonestation_status_url = None       for feed in feeds:if feed['name'] == 'station_information':                station_info_url = feed['url']        if feed['name'] == 'station_status':                station_status_url = feed['url']if not station_info_url or not station_status_url:            print("❌ 错误: 无法在目录中找到必要的API地址。")        return    except Exception as e:    print(f"❌ 获取目录文件失败: {e}")return
3.获取并保存站点基本信息
#  获取站点基本信息
 (名称, 经纬度, 容量等)try:    info_resp = requests.get(station_info_url)    info_resp.raise_for_status()# 提取数据stations_info = info_resp.json()['data']['stations']    stations_dict = {s['station_id']: s for s in stations_info}    print(f"✅ 成功获取站点基本信息: 共 {len(stations_dict)} 个站点")# 转换为 DataFrame 并保存为 CSVtimestamp = datetime.now().strftime("%Y%m%d_%H%M%S")    csv_filename = f"station_information_{timestamp}.csv"df_stations = pd.DataFrame(stations_info)    df_stations.to_csv(csv_filename, index=False, encoding='utf-8-sig')    print(f"💾 站点信息已保存到 CSV: {csv_filename}")    except Exception as e:    print(f"❌ 获取站点基本信息失败: {e}")return
4. 获取站点实时状态
# 获取站点实时状态try:    status_resp = requests.get(station_status_url)    status_resp.raise_for_status()# 提取数据stations_status = status_resp.json()['data']['stations']    print(f"✅ 成功获取站点实时状态: 共 {len(stations_status)} 个站点有状态更新")# 转换为 DataFrame 并保存为 CSVtimestamp = datetime.now().strftime("%Y%m%d_%H%M%S")    csv_filename = f"station_status_{timestamp}.csv"df_status = pd.DataFrame(stations_status)    df_status.to_csv(csv_filename, index=False, encoding='utf-8-sig')    print(f"💾 站点状态已保存到 CSV: {csv_filename}")    except Exception as b:    print(f"❌ 获取站点实时状态失败: {e}")return
5.程序入口
if __name__ == "__main__":    fetch_bixi_data()

2、 把“GIS应用”翻译为“求职地图”

上图中我们对GIS能解决的交通问题域进行了梳理。但许多同学们仍然困惑:既然GIS的交通应用这么广泛,可以解决这么多交通问题,为什么感觉能去的对应的企业和岗位不多呢?

借助AI的回答,我们试着一起把这些“GIS应用”翻译成具体的“企业”和“岗位”。

2、 把“GIS应用”翻译为“求职地图”

上图中我们对GIS能解决的交通问题域进行了梳理。但许多同学们仍然困惑:既然GIS的交通应用这么广泛,可以解决这么多交通问题,为什么感觉能去的对应的企业和岗位不多呢?

借助AI的回答,我们试着一起把这些“GIS应用”翻译成具体的“企业”和“岗位”。

二、站点基本信息数据的处理与查看

 在ArcGIS Pro中将station_information.CSV文件转为要素类,并查看

共 979 个站点:

属性表每个字段解释如下:

序号
类别
主要字段

1

基础标识与地理信息

  • station_id: 站点唯一标识符(字符串),用于与其他数据表(如实时状态表)关联。

  • external_id:外部系统标识符,通常用于数据迁移或与遗留系统对接。

  • lat:站点的纬度坐标(WGS84坐标系)。

  • lon:站点的经度坐标(WGS84坐标系),负值表示西经。

2

站点名称与标识

  • name:站点公共名称,通常以附近两条街道的交叉路口命名。

  • short_name:站点的简短名称或备选标识符,用于内部管理或小屏幕显示。

3

运营与配置信息

  • rental_methods:该站点支持的租车支付方式,如 CREDITCARD(信用卡)和 KEY(会员卡/APP扫码)。

  • capacity:站点总锁车桩(dock)数量,包括可用和不可用的。

  • electric_bike_surcharge_waiver 布尔值,True 表示在该站点租用电动自行车无需支付额外附加费。

  • is_charging:布尔值,True 表示此站点支持为电动车辆充电。

  • eightd_has_key_dispenser:布尔值,True 表示站点配有钥匙分发或激活设备。

  • has_kiosk:布尔值,True 表示此站点有信息查询或支付功能的终端机(kiosk)。

按容量染色 - 展示站点规模分布,选择 分级色彩

容量分布直方图:右键点图层 → 创建图表 → 直方图

2、 把“GIS应用”翻译为“求职地图”

上图中我们对GIS能解决的交通问题域进行了梳理。但许多同学们仍然困惑:既然GIS的交通应用这么广泛,可以解决这么多交通问题,为什么感觉能去的对应的企业和岗位不多呢?

借助AI的回答,我们试着一起把这些“GIS应用”翻译成具体的“企业”和“岗位”。

2、 把“GIS应用”翻译为“求职地图”

上图中我们对GIS能解决的交通问题域进行了梳理。但许多同学们仍然困惑:既然GIS的交通应用这么广泛,可以解决这么多交通问题,为什么感觉能去的对应的企业和岗位不多呢?

借助AI的回答,我们试着一起把这些“GIS应用”翻译成具体的“企业”和“岗位”。

三、站点实时数据的处理与查看

 在ArcGIS Pro中加载station_information.CSV文件查看

属性表每个字段解释如下:

序号
类别
主要字段

1

基础标识信息

  • station_id:站点唯一标识符(字符串),用于与 station_information 表中的站点基本信息进行关联匹配。

  • last_reported:最后一次数据更新的Unix时间戳(整数),表示该站点状态数据的最后上报时间。

2

车辆可用信息

  • num_bikes_available:当前站点可正常租用的自行车总数(整数),包括普通自行车和电动自行车(如有)。

  • num_bikes_disabled:当前站点故障或损坏、不可租用的自行车数量(整数),需要维修。

  • num_ebikes_available:当前站点可租用的电动自行车数量(整数),通常包含在 num_bikes_available 总量中,是其中的一个子集。

3

车位可用信息

  • num_docks_available:当前站点空闲可用、可还车的锁车桩(dock)数量(整数)。

  • num_docks_disabled:当前站点故障或损坏、不可使用的锁车桩数量(整数)。

4

服务状态信息

  • is_installed:站点设备是否已安装(布尔值,1/True 或 0/False),若为 False 表示站点尚未部署或已拆除。

  • is_renting:站点当前是否允许租车(出借车辆),若为 False 表示用户无法从该站点取车。

  • is_returning:站点当前是否允许还车(归还车辆),若为 False 表示用户无法在该站点还车。

5

车辆类型明细

  • vehicle_types_available:该站点当前可用车辆的详细分类列表(嵌套数据),通常包含每个车型的具体可用数量。例如:[{"vehicle_type_id": "bike", "count": 8}, {"vehicle_type_id": "ebike", "count": 2}]

这个csv文件不带坐标数据,需要与站点坐标文件进行关联

然后基于关联后的csv文件,转要素点

观察“可用车辆数”:选择 分级色彩

字段选择 num_bikes_available

使用图表功能:  条形图(或柱状图)、堆叠图

同时查看“容量”、”可用车辆数”

直方图:宏观了解所有站点的车辆配置情况,比如大多数站点的车辆数集中在哪个区间。

增加一个字段,填充率:

0 到 1(或 0% 到 100%)
0 = 全空,1 = 全满

散点图:了解容量(capacity) 与 填充率(fill_rate) 之间的关系

从下图中可以看出:共享单车站点的使用率(填充率)与站点规模(容量)没有直接关系。可能与位置和用户需求、车辆运营调度策略有关,可以做进一步分析论证。

工程文件(*.aprx)

  • 工程文件.aprx:是工程的配置文件,保存了工程的结构和设置,但不包含数据。数据存储在MyProject36.gdb文件夹中。

源码获取:关注公众号

后台发送

BIXI源码

END
喜欢我,就请给我点个赞和推荐呗

最新文章

随机文章