QGIS建筑轮廓提取:3种方法
发布于 更新于
要在 QGIS 中检测建筑轮廓,你有三条路线:下载开源数据集、在自己的影像上运行AI检测 plugin,或手动数字化。最快的是第二条。从 plugin manager 安装 plugin,加载影像,画一个 zone,输入 buildings,点击 Detect,一个 polygon layer 就会落入你的项目CRS。
过滤是工作的另一半。返回结果中很大一部分不是建筑,所以要按 confidence 和面积削减原始输出。我在巴黎市中心跑了一次,得到635个多边形,决定保留哪82个的时间比检测本身还长。
| 你的输入 | 方法 | 时间 |
|---|---|---|
| OpenStreetMap、Microsoft 或 Google 已经覆盖的区域 | 方法1:下载开源轮廓 | 几分钟 |
| 几百到几千栋建筑, buyers 给你的那套影像上 | 方法2:自动检测(我们的,云端) | 57秒检出848栋,然后是过滤 |
| 不到五十栋建筑,或需要按地址逐栋划分的历史中心 | 方法3:手动数字化 | 取决于你的速度 |
永远先看开源数据。只有当覆盖有缺口、年代不对,或轮廓必须与客户给定的那套正射影像对齐时,才继续往下走。
方法1:下载开源轮廓
你需要 QGIS 3.22 或更新版本、一套你信任的影像 layer,以及用于方法2的网络连接。三种方法都不需要独立显卡。
很多任务根本不需要检测。三个开源数据集加起来覆盖了地球大部分地区,在同一个街区上它们之间能差出几千栋建筑。
Pick the dataset for your area
OpenStreetMap 在制图者活跃的地方非常好,而且建筑带有属性。Microsoft Global ML Building Footprints 有超过十亿栋机器提取的建筑,在北美最强。Google Open Buildings 覆盖全球南方,那里 OSM 最稀疏。
Load one against your imagery
用 QuickOSM 把 OSM 拉进来。
Zoom in and look at the edges
看一眼边缘,就能决定是停在这里还是继续往下读。

适合 when: 该区域已有较好的制图覆盖,你能接受数据集的年代和许可。
跳过 when: 覆盖有缺口、年代不对,或轮廓必须与某一套特定正射影像对齐。
方法2:自动检测
建筑轮廓是建筑物与地面交界的外轮廓,是一个平面多边形。不是屋顶,不是地块,不是地址点。这在这里很重要,因为垂直影像给你的是屋顶:在接近天底拍摄的五层奥斯曼街区上偏移很小,在高塔上则不是。承诺任何 footprint layer 之前都要明白这一点,更长的解释见什么是建筑轮廓。
自动检测模型读取你的影像,以多边形形式返回建筑轮廓,每个带一个 confidence 分数。我们做的就是其中一个,AI Segmentation。本节讲的是我们自己的工具。
它和其它工具一样从 plugin manager 安装:不用手动下载,不用配 Python 环境,不用独立显卡,因为模型跑在我们的服务器上。Windows、macOS 和 Linux 都可用。


Install it and pick your imagery layer
从 plugin manager 安装 plugin,打开面板,选择要读取的 raster。

Draw a zone and name the object
画一个 zone,输入 buildings,点击 Detect。整个 prompt 就是这样,也可以用你自己的语言。结果按瓦片流式返回,成为项目CRS中的一个 polygon layer。
Set the precision when the objects are small
唯一值得学的设置是精度,也就是瓦片大小。小瓦片让模型看得近,小目标需要这个。大瓦片给它上下文,农场大地块需要这个。
Filter what came back
在成为 layer 之前,面板带你走三步:过滤要保留的内容,修正模型漏掉的部分,选择输出形状。第一步决定成败,下一节单独讲。
Clean the geometry
按顺序做简化、正交化和删除洞,只在每一步真正有用时做。三者的工具和顺序原因见下文。
一次运行按覆盖的地面计费。每个账户每月有免费额度,不用绑卡,Pro 可以提高额度。检测跑在欧洲服务器上,我们不用你的影像训练,如果数据不能离机,还有一个小的本地模型。完整指南见完整指南,其中讲透了保留、修正和形状。
过滤就是全部工作
原始检测输出是一组带 confidence 分数的候选多边形。在密集影像上,大多又小又不确定。我把这次巴黎运行的两个过滤器全放开导出,让每个候选都进入 layer:1.18 km² 上共635个多边形。
返回结果的一半比停车位还小:通风口、天窗、楼梯间、庭院棚屋。影像上真实存在,勾画也正确,但没人会把它们叫建筑轮廓。
所以要过滤。在面板里拖两个滑块,或用 Select by Expression 在属性表中做同样的事:
"area_m2" >= 50 AND "score" >= 0.5
这样剩下635个中的82个多边形,面积从总计263,658 m²中保留222,338 m²。不用信我的阈值,自己拖一下。绿色是你的过滤器留下的,白色不是。

