Agent 应用指南:基于 OurAirports 的中国机场设施数据可视化

一张图看懂中国 769 个机场:我用开源数据画出了全网最全的航空设施分布图

769 个航空设施,31 个省级行政区,7 种类型------从北京首都国际机场到南海三沙永兴机场,从黑龙江漠河到新疆喀什,这张交互地图把中国天空的"地面骨架"一次性铺开。

本文数据与交互地图全部基于 OurAirports 公开数据,地图渲染使用 Leaflet 轻量地图库,叠加高德瓦片作为底图(支持矢量与卫星两种图层切换),文中涉及的统计数据与下载功能均为原始 WGS84 数据,截图与地图显示为 GCJ-02 坐标(注:文中数据截至 2026 年 7 月)


一张图先睹为快

我用 Leaflet + 高德瓦片把769 个机场落到了交互地图上:769 个机场可视化

如果你曾在高德或百度地图上搜索"附近的机场",大概率只会看到一个孤零零的红色图钉。但中国的天空之下,实际铺展着 769 个航空设施------比你想象的多得多。

它们之中,有 67 个大型机场承担着绝大多数旅客运输,有 132 个直升机坪服务于应急救援与海上石油平台,有 3 个水上飞机基地藏匿于湖泊与海湾,甚至还有 2 个气球港。


为什么是 OurAirports?

OurAirports 是一个由全球用户共同维护的开放数据平台,专注于提供全球航空设施的公开数据。在这里你可以找到从国际大型机场到小型草地机场、直升机坪、水上飞机基地的详细信息。

它的核心优势可以用四个词概括: 字段全 · 清洗好 · 导出易 · 零门槛

  • 字段丰富:ICAO、IATA、GPS 代码、海拔、坐标、类型、服务状态、官网、维基百科链接等 20+ 字段,每条记录都相当完整
  • 数据清洗到位:自带中文关键词(keywords)、更新日期、score 置信度,减少二次清洗成本
  • 导出友好:支持 CSV / GeoJSON / SQL 一键下载,无需注册,也提供 API 接口供开发者集成
  • 无授权门槛:数据采用 CC0 / 公有领域授权,可直接商用、二次分发、嵌入研究论文

网站本身也是一个好用的机场查询工具:首页的搜索框可以按名称、城市、国家、IATA 代码快速定位到具体机场;全球地图上机场以标记点形式呈现,点击即可弹出详细信息页面,包含坐标、海拔、跑道数据、通信频率、用户评价等。对于视觉党来说,地图缩放探索的体验也相当不错。

对于中国研究者来说,最常用的是这个入口:

https://ourairports.com/countries/CN/

进入后右上角 "Download airports.csv" 即可一键下载 CSV。我这次拿到的数据包含 769 个中国航空设施 ,GBK 编码,字段完整到可以拿来直接做空间分析。


数据里藏着什么?

机场类型分布:中型机场占三分之一

一个反直觉的发现:大型机场只占 8.7%。超过四分之三的航空设施是中小型机场和直升机坪,它们构成了中国通用航空的"毛细血管"。

类型 数量 占比 一句话解读
中型机场 261 33.9% 支线航空主力,连通三四线城市
小型机场 237 30.8% 通用航空核心,农林勘探居多
直升机机场 132 17.2% 应急救援、海上石油、城市警务
大型机场 67 8.7% 旅客运输的"主动脉"
已关闭 67 8.7% 历史遗迹,如青岛流亭
水上飞机基地 3 0.4% 极罕见,藏于湖泊海湾
气球港 2 0.3% 小众中的小众

其中有定期航班 的设施 256 个,有 IATA 代码的 311 个------大约三分之一属于真正的"民航旅客运输"体系,其余多为通用机场、直升机坪或军民合用但无定期客运的机场。

省份 Top 10:新疆遥遥领先

省份 总数 大型机场 特点
新疆 77 2 地域广袤,通用航空需求旺盛
广东 67 5 大型机场数全国第一,大湾区枢纽
黑龙江 54 2 农林巡护为主,高密度通航
内蒙古 41 4 市市通机场,支线网络完善
四川 36 2 高原山地,机场是"生命线"
云南 35 3 旅游大省,景区标配
山东 34 0 密度最高,但无大型机场
辽宁 33 2 老工业基地,通航基础好
江苏 28 5 经济强省,大型机场密集
海南 27 1 岛屿省,机场密度极高

两个有意思的点

  1. 新疆 77 个 vs. 西藏 13 个------同为西部边疆,数量差距近 6 倍。背后是地形、人口密度、旅游开发程度的综合差异。
  2. 广东大型机场数(5 个)全国第一------广州白云、深圳宝安、珠海金湾、揭阳潮汕、湛江机场,与粤港澳大湾区的经济地位高度吻合。

一张可交互的全国地图

文字数据终归不够直观。我用 Leaflet 搭了一张交互地图,接入高德瓦片底图,把 769 个点全部铺了上去。

地图核心特性

