跳转到内容
AI Segmentation
QGIS
教程

QGIS 光伏板识别与屋顶光伏提取:5 种方法

发布于 更新于

同一片郊区屋顶的三幅对比图:原始航空影像、叠加 OpenStreetMap 光伏发电设备稀疏轮廓的屋顶,以及每个阵列都被检测为独立多边形的屋顶。

要在QGIS中绘制屋顶光伏,先从别人已经绘好的数据开始。打开 Vector > QuickOSM > QuickOSM…,在 key 框中填入 generator:source,在 value 框中填入 solar,在您的区域上运行。OpenStreetMap 带有该标签的对象有 6,143,024 个,读取于 2026 年 9 月 3 日,因此在调查完善的城镇,两分钟即可完成。覆盖稀疏的地方需要您自己检测阵列,具体方法取决于您的波段和像素尺寸。

您的输入方法花费
OpenStreetMap 已经调查完善的区域方法 1,QuickOSM免费
画布上显示的任何栅格,任何机器方法 2,云端分割模型每月免费 1.5 km²,之后 €39
带近红外波段的多光谱影像方法 3,Raster > Raster Calculator…免费,QGIS 核心
四个或更多波段,且有时间画训练区方法 4,Semi-Automatic Classification Plugin免费插件
20 cm 左右的 RGB 正射影像,且有 GPU 或耐心方法 5,Deepness 加其 Solar PV 模型免费

价格、插件版本和标签计数均读取于 2026 年 9 月 3 日。

方法 1:拿现成的测绘成果

QGIS 在 3.0 中移除了自带的 OSM 下载器,并指向 QuickOSM,所以先装它。

查询发电设备

Vector > QuickOSM > QuickOSM…,key 填 generator:source,value 填 solar,按您的范围或地名运行。屋顶阵列带有 power=generator,常带 generator:method=photovoltaic。

单独查询电站

地面电站标注为 power=plant 加 plant:source=solar,是另一个查询。漏掉它,您的图层里会缺掉所有电站。

到登记库查千瓦数

德国 Marktstammdatenregister 每天以 XML 发布,但 30 kW 及以下的机组隐去坐标,屋顶只能落到邮编。法国登记库止于 IRIS 区,36 kW 以下全部折叠为汇总行。

QGIS 中的 QuickOSM 对话框,key 为 generator:source,value 为 solar,查询得到的光伏发电多边形叠加在一座小镇的航空影像上。
一次 QuickOSM 查询,key 为 generator:source,value 为 solar。本地绘图者到过的地方,这一步就是全部工作。

三个开放数据集可用作训练数据或基准。Bradbury 等,四个加州城市 30 cm 上 19,863 个标注 PV 多边形,CC0。BDAPPV,28,807 个法国安装含掩膜,CC BY 4.0。DeepSolar 数出美国本土 147 万套系统,但发布的是人口普查区计数,不是多边形。

用它,当: 有人调查过您的区域,或您要的是容量而不是形状。

不用它,当: 覆盖零散,而这只有看了才知道。

方法 2:云端分割模型

分割模型学过阵列的样子,所以在方法 3 和方法 4 分不开深色屋顶的地方,它能分开。我们构建其中之一,AI Segmentation。本节讲我们自己的工具。

在画布显示的任何栅格上画一个区域,输入 solar panel,每个阵列以项目 CRS 下的多边形返回,带面积和置信度分数。模型跑在我们在欧洲的服务器上,所以不需要显卡,也不需要 Python 环境。

QGIS 中航空影像上的一座农场建筑屋顶,五组光伏板各自勾勒为独立的彩色多边形,板组之间裸露的屋顶未被触及。
在一处农场屋顶上运行一次:五组阵列,各为独立多边形,之间裸露的屋顶保持原样。

在 2026 年 7 月 5 日到 9 月 1 日之间,我们团队之外的 47 人运行 solar panel 104 次,15.6% 的分块返回为空。在 96 次导出运行中,模型找到 40,088 个候选,他们保留 14,245 个,即 35.5%,覆盖 496,931 m² 板子。

输入 solar panel,不要输入 solar farm。后者要的是整个场站,模型会回答一个均匀面或空白。在现有少量运行中,它让 24 个分块中的 21 个为空。

最适合: 在任何机器上,做一个区范围的屋顶阵列。

不适合: 数组件。密集阵列返回为一个面,所以在 QGIS 里拆分,或除以您已知的组件占地。住宅组件约 1.7 m 乘 1.1 m。

价格: 每月 1.5 km² 免费,无需卡。Pro 为每月 €39,不含增值税。免费试用 Pro 7 天:绑定银行卡,试用期结束前取消则不会扣费。

运行在: 我们的服务器,在欧洲。

安装: 插件管理器,QGIS 3.22 或更高,然后从面板登录。

方法 3:在栅格计算器里做阈值分割

在投影坐标系下工作,因为下面有两步要按图层单位取面积。

四幅航空影像裁剪图并排展示并带有标注:屋顶光伏阵列、布满方形天窗网格的仓库屋顶、温室屋顶,以及田野中成排的太阳能集热器。
四幅裁剪图,每幅宽 90 m。只有第一幅能发电。前三幅位于 Freiburg,最后一幅是丹麦 Braedstrup 的区域供热站。

