You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于OpenFlight数据查询特定机场的直飞、一/两次中转航线

如何用OpenFlight数据查询特定机场的直飞、一次中转及两次中转航线

数据说明

所用routes文件包含以下字段:

  • Airline:航空公司的2位(IATA)或3位(ICAO)代码
  • Airline ID:航空公司的唯一OpenFlight标识符(关联Airline表)
  • Source airport:出发机场的3位(IATA)或4位(ICAO)代码
  • Source airport ID:出发机场的唯一OpenFlight标识符(关联Airport表)
  • Destination airport:到达机场的3位(IATA)或4位(ICAO)代码
  • Destination airport ID:到达机场的唯一OpenFlight标识符(关联Airport表)
  • Codeshare:代码共享航班标记("Y"表示代码共享,否则为空)
  • Stops:航班经停次数("0"为直飞)
  • Equipment:航班常用机型的3位代码(空格分隔)

以下以LEX机场为例,基于Pandas实现各类航线查询:


1. 直飞航线查询

先筛选出从LEX出发、无经停(Stops=0)的航线:

import pandas as pd

# 读取数据文件
routes = pd.read_csv('routes.csv')
airports = pd.read_csv('airports.csv')  # 用于后续地图可视化

# 获取LEX的直飞航线
lex_direct_routes = routes[(routes['Source airport'] == 'LEX') & (routes['Stops'] == 0)]
# 获取所有直飞目的地机场
lex_direct_destinations = lex_direct_routes['Destination airport'].unique()

2. 一次中转航线查询

逻辑:先找到LEX直飞可达的中转机场,再筛选这些机场出发的航线,排除返回LEX的无效航线:

# 第一步:获取LEX直飞的中转机场列表
lex_transfer_hubs = lex_direct_routes['Destination airport'].unique()

# 第二步:筛选所有从中转机场出发的航线
one_transfer_routes = routes[routes['Source airport'].isin(lex_transfer_hubs)]

# 过滤掉返回LEX的航线,避免循环
one_transfer_routes = one_transfer_routes[one_transfer_routes['Destination airport'] != 'LEX']

# 关联Airports表获取目的地经纬度,用于folium绘图
one_transfer_routes_with_loc = pd.merge(
    one_transfer_routes,
    airports,
    left_on='Destination airport ID',
    right_on='id',
    how='left',
    suffixes=['_route', '_airport']
)

这类航线对应路径:LEX → 中转机场 → 最终目的地


3. 两次中转航线查询

逻辑:基于一次中转的目的地作为第二次中转起点,筛选其出发航线,排除回到LEX及首次中转机场的循环航线:

# 第一步:获取一次中转的所有目的地(即第二次中转的起点机场)
second_transfer_hubs = one_transfer_routes['Destination airport'].unique()

# 第二步:筛选所有从第二次中转起点出发的航线
two_transfer_routes = routes[routes['Source airport'].isin(second_transfer_hubs)]

# 过滤掉回到LEX或首次中转机场的无效航线
excluded_airports = ['LEX'] + list(lex_transfer_hubs)
two_transfer_routes = two_transfer_routes[~two_transfer_routes['Destination airport'].isin(excluded_airports)]

# 关联Airports表获取经纬度
two_transfer_routes_with_loc = pd.merge(
    two_transfer_routes,
    airports,
    left_on='Destination airport ID',
    right_on='id',
    how='left',
    suffixes=['_route', '_airport']
)

这类航线对应路径:LEX → 中转机场1 → 中转机场2 → 最终目的地


内容的提问来源于stack exchange,提问作者Irene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:45:10