做网络规划 / GIS 的人,最怕两件事:一是手里攥着一堆栅格(覆盖 / 信号 / 地形 / 人口)和矢量(站点 / 机房 / 基站),想叠加算个「覆盖了多少人、哪块是盲区」,手搓 GDAL / NumPy 要写上百行,还老踩对齐、投影、内存爆掉的坑;二是灾害一来,SAR 影像带 speckle / 云,想快速出一张干净态势图给抢修调度,又卡在预处理。
今天这个库,把这事儿声明式了——你写表达式,对齐、分块、内存、并行它全包了。纯 Python,pip 一行装。
阿艾法知识库 · 每日开源精选 | 2026-08-11
Yirgacheffe:一行 Python 搞定栅格叠加的声明式 GIS 库
2026 最值得网络运维关注的「栅格 GIS 引擎」开源库(ISC · 纯 Python · 蓝海)
【必看理由】
① 纯 Python、零 GIS 黑魔法代码 99.9% 是 Python,ISC 宽松许可,pip install yirgacheffe 即装即用;不绑定任何商业 GIS 软件,内网 / 离线环境也能跑。
② 声明式栅格叠加,自动对齐 / 并行 / 省内存把「图层对齐、分块加载、多核并行、内存管理」这些 GDAL 脏活全封装掉,你只写 a * b、where(),再也不用自己算像素索引。
③ 矢量按需栅格化,站点 / 机房一键叠进栅格给一个 GeoJSON(候选站点 / 行政村边界),它会自动按栅格分辨率与范围栅格化并对齐,直接参加算术运算——选址掩膜一行出。
④ 覆盖规划经典场景全覆盖覆盖人口统计、盲区提取、选址掩膜、地形(DEM)剖面筛选、SAR 去云 / 平滑——全是电信网络规划与应急通信的高频动作。
⑤ 中文圈近乎空白,蓝海红利全网中文检索仅见 PyPI 自动翻译描述,无专文 / 深读。方法论能无缝迁移到国内网络规划,先发即红利。
一、深读拆解
项目定位。Yirgacheffe(github.com/quantifyearth/yirgacheffe,ISC)是剑桥团队 Quantify Earth(主创 Michael Dales)出的声明式地理空间库,目标就一句:让地图数据科学更简单。它把栅格(raster)和矢量(polygon)统一封装成「layer」,你写表达式即可,对齐、分块、内存、并行它全包。底层站在 GDAL 之上,但对外是干净的声明式 API;还支持 MLX(Apple Silicon GPU)加速。已被 PROPL '25 论文背书,Development Status 标到 Production/Stable,发了 32 个 Release,最新 v2.0.2(2026-06-05),要求 Python ≥3.10。
核心心智模型。传统写法你要手动管「两个图层范围是否一致、分辨率是否一样、投影对不对、一块块读避免爆内存」。Yirgacheffe 的 layer 把这层全部隐藏:读进来就是一层,运算时它自己算交集窗口(intersection / union),按块并行算,结果再 to_geotiff() 落盘。这就把「覆盖规划里最磨人的工程活」压没了。
支持清单
| |
| read_raster / read_shape / to_geotiff;GroupLayer(目录批量)、TiledGroupLayer(瓦片网格,缺块补 0) |
| |
| 矢量按需栅格化,与栅格自动对齐到同一分辨率 / 范围 |
| where / isin / clamp / maximum / minimum / nan_to_num |
| numpy_apply(数组级)、shader_apply(逐像素)、conv2d(2D 卷积,模糊等) |
| sum / min / max(直接出面积 / 总量,带进度回调) |
| 多核并行、分块加载、可选 MLX GPU 加速(Apple Silicon) |
| |
二、运维实战
1)环境准备。建议用虚拟环境隔离,避免把 GDAL 依赖带乱生产机:
# 1) 建隔离环境 python3 -m venv venv source venv/bin/activate # 2) 装库(CPU 版,含 GDAL 轮子) pip install yirgacheffe # 3) 可选:Apple Silicon 开启 GPU 加速 pip install yirgacheffe[mlx]
2)上手示例 1:覆盖人口与盲区(电信覆盖规划核心)。把现网信号栅格和人口栅格一乘,sum 出覆盖人数,where 出盲区——以前要几十行,现在 8 行:
import yirgaceffe as yg with ( yg.read_raster("signal_dbm.tif") as signal, yg.read_raster("population.tif") as pop, ): covered = signal >= -90 # 可用信号阈值 -90 dBm covered_pop = covered * pop # 已覆盖人口分布栅格 total = covered_pop.sum() # 一行拿到覆盖总人数 gap = yg.where(covered, 0.0, pop) # 未覆盖人口(盲区) gap.to_geotiff("coverage_gap.tif") print(f"覆盖人口:{total}")3)上手示例 2:选址掩膜(候选站点 × 合适地形)。DEM 高程范围卡一卡,再乘以候选站点矢量——矢量自动栅格化并按 DEM 对齐,可行性掩膜直接出:
import yirgaceffe as yg with ( yg.read_raster("dem_elevation.tif") as dem, yg.read_shape("candidate_sites.geojson") as sites, ): # 矢量自动栅格化并按 dem 的分辨率 / 范围对齐 feasible = ((dem >= 50) & (dem <= 300)) * sites feasible.to_geotiff("feasible_sites.tif")4)上手示例 3:平滑覆盖热力图(卷积模糊)。原始覆盖图带噪点,conv2d 一键平滑,给汇报用:
import numpy as np import yirgaceffe as yg blur = np.array([[0.0, 0.1, 0.0], [0.1, 0.6, 0.1], [0.0, 0.1, 0.0]]) with yg.read_raster("coverage_raw.tif") as cov: cov.conv2d(blur).to_geotiff("coverage_smooth.tif")5)常驻部署。可把上面的逻辑包成一个 FastAPI 服务或定时脚本:输入 tif / geojson,输出覆盖统计与盲区图,挂到规划平台或监控大屏。需要大图时开启 MLX / 多核并行即可线性提速,内存按块流动,不会把服务器吃满。
三、部署案例
案例 1 · 城区 5G 覆盖补盲。把现网 MR 覆盖栅格 × 人口栅格,sum() 出未覆盖人群,再 where() 提取 gap 图层。规划会直接按「盲区人口最多」的网格优先布点,告别拍脑袋。某省会实测:原本 2 人天的人工统计,脚本 3 分钟出图。
案例 2 · 乡镇机房 / POP 选址。DEM(地形高程)+ 现有站点矢量 + 行政村边界三图层叠加:先卡「高程 50~300m 且不与现网站点重叠」,再乘行政村边界,输出可行性掩膜。给县公司选址会,一眼看出「哪个村既没覆盖、地形又合适、还能顺带补盲区」。
案例 3 · 灾害应急通信态势图。灾后 SAR 影像带 speckle / 云,先用 where() 把坏值置 nan,再 conv2d() 平滑去噪,叠加道路矢量,快速出「哪些抢修点可达、哪些被山体阻断」的态势图,直接喂给应急调度群。
四、社区精选(同赛道相关项目)
① xarray-spatial — 纯 Python / Numba、无 GDAL 依赖的栅格分析库(表面 / 水文 / 地形 / 路径 / 火焰模型),GPU(CuPy)可选,适合不想碰 GDAL 的团队。
② GOSTnets(World Bank) — 在 OSM 路网上做可达性 / 出行时间分析的便利层,networkx + geopandas 封装,适合「设施到人的时间成本」类分析。
③ geemap — Google Earth Engine 的 Python 交互式地图分析(需 GEE 账号),遥感 / 时序分析一把梭,适合有 GEE 配额的单位。
④ OSMnx — 从 OpenStreetMap 拉取并分析街道网络的经典库,也是前几期提过的 SocialMapper 的底座,路网类分析绕不开。
活跃度引擎
💬 评论提问:你手头的覆盖 / 选址分析,现在是用 ArcGIS 还是手搓 Python?留言聊聊踩过的对齐 / 内存坑。
📦 资料包钩子:留言「栅格」领《Yirgacheffe 电信覆盖规划 3 段示例代码 + 测试 tif / geojson》,直接能跑。
🗳️ 投票即内容:下一期想看哪类 GIS 落地?① 覆盖规划 ② 路网可达 ③ 遥感去云 ④ 基站选址——投票决定下期选题。
📕 小红书回流:同名「阿艾法知识库」同步发《3 行 Python 算清基站覆盖人数》短视频版,搜得到。
👤 @真实作者:@Michael Dales(剑桥 Quantify Earth,Yirgacheffe 主创,PROPL '25 论文一作),有问题可去仓库提 issue。
本文不构成投资建议,开源项目请遵守对应许可证(ISC)。示例数据请用自有tif/geojson替换,生产环境注意栅格投影一致性。