Raster > Raster Calculator…,算法 id 为 native:rastercalc。板子发暗,在近红外中比深色屋顶暗得多,所以红光和 NIR 波段之间的归一化指数在大多数场景都能分开。然后 gdal:sieve 去掉斑点,gdal:polygonize 生成多边形。

在三波段 RGB 上这会失败,因为深色屋顶和板子的值重合。常用补救是纹理。grass:r.texture 计算 13 种 GLCM 测度,阵列在对比度上偏高、在逆差距矩上偏低。GRASS 随 Windows 安装包一起发布,不随 macOS 包发布。

用它,当: 您有近红外波段,且是单一干净场景。

不用它,当: 影像是 RGB,或阈值要在不同日期拍摄的镶嵌图中通用。

方法 4:用 SCP 做监督分类

Semi-Automatic Classification Plugin 会增加 SCP 菜单和 SCP Dock。建 Band set,在板子和每种易混物上画 ROI,然后用 Maximum Likelihood、Minimum Distance、Spectral Angle Mapping、Random Forest、Support Vector Machine 或 Multi-layer Perceptron 分类。8.5.0 是 QGIS 3.x 会装到的版本,GPL v3,下载 2,644,482 次。

它自己的 FAQ 排除了大多数人手里的输入。“You cannot use orthophotos with less than 4 bands”,因为低于四个波段算法分不开类别。

用它,当: 您有四个或更多波段,想要可重复、可记录的分类。

不用它,当: 您的输入是 RGB 正射影像或底图。

方法 5:在 Deepness 里跑本地模型

地面分辨率决定一切。Bradbury 等人在 30 cm 上构建参考 PV 数据集,因为“solar panels are typically between 1 and 2 meters in length”,这样每块板上有几个像素。这能分辨阵列,分辨不了里面的组件。Clark 和 Pacifici 发现单个面板“difficult to distinguish even at 15.5 cm resolution”。已发表的屋顶 PV 工作集中在 10 cm 到 31 cm 之间。10 m 的 Sentinel-2 只做电站,从不做屋顶。

Deepness 在 QGIS 内跑 ONNX 模型,免费,Apache 2.0,它的模型库自带 Solar PV Segmentation 模型,20 cm/px,由 Kleebauer 等训练、Fraunhofer 托管。指向您的正射影像即可得到板子掩膜,无需账号,什么都不离开本机。

速度是短板。有用户测过同一模型:“80+ minutes for a digital Orthophoto tile (20 cm resultion, 5000 points in each direction)”,在 CPU 上,该 issue 仍未关闭。除此之外,没有维护良好的开放屋顶 PV 模型。

用它,当: 什么都不能离开本机,且您的正射接近 20 cm。

不用它,当: 您没有 NVIDIA 卡,却要覆盖一个区。

五种方法并排对比

QuickOSMAI Segmentation栅格计算器SCPDeepness
所需波段无三个NIR 有帮助四个或更多三个
影像留在本地是否是是是
GPU否否否否推荐
输出OSM 多边形每个阵列一个多边形栅格掩膜类别栅格板子掩膜
花费免费免费额度,之后 €39免费免费免费

记住什么

先查 OpenStreetMap,因为调查完善的城镇两分钟收工,没有检测能胜过到过现场的绘图者。

如果影像不能离开本机,Deepness 和它的本地 Solar PV 模型可以把一切都留在您的机器上。

在 RGB 底图上,栅格计算器和 SCP 出局,因为两者都不能仅按值把板子和深色屋顶分开。

30 cm 左右能分辨阵列,没有分辨率能分辨里面的组件,所以只画面积,永远不要从影像数板子。

千瓦数来自公用事业登记库,永远不是来自图片,而法国和德国登记库都会模糊小型屋顶机组的位置。

在 QGIS 中免费试用,无需信用卡

大家常问的问题

QGIS 能自己检测太阳能板吗?

不行。QGIS 核心只有阈值分割和栅格转矢量,需要光谱差异,所以 RGB 底图给不了您任何东西。检测来自插件,本地用 Deepness,云端用我们的。

需要什么分辨率的影像?

按 Bradbury 等,30 cm 左右能分辨阵列。单个组件在 15.5 cm 下仍然难分,所以按阵列和面积规划,不要数板子。

如何区分太阳能板和深色屋顶?

在三波段上,仅按值分不开。用近红外波段、用 grass:r.texture 这类纹理测度,或用学过阵列样子的模型。

地面光伏电站也能找到吗?

能,在 OpenStreetMap 中是另一个查询,power=plant 加 plant:source=solar。用模型时,电站也输入 solar panel,因为它检测每块板子,而不是场站。

能数出装了多少块板吗?

不能从影像数。检测给出轮廓和面积,组件数量和千瓦数来自登记库,而在法国只到 IRIS 区。

建筑物轮廓提取指南 完整讲了过滤步骤,QGIS 中的 SAM 一文 讲了这类模型擅长找哪些对象。若想把检测和面积统计合成一条指令一次完成,而不是手动逐步操作插件,AI Agent 可以在同一个 QGIS 工程内完成。QGIS AI 中心 对比了各插件,产品页是 AI Segmentation。