82 / 635polygons kept (13%)
84%of the built area (222,338 m²)
The same 635 detections the attribute table holds. Drop the confidence to zero and the courtyard sheds and skylights come back.
拖第一个时盯住第二个数字。扔掉87%的多边形,只损失16%的面积,剩下的本来就是你要手动一个个删的噪声,还会怀疑工具好不好用。
按任务调两个阈值。工业厂房普查可以把面积下限推到200 m²。绘制非正式住区时,50 m² 会扔掉真房子,降到15,靠 confidence 分数来筛。
干净的结果长什么样
巴黎是难例。同一个工具在往西约10 km 的独栋住宅区:

85m²
median polygon area
Paris run: 3.2 m²
0.79
median confidence
Paris run: 0.26
251polygons
kept, out of 251 returned
Paris run: 82 out of 635
同一个工具,同一个城市,几乎不用扔。变的是建成肌理,不是模型。
断点:密集连片街区

每个多边形描的是整个街区的建成包络,紧贴街线,正确挖除庭院。做建成区或不透水面很好,按地址要逐栋多边形则不行。从垂直影像读取的任何模型都找不到相邻建筑之间的共用墙,因为从上往下看那里什么都看不到。
清理几何
三个 QGIS 原生工具整理 footprint layer,顺序重要,因为简化会移动你刚拉直的顶点。
- Simplify,航空影像上容差0.5 m。顶点数大幅削减,边界移动肉眼不可见。
- Orthogonalize。把接近直角的角拉直。用在开源数据或手绘成果上,那里还没人拉直过。
- Delete holes,只在你想要实心轮廓时用。巴黎这个结果不要用:那些洞是庭院,是对的。
在检测得到的 layer 上第2步接近空操作。我没有假设,而是实测过,对190栋检测建筑运行 Orthogonalize,对比前后全部1,845个角。
87.9%
corners already within 1° of square
before running anything
87.9%
after Orthogonalize
the same 1,845 corners
1.7cm
median vertex shift
9.1 cm at the worst

不成直角的12%是联排。看街区中间的阶梯状边缘。任何角工具都修不了它,因为那些台阶跟着真实屋顶线走,不是建模误差。
适合 when: 几百到几千栋建筑,影像必须对齐,或多人必须用同样方式产出同一个 layer。
跳过 when: 在历史市中心需要按地址逐栋划分。我不会在那里用自动检测,地籍数据加手动修正更合适。
Try it free in QGIS, no card needed
方法3:手动数字化
不到五十栋建筑,直接画。免费、精确,这个量级我自己也会手画。
Turn on snapping
Project -> Snapping Options,顶点和线段,打开拓扑编辑。不开的话,一下午都在删碎条。
Trace, and watch yourself drift
画到第60栋左右,你开始走捷径,第6栋时绝不会这样,而且你自己察觉不到。它已经进 layer 了。
适合 when: 大约五十栋以下,或在密集历史中心需要按地址逐栋划分。
跳过 when: 数量达到几百栋,或多个人必须用同样方式产出同一个 layer。
记住什么
| 开源数据集 | 自动检测 | 手动数字化 | |
|---|---|---|---|
| 成本 | 免费 | 免费额度,之后付费 | 免费 |
| 准备 | 几分钟 | 几分钟 | 无 |
| 适合 | 已有较好覆盖的区域 | 几百到几千栋 | 约50栋以下 |
| 与你的影像对齐 | 否 | 是 | 是 |
| 团队多人一致 | 是 | 是 | 否 |
| 密集连片街区 | 视数据而定 | 只有街区包络 | 是 |
| 可说明的来源 | 数据集和年代 | 你的影像,带 confidence 分数 | 你本人 |
先查开源数据集。在同一个街区上它们能差出几千栋建筑,所以对照你的影像看一眼边缘,就能决定是否继续。
必须与客户正射影像对齐的轮廓,无论覆盖多好,都排除开源数据集。
检测的主要工作是过滤:巴黎市中心635个中保留82个,占建成面积的84%。
在相连建筑处,垂直影像给不出按地址逐栋的多边形,花多少钱都不行。去关联地籍数据。
超过五十栋左右,手动数字化会悄悄走形而不自知。
常见问题
无人机影像可用吗?
比卫星更好用。地面分辨率比来源更重要:5 cm 正射影像的边界更干净、confidence 更高,比30 cm 卫星场景好。
需要 GPU 吗?
一次运行多少钱?
自动检测按 zone 覆盖的地面计费,Cloud AI 按每次保存计一个目标。自己机器上的半自动免费。每个账户每月有免费额度。
能按地址逐栋划分吗?
在建筑相连的市中心,从垂直影像做不到。模型返回的是整个街区的建成包络,庭院已挖除,做建成区是对的,做地址是错的。去关联地籍数据。
开源数据集从哪个开始?
有活跃制图者的区域从 OpenStreetMap 开始。没有的地方差距很大:在那1 km² 的罗安达上 OSM 一栋都没有,而 Microsoft 找到3,140栋,Google Open Buildings 找到4,468栋。
屋顶与地面差距的完整解释,读什么是建筑轮廓。分类 raster 转面用 polygonize 比任何模型都好,读QGIS 中 raster 转矢量。QGIS AI hub 列了我们做的其它东西。
中检测建筑轮廓,你有三条路线:下载开源数据集、在自己的影像上运行AI检测 plugin,或手动数字化。最快的是第二条。从 plugin manager 安装 plugin,加载影像,画一个 zone,输入 


