DXF桩基参数提取
从桩基础施工图DXF中一键提取桩参数,支持等高线插值计算入岩深度。
触发场景
- 用户提供桩基平面图DXF,需要提取桩编号/坐标/桩径/桩顶标高
- 用户提供含等高线的DXF,需要计算每根桩的入岩深度
- 桩基础工程量统计、投标报价桩参数汇总
- 需要将桩参数输出为Excel表格
工作流程
阶段1:分析DXF结构
用 scripts/analyze_dxf.py 快速了解DXF文件结构:
python scripts/analyze_dxf.py <dxf路径>
输出:实体类型统计、图层列表及实体数、桩相关图层识别结果。
查阅 references/dxf_pile_patterns.md 了解常见桩基图DXF模式。
阶段2:提取桩参数
用 scripts/extract_piles.py 提取桩编号、坐标、桩径、桩顶标高:
python scripts/extract_piles.py <dxf路径> <输出Excel路径.xlsx> [--datum 23.40]
关键参数:
--datum:相对标高转绝对标高的基准值(±0.00=绝对xx.xxm),默认23.40--encoding:DXF编码(默认自动检测,可选gbk/utf-8)
脚本自动完成:
- 识别桩轮廓(块内CIRCLE圆 → 圆心=桩心)
- 提取编号标签(
Z1~Z419格式,通常在桩编号图层) - 提取桩型/桩顶标高(
GZH01,H=-6.500格式,BASE-ZM-BH图层) - 贪心最优匹配(编号↔圆↔标高,确保1:1无冲突)
- 计算桩顶绝对标高 = 相对标高 + datum
- 输出Excel:Sheet1桩参数表 + Sheet2汇总统计
阶段3:等高线插值入岩深度(可选)
用 scripts/interpolate_elevation.py 从等高线图层插值岩面标高:
python scripts/interpolate_elevation.py \
<含等高线的DXF路径> \
<桩参数Excel路径.xlsx> \
--layer g_sDgxLayer \
--sheet <中风化|微风化>
参数说明:
--layer:等高线所在图层(默认g_sDgxLayer)--sheet:写入Excel的Sheet类型(中风化或微风化)--column-offset:新增列写入偏移(默认自动追加到最后一列)--k:IDW插值最近点数(默认12)--power:距离权重幂(默认2)
脚本自动完成:
- 从等高线图层提取POLYLINE顶点 + TEXT标高标注
- 最近距离匹配标高到等高线
- 按桩坐标IDW插值岩面标高
- 计算进入岩层深度 = 桩顶绝对标高 - 岩面标高
- 计算层厚(中风化层 = 中风化面 - 微风化面)
- 写入Excel新列 + 更新汇总Sheet
阶段4:标注桩编号到DXF
用 scripts/label_piles.py 在新图层标注桩编号:
python scripts/label_piles.py <输入.dxf> <桩编号Excel.xlsx> <输出.dxf>
重要的经验规则
桩心识别(重点)
- 优先查找块内的CIRCLE:桩通常定义为块引用中的圆,圆心=桩心
- 世界坐标 = INSERT插入点 + 块内CIRCLE圆心 × 缩放比例
- 备选方案:BASE-ZM-BH图层的2点LWPOLYLINE,起点P1=桩心(45°直径符号线)
- 验证:圆半径 = 桩径/2(600→300, 800→400, 1200→600, 1400→700, 2000→1000, 2200→1100)
编号匹配
- 使用贪心最优匹配(非简单最近邻),避免多对一冲突
- 排序所有(编号, 轮廓, 距离)对,逐个分配,已分配双方跳过
- 匹配完成后验证:无重复、无遗漏、连续编号
等高线插值
- IDW反距离加权,p=2(距离平方反比)
- k=12个最近点,可调整
- 两组等高线(中风化/微风化)覆盖范围可能不同,边缘区域插值可能失真
- 负层厚(微风化面高于中风化面)需红色标记,要求用户复核
标高体系
- 桩顶标高是相对标高(相对±0.00),需用户提供基准值转为绝对标高
- 等高线标高是绝对标高,无需转换
- 入岩深度 = 桩顶绝对标高 - 岩面绝对标高
- 层厚 = 上层岩面 - 下层岩面(正=正常地质层序)
输出Excel格式
| 序号 | 桩编号 | 桩型 | 桩径(mm) | 桩顶相对标高(m) | 桩顶绝对标高(m) | 桩心坐标X | 桩心坐标Y | ...入岩参数... |
|---|
含汇总Sheet:标高分类统计、桩型分布、入岩深度范围分布。
依赖
ezdxf>=1.3.0
openpyxl>=3.1.0
numpy
scipy
