夜雨聆风学习资料网

ARTICLE · 1075468

CAD地形图建筑转GIS半自动插件构思

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转换】

相关学习资料