功能 说明
按类型着色 大型红、中型蓝、小型绿、直升机紫、已关闭灰,一眼区分
按省份过滤 左侧点击省份开关,只显示目标省份
条件筛选 "仅显示有定期航班""仅显示有 IATA 码""隐藏已关闭"
实时搜索 名称、IATA、ICAO、城市、省份中文
底图切换 矢量与卫星两种高德底图随时切换
坐标转换 WGS84 -> GCJ-02 自动转换,点位精准贴合

点击任意点,弹出信息卡

右上角的 CSV / SHP 下载按钮 可导出当前筛选结果。CSV 为 UTF-8 带 BOM 格式;SHP 打包为 .zip(含 .geojson)。


技术要点备忘

1. 高德瓦片接入

Leaflet 接入高德瓦片有两种常用方式:矢量地图与卫星地图。

javascript 复制代码
// 高德矢量地图
L.tileLayer("https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}", {
  subdomains: ["1","2","3","4"]
}).addTo(map);

// 高德卫星地图
L.tileLayer("https://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}", {
  subdomains: ["1","2","3","4"]
});

子域名轮换(subdomains)是必须的,避免单域名并发限制。

2. WGS84 到 GCJ-02 的转换

高德瓦片底图是 GCJ-02(火星坐标),而 OurAirports 的 latitude_deg/longitude_deg 是标准 WGS84。如果不转换,点会整体偏北偏东,尤其是东部沿海地区,偏移可达几十到上百米。我在前端内嵌了标准转换公式,在渲染 marker 时实时转换:

javascript 复制代码
function wgs2gcj(lng, lat) { /* 标准国测局偏移算法 */ }
var gcj = wgs2gcj(airport.lon, airport.lat);
L.marker([gcj[1], gcj[0]], ...).addTo(map);

3. 数据清洗踩坑

编码坑 :原始 CSV 是 GBK 编码 ,直接用 UTF-8 读取会报错。先用 encoding='gbk' 打开,配合 errors='replace' 兜底。

中文名提取keywords 列藏着大量中文别名。我的脚本遍历 keywords 中逗号分隔的项,用中文正则 \u4e00-\u9fff 匹配,配合 机场 等关键词过滤。对于缺失的情况,构建了一个完整的 IATA -> 中文名映射字典(覆盖 200+ 个常见机场),辅以英文命名规则翻译(如 Air Base -> 空军基地),最终覆盖了约 59% 的机场。

城市名翻译 :通过 municipality 列,建立了一个英文城市 -> 中文城市的映射字典,覆盖 500+ 个常见城市/区县名。对于括号内的区县级信息(如 Shanghai (Pudong)),同样保留并翻译为"上海(浦东)"。

海拔换算 :OurAirports 只有 elevation_ft(英尺),统一换算为 elev_m(米,保留两位小数),在卡片中仅显示米。

还有一个细节:name 列中部分字符存在编码异常(如 ?rümqi),还原为 Ürümqi 后再进行翻译。

4. 已关闭机场的取舍

67 个已关闭的设施中,有不少是有历史研究价值的(例如已退役的青岛流亭机场)。在默认视图中我将其隐藏,但可以通过左侧开关单独打开,研究城市航空历史时非常有用。


数据怎么用

这套数据可以延伸出很多分析方向:

  • 城市航空可达性研究:结合机场等级、定期航班、人口数据,计算各城市航空服务半径。
  • 机场选址分析:对比大型机场周边的人口密度、GDP、交通网络,找到潜在的选址空白。
  • 区域航空不平衡研究:新疆 77 个 vs. 西藏 13 个,这种数量差异背后的政策与地理因素。
  • 历史变迁回溯 :通过 last_updatedclosed 状态,观察机场的生命周期与退役规律。

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

相关推荐
卷无止境1 小时前
pytest 从零到实战:要想代码好,测试少不了
后端·python
Maynor在掘金1 小时前
憋了两个月,Gemini 3.5 Pro 终于要来了!前端代码一次生成,传闻 7 月 17 日亮相。
github
吃糖的小孩1 小时前
# RootGraph v1.5 收工:我给 QQ 机器人补上了聊天运行时的“黑匣子”
python
hangyuekejiGEO2 小时前
临沂GEO技术服务方案对比分析
大数据·人工智能·python
xin_yao_xin2 小时前
Conda 环境的 CUDA PATH 配置指南
开发语言·python·conda·cuda
he___H2 小时前
基于LCEL的联想
开发语言·python·langchain
stereohomology2 小时前
已进入初赛提交Demo的两个项目:(2)单独html钢琴
前端·html·why不coding
想会飞的蒲公英3 小时前
TF-IDF + 随机森林中文文本分类全链路实战:从训练脚本到 Flask API + Streamlit 前端
人工智能·pytorch·python·随机森林·分类·flask·tf-idf
FriendshipT3 小时前
Ultralytics:解读C3模块
人工智能·pytorch·python·深度学习·目标检测