ARTICLE · 1075468
CAD地形图建筑转GIS半自动插件构思
1 前言:为什么做这件事
在城市更新不断推进、基础数据又相对有限的当下,地形图是掌握现状建筑相关数据的最现实途径。但直接用CAD统计建筑数据费时费力:方案稍有调整,就要重新统计;即便做了表格编号,时间一长也容易混乱。如果能把数据和空间绑定,从“处理数据”变成“处理图形”,会是更可持续的思路,GIS就是足够趁手的媒介。
此前整理过一篇CAD建筑转GIS的手动流程文章(如何利用ArcGIS结合CAD地形图,统计大面积的建筑数据和建模),全手动虽然比在CAD中反复修改高效很多,但单次处理的时间优势并不明显。如今借助AI的能力,正好可以把之前想做但做不到的事情往前推一步。
2 目标:要做什么
这次的目标很明确:把CAD地形图中的建筑转换为GIS面要素,并带上建筑层数。有了层数,后续对应的高度、面积、建筑密度等指标,就都有了较为完整的基础数据。
3 难点分析:为什么全自动走不通
3.1 门槛与前提
之前的难点是根本不会写代码,学习难度对我来说有点大,无法开始行动;现在有了AI的帮助,这个难点可以跳过,难点就变成了“如何正确地描述需求”。
但前提条件依然存在:CAD地形图要分层、坐标要对,建筑图层中的建筑必须是闭合曲线。很多老的、被炸开的、被合并过的图,目前还没有很好的处理办法。
3.2 建筑楼层赋值的六种常见情况
先说结论:CAD地形图里的建筑标注,情况比想象中复杂得多。我总结了六种常见情况:
情况 | 特征 | 难在哪 |
A | 建筑内既有文字又有楼层数字 | 最简单,空间连接就能搞定 |
B | 有文字但没数字(如砖混简) | 大多是1层,但不是全部 |
C | 什么都没有(漏标注、阳台、楼梯间) | 大概率和旁边建筑一致,但自动判断极难 |
D | 一个建筑有多个标注(3和4同时出现) | 必须人工判断哪个对 |
E | 柱子等过小的非建筑面 | 需要剔除 |
F | 中厅等挖空的面被错误识别 | 需要修正或剔除 |
真正难的是C和D。一个没有任何标注的建筑,它到底是独立的1层小平房,还是旁边8层楼的阳台?人一眼能看出来,软件很难。
我围绕建筑楼层提取先后迭代了7个版本。v1、v2基础版反而最准;v3以后叠加了单字识别、继承等复杂逻辑,结果完全不对,建筑面和CAD楼层标注对不上。后来回退到最基础的空间连接验证,v6才跑通,过滤后12708个建筑面里,3770个成功匹配到楼层。
7次失败让我意识到一件事:这个问题不能指望一个插件全自动解决。
4 方案设计:拆分与分类
4.1 拆分思路:按信息明确度分级
思路很简单:越明确的优先级越高。按信息明确程度把建筑分成四类:
表2 建筑信息分类与处理方式
类别 | 特征 | 处理方式 |
第一类 | 能够识别楼层 | 直接全部识别出来,赋给楼层,单独成为一个面 |
第二类 | 带文字不带数字 | 全部识别出来,把所有文字放到一个字段;楼层利用筛选研判是否为1层,时间紧可直接设为1层 |
第三类 | 有多个选择、待判断 | 把所有文字录入字段,再对照图判断 |
第四类 | 什么都没有 | 先保留,后续可能需要继续处理 |
另外,所有文字都保留下来,方便后续核对。以上是第一个插件的拆分思路,结果可以生成在一个数据集中。
4.2 不含字段的识别:推断规则
说白了就是怎么考虑不带字段的楼层。推断规则如下:
表3 无楼层信息建筑的推断规则
优先级 | 规则 | 说明 |
1 | 完全重叠(>90%) | 标记待复核 |
2 | 共边 | 只要有公共边就算,取最高楼层 |
3 | 相交 | 取相交面积最大的 |
4 | 缓冲区匹配(0.1米内) | 不共边、不相交,但在0.1米范围内,取最高楼层 |
5 | 不挨着 | 默认1层 |
这样大概就能把无标注的建筑处理出来,最后把所有确定好的面合并即可。
5 落地实践:结合开发历程
5.1 环境与约束
开发运行于ArcGIS Pro 3.7(Basic许可证),无法使用Near工具,空间关系判断需用其他方式实现;CAD文字字段为TextString;坐标系为CGCS2000 3度带CM117E;楼层数字支持1~500层;小于1㎡的建筑面直接过滤。
5.2 最终产物:两个插件
第一个插件叫CAD建筑GIS转换,目前是V4.1版本。它做的事情很纯粹:
1.从CAD里导出建筑面(JMD图层),过滤掉小于1㎡的碎面
2.导出CAD里所有文字标注,不按图层筛选
3.用空间连接把文字挂到对应的建筑上
4.一个建筑可能对应多条文字,全部聚合在一起解析
按规则分类输出

第二个插件叫无信息建筑楼层推断,目前是V2.1版本。它只处理第一个插件输出的无任何信息建筑。
核心逻辑:一个没有标注的建筑,大概率和它旁边的建筑有关系。按空间关系从强到弱判断:
1.完全重叠(重叠面积超过90%):大概率是重复面或标注错位,不赋楼层,标记待复核
2.共边(和某栋确认建筑共享边界):继承那栋的楼层,共边越长越可信
3.相交(和确认建筑有面积重叠):重叠比例超过20%才自动推断,否则待复核
4.近距离(0.05米内但不碰):唯一候选就继承,多个候选待复核
5.不挨着:默认1层,标记待确认

5.3两个插件怎么配合用
实际工作流很简单,三步:
第一步:用V4.1处理CAD,得到四个分类图层
第二步:把有明确楼层作为确认建筑,把无任何信息作为待推断建筑,输入V2.1
第三步:V2.1输出后,INFERRED的直接合并,REVIEW的按复核原因扫一遍
6 总结与展望
总的来说,这套流程还是比较复杂的,也没有办法完全避免人工操作。但“机器+人工”的方式,在准确程度和人工时间消耗之间相对还算平衡:如果要求不高,目前的成果可以直接使用;如果要求比较高,也可以针对重点使用片区的数据进行精细核实,逐步完善。
实话说这个插件没有那么好用,通用性有限的很,真正有价值的是现在利用ai可以优化很多自己的工作流程,减少自己的工作量,让自己干更多有价值的事,或者少加点班。另外这个玩意大部分是用豆包弄的,过程中混乱的很,实在是难受的不行,后来用GPT给分析了一下,重新架构后,再回到豆包重新弄才算凑合能用。
如果想要试试这个,后台回复【CAD建筑GIS转换】