# CASS 11.0 数字化成图软件 | 关联：15_iData_数据工厂.md 30_GIS↔CAD数据转换.md | 来源：旧第三/四/六篇

# 第三篇：CASS11.0 软件体系

## 3.1 软件概述

**CASS**（Computer Aided Surveying System）是南方数码基于 AutoCAD 平台研发的**数字化地形地籍成图软件**，广泛应用于：
- 地形成图
- 地籍成图
- 工程测量应用
- 空间数据建库和更新
- 市政监管

**CASS11.0 版本特性：**
- 基于 CAD 平台（AutoCAD/浩辰/中望 OEM）
- 优化土方计算模式
- 增加裸眼3D采集、点云立采、立面采集
- 二三维一体化数据采集
- 行业版本：勘测定界版、矿山版、工程版、管线版、水上版、竣工测量版、农村地籍版

---

## 3.2 功能菜单体系

### 顶部下拉菜单（15项）

| 菜单 | 功能概述 |
|---|---|
| **文件** | 新建、打开、保存、图形输出 |
| **工具** | 测量工具集、坐标系设置 |
| **编辑** | 图形编辑：复制、移动、旋转、镜像 |
| **显示** | 视图控制：缩放、平移、刷新 |
| **数据** | 数据读写：DAT文件、全站仪通讯 |
| **绘图处理** | 展点、定显示区、编码引导、简码识别 |
| **地籍** | 宗地绘制、界址线、面积量算 |
| **等高线** | DTM构建、等高线生成与编辑 |
| **地物编辑** | 地物修改、属性编辑 |
| **检查入库** | 图形检查、SHP/MDB输出 |
| **工程应用** | 土方量计算、断面图、公路曲线 |
| **其他应用** | 高级功能扩展 |
| **质检模块** | 数据质量检查 |
| **土地利用** | 土地分类与统计 |
| **三维模块** | 三维显示与分析 |

### 右侧屏幕菜单

| 模式 | 功能 |
|---|---|
| **坐标定位** | 通过输入坐标来绘制地物 |
| **点号定位** | 通过测点点号来绘制地物 |
| **电子平板** | 模拟野外电子平板仪操作 |
| **地物匹配** | 智能匹配已有图形 |

---

## 3.3 文件结构体系

### 核心文件格式

| 文件类型 | 扩展名 | 用途 |
|---|---|---|
| **坐标数据文件** | .DAT | 最基础数据文件：点号,编码,Y,X,H |
| **编码引导文件** | — | 引导编码赋给坐标点 |
| **权属引导文件** | — | 宗地权属信息引导 |
| **权属信息文件** | — | 宗地的完整权属信息 |
| **原始测量数据** | — | 全站仪传回的原始数据 |
| **断面里程文件** | — | 断面测量数据 |
| **公路曲线要素** | — | 公路平曲线参数 |
| **横断面设计** | — | 道路横断面设计参数 |
| **CASS交换文件** | .CAS | **核心交换格式**，含全部图形+属性 |
| **配置文件** | cassconfig.db | 符号定义、系统参数 |
| **野外操作码** | JCODE.DEF | 野外采集的简码定义 |
| **地类定义** | Dilei.def | 土地利用地类编码 |

### DAT 坐标文件格式

```
1点点名,1点编码,1点Y(东)坐标,1点X(北)坐标,1点高程
...
N点点名,N点编码,N点Y(东)坐标,N点X(北)坐标,N点高程
```

**注意：**
- 每行代表一个点
- 坐标单位：米
- 编码不能含逗号，即使为空逗号也不能省略
- 所有逗号必须在半角方式下输入

### CAS 交换文件格式（★核心★）

**文件结构：**
```
CASS11.0                    ← 文件头
西南角坐标                   ← 图形范围左下角
东北角坐标                   ← 图形范围右上角
[层名]                      ← 图层开始
实体类型                     ← POINT/LINE/ARC/CIRCLE/PLINE/SPLINE/TEXT/SPECIAL
  ... 实体数据 ...
nil                         ← 该类型结束
[层名]                      ← 下一图层
  ...
END                         ← 文件结束
```

**8种实体类型：**

| 实体类型 | 说明 | 示例编码 | 地物类型 |
|---|---|---|---|
| **POINT** | 独立点状地物 | 143702,旋转角 | 门墩、井盖、路灯等 |
| **LINE** | 双点线段 | 143301,线型 | 围墙短线、行树等 |
| **ARC** | 弧线 | 编码,线型,半径,始角,终角 | 弧形道路、弧形围墙 |
| **CIRCLE** | 圆形地物 | 编码,半径 | 圆形井、圆形花坛 |
| **PLINE** | 复合线（多节点） | 编码,线宽,拟合方式,附加值 | 房屋、道路、陡坎、围墙 |
| **SPLINE** | 样条曲线 | 编码,线型,拟合方式,容差 | 等高线 |
| **TEXT** | 文字注记 | 编码,字高,旋转角 | 地名、高程注记 |
| **SPECIAL** | 程序控制复杂实体 | 依地物类型而变化 | 控制点、高程点、骨架线、界址线 |

**PLINE 拟合方式：**
- `N`：不拟合
- `S`：样条拟合（B-Spline）
- `F`：过点曲线拟合

**PLINE 附加值的含义：**
- 一般情况：0
- 依比例围墙/铁路：宽度（米）
- 陡坎：坎高（米）
- 房屋：层数

---

## 3.4 CASS 符号编码体系

### 六位编码规则

骨架线编码格式：`1 + 国标图式序号 + 顺序号 + 0或1`

**示例：**
- 三角点：`131100` = 1 + 311（国标序号3.1.1）+ 0 + 0
- 一般房屋：`141101` = 1 + 411（国标序号4.1.1）+ 0 + 1
- 砼房屋：`141111` = 1 + 411 + 1 + 1

### 辅助符号编码

格式：`骨架线编码 + "-" + 顺序号`
- 围墙短线：`144301-1`
- 围墙长线：`144301-2`

### CASS常用快捷命令

| CASS命令 | 功能 | AutoCAD命令 | 功能 |
|---|---|---|---|
| DD | 通用绘图 | A | 画弧 ARC |
| V | 查看实体属性 | C | 画圆 CIRCLE |
| S | 加入实体属性 | CP | 拷贝 COPY |
| F | 图形复制 | E | 删除 ERASE |
| RR | 符号重新生成 | L | 画直线 LINE |
| H | 线型换向 | PL | 画复合线 PLINE |
| KK | 查询坎高 | LA | 设置图层 LAYER |
| X | 多功能复合线 | LT | 设置线型 LINETYPE |
| B | 自由连接 | M | 移动 MOVE |
| AA | 加地物名 | P | 平移 PAN |
| T | 注记文字 | Z | 缩放 ZOOM |
| FF | 绘制多点房屋 | R | 重画 REDRAW |
| SS | 绘制四点房屋 | PE | 复合线编辑 PEDIT |
| W | 绘制围墙 | — | — |
| K | 绘制陡坎 | — | — |
| XP | 绘制自然斜坡 | — | — |
| G | 绘制高程点 | — | — |
| D | 绘制电力线 | — | — |
| I | 绘制道路 | — | — |
| N | 批量拟合复合线 | — | — |
| O | 批量修改复合线高 | — | — |
| WW | 批量改变复合线宽 | — | — |
| Y | 复合线上加点 | — | — |
| J | 复合线连接 | — | — |
| Q | 直角纠正 | — | — |

> **神经连接**：CASS编码规则 → 第四篇 GIS数据格式（DAT/CAS/DWG编码承载）、第六篇 编码体系深度解析（layer.def/CodeField.db/cassconfig.db）、第十七篇 数据转换方法论（CASS XDATA编码映射实践）。菜单功能 → 第六篇 CASS工作流（地物绘制→编码赋值→属性注记完整流程）。

---

# 第四篇：GIS 数据格式与互操作

## 4.1 CASS 与 GIS 的接口

### 接口方法汇总

| 接口格式 | 目标系统 | 特点 |
|---|---|---|
| **CAS 交换文件** (.CAS) | 通用（需二次开发转换） | 文本格式，含全部图形+属性信息，双向转换 |
| **SHP 文件** | ArcGIS | 直接输出/导入，自动处理面状区域扣岛 |
| **MDB 文件** | ArcGIS Personal Geodatabase | 直接输出到 Access 格式地理数据库 |
| **MIF/MID 文件** | MapInfo | 通用交换格式 |
| **国家空间矢量格式** | 国家基础地理信息数据库 | 国家标准格式 |

### 数据入库检查要点

- 地物是否放错图层
- 代码值是否正确
- 面状地物是否封闭（无悬挂点）
- 是否存在伪节点
- 图层正确性

---

## 4.2 常见 GIS 数据格式

| 格式 | 扩展名 | 系统 | 特点 |
|---|---|---|---|
| Shapefile | .shp/.shx/.dbf/.prj | ArcGIS/QGIS | 行业通用矢量格式 |
| GeoDatabase | .gdb | ArcGIS | 空间数据库 |
| GeoJSON | .geojson | 通用 | Web GIS 标准 |
| KML/KMZ | .kml/.kmz | Google Earth | 三维展示 |
| GeoPackage | .gpkg | 通用 | 开源标准 |
| DWG/DXF | .dwg/.dxf | AutoCAD/CASS | 工程制图 |
| CAS | .cas | CASS | CASS 交换格式 |
| DAT | .dat | CASS | CASS 坐标数据 |
| MIF/MID | .mif/.mid | MapInfo | MapInfo 交换 |

> **神经连接**：.DAT坐标文件 → 第三篇 CASS软件体系（点文件格式/点名编码YXDZ）。.CAS交换格式 → 第六篇 编码体系（六位码→8种CAS实体类型映射）、第十七篇 转换方法论（GIS↔CAD格式互转SOP）。SHP接口 → 第五篇 坐标系实战（.prj投影定义）、第十一篇 数据管理（GDB要素类↔SHP互导）。格式选择决策 → 第十七篇 三大转换方案对比。

---

# 第五篇：中国常用坐标系实战指南

> ⚠️ **历史参考**：北京54坐标系（2008年停用）和西安80坐标系（2018年正式废止）已被 CGCS2000 替代为中国强制标准。以下内容仅供历史数据兼容性参考，**新项目不得使用**。

## 5.1 三种坐标系快速识别

| 特征 | 北京54 ⚠️ | 西安80 ⚠️ | 国家2000 |
|---|---|---|---|
| 椭球体 | Krasovsky | IAG75 | CGCS2000 |
| 长半轴 | 6,378,245 m | 6,378,140 m | 6,378,137 m |
| 扁率 | 1/298.3 | 1/298.257 | 1/298.257222101 |
| 基准类型 | 参心 | 参心 | 地心 |
| Y坐标大致范围 | 带号+500km+... | 带号+500km+... | 带号+500km+... |
| 使用状态 | 淘汰中 | 淘汰中 | **现行标准** |

## 5.2 高斯坐标识别技巧

高斯平面坐标格式：X（7位，北坐标）+ Y（6位或8位，东坐标）

**示例：** 
- Y = 38501234.567 → 带号 38，实际东坐标 1234.567m（减去500km后）
- X = 3512345.678 → 北坐标 3512345.678m（距赤道）

**带号判断：**
- 如果 Y 坐标前两位在 13-23 之间 → 6°带
- 如果 Y 坐标前两位在 24-45 之间 → 3°带

## 5.3 完整投影带 WKID 速查表

### CGCS2000 6°带 Gauss-Kruger (中国: Zone 13-23)

| 带号 | 中央经线 | Zone WKID | CM WKID | 使用区域 |
|---|---|---|---|---|
| 13 | 75°E | 4491 | 4502 | 新疆西部 |
| 14 | 81°E | 4492 | 4503 | 新疆中部 |
| 15 | 87°E | 4493 | 4504 | 新疆东部/西藏 |
| 16 | 93°E | 4494 | 4505 | 青海/甘肃西 |
| 17 | 99°E | 4495 | 4506 | 甘肃/四川西 |
| 18 | 105°E | 4496 | 4507 | 四川/重庆/贵州/云南 |
| 19 | 111°E | 4497 | 4508 | 湖北/湖南/广西/广东 |
| 20 | 117°E | 4498 | 4509 | 浙江/福建/江西/安徽 |
| 21 | 123°E | 4499 | 4510 | 江苏/山东/辽宁/吉林 |
| 22 | 129°E | 4500 | 4511 | 黑龙江 |
| 23 | 135°E | 4501 | 4512 | 黑龙江东部 |

### CGCS2000 3°带 Gauss-Kruger (中国: Zone 25-45)

| 带号 | 中央经线 | WKID | 使用区域 |
|---|---|---|---|
| 34 | 102°E | 4522 | 四川/云南交界 |
| 35 | 105°E | 4523 | 四川盆地/重庆 |
| 36 | 108°E | 4524 | 贵州/湖南西 |
| 37 | 111°E | 4525 | 湖北/湖南/广东北 |
| 38 | 114°E | 4526 | 广东/江西/湖北东 |
| 39 | 117°E | 4527 | 福建/浙江/安徽南 |
| 40 | 120°E | 4528 | 江苏/上海/浙江北 |
| 41 | 123°E | 4529 | 辽宁/山东东 |
| 42 | 126°E | 4530 | 吉林 |
| 43 | 129°E | 4531 | 黑龙江 |
| 44 | 132°E | 4532 | 黑龙江东 |
| 45 | 135°E | 4533 | 黑龙江最东 |

> 完整列表：Zone 25-45 (WKID 4513-4533)，以上仅列出中国核心省份常用带。

### Beijing 1954 6°带 Gauss-Kruger (中国: Zone 13-23)

| 带号 | 中央经线 | WKID |
|---|---|---|
| 13 | 75°E | 21413 |
| 14 | 81°E | 21414 |
| 15 | 87°E | 21415 |
| 16 | 93°E | 21416 |
| 17 | 99°E | 21417 |
| 18 | 105°E | 21418 |
| 19 | 111°E | 21419 |
| 20 | 117°E | 21420 |
| 21 | 123°E | 21421 |
| 22 | 129°E | 21422 |
| 23 | 135°E | 21423 |

### Beijing 1954 3°带 (Zone 25-45, WKID 2401-2421)

### Xian 1980 6°带 (Zone 13-23, WKID 2327-2337)

### Xian 1980 3°带 (Zone 25-45, WKID 2349-2369)

> **弃用提示**：Beijing_1954_GK_Zone_13N~23N (WKID 21473-21483) 已弃用，统一使用不带 N 后缀的版本。

## 5.4 中国各省投影带对照

| 省份/区域 | 大致经度 | 6°带带号 | 3°带带号 |
|---|---|---|---|
| 新疆西部 | 73-80°E | 13-14 | 25-28 |
| 新疆东部/西藏 | 78-90°E | 14-15 | 26-30 |
| 青海/甘肃/四川西 | 90-104°E | 16-17 | 30-34 |
| 四川/重庆/贵州/云南 | 97-110°E | 17-18 | 32-36 |
| **湖北**/湖南/广西/广东 | 104-117°E | **18-19** | **34-38** |
| 浙江/福建/江西/安徽 | 115-122°E | 19-20 | 37-40 |
| 江苏/上海/山东 | 116-123°E | 20-21 | 38-41 |
| 辽宁/河北/北京/天津 | 117-125°E | 20-21 | 38-41 |
| 吉林/黑龙江 | 122-135°E | 21-23 | 41-45 |

> **丹江口市**（约 111°E）：6°带 Zone 19（中央经线 111°E），3°带 Zone 37（中央经线 111°E）。

## 5.5 投影带选择指南

| 对比项 | 6°带 | 3°带 |
|---|---|---|
| 带宽 | 6°经差 | 3°经差 |
| 边缘长度变形 | 约 1/800 | 约 1/3200 |
| 适用比例尺 | 1:2.5万及更小 | 1:1万及更大 |
| 中国覆盖 | 11个带(13-23) | 21个带(25-45) |
| 典型应用 | 中小比例尺制图 | 大比例尺测绘、工程测量 |

## 5.6 GDB→CASS→DWG 转换核心要点

基于 CASS11 实际工作流程：

1. **GDB 读取** → ArcGIS/ArcPy 读取要素类和属性表
2. **属性映射** → GIS编码 ↔ CASS六位编码 对照表
3. **几何转换** → 投影转换（如需要）
4. **CAS 文件生成** → 按 CASS 交换格式写入
5. **DWG 生成** → CASS 打开 CAS 文件，生成为 DWG

**关键注意事项：**
- 面状要素需闭合
- 属性值必须填入正确的字段位置
- 图层名需符合 CASS 标准
- 编码不能与 CASS 内置编码冲突

> **神经连接**：三种坐标系参数 → 第一篇 坐标系基础（椭球体Krasovsky/CGCS2000椭球参数对照）。高斯投影带号 → 第二篇 地图投影（3°/6°带中央子午线计算公式）。七参数/四参数转换 → 第二十一篇 GNSS测量（Bursa-Wolf七参数/平面四参数实战）、第六篇 CASS工作流（转换后坐标验证）。CGCS2000推广 → 第十四篇 新型基础测绘（CGCS2000作为统一空间基准）。

---

# 第六篇：CASS 实用工作流程（含编码体系深度解析）

> 来源：CASS11 安装目录逆向分析（layer.def / text.def / CodeField.db），2026-05-24
> 参考：GB/T 20257.1-2017 国家基本比例尺地图图式

## 6.1 CASS 编码体系深度解析（⭐核心知识）

### 6.1.1 layer.def 文件格式

文件位置：`C:\Program Files\CASS11 For AutoCAD 2022\sme\layer.def`

每行格式：
```
编码,图层,图块/线型,线宽,说明,CASS内部码,实体类型后缀
```
示例：
```
141101,JMD,continuous,0,建成房屋,310301003,JMD_M
141101-1,JMD,text,2,房屋结构注记,310301004,JMD_ZJ
141101-2,JMD,X2,0,地下房屋,310301006,JMD_X
```

### 6.1.2 编码后缀命名规则

| 后缀形式 | 含义 | DWG实体类型 | 示例 |
|---------|------|-------------|------|
| 无后缀（如`141101`） | 地物主体 | LWPOLYLINE面 / INSERT点块 | 建成房屋 |
| `-1`（如`141101-1`） | 属性注记 | TEXT/MTEXT | 房屋结构注记 |
| `-2`/`-3`/`-8`等 | 辅助线 | LWPOLYLINE线 | 地下房屋边界线 |
| 无后缀+第3列=`gcXXX` | 点符号块 | INSERT | 三角点(gc113) |

**实测验证**（2026-05-25，参考DXF `DLG373601498.dxf` 解剖）：
- **`141101-2` = 层数注记**（TEXT实体，文本如"2"/"7"/"8"），787个，非地下房屋边界线！
  - layer.def 中写"地下房屋"仅定义了该编码在表结构中的位置，实际数据中用于层数
- **`141101-1` = 结构注记**（TEXT实体，文本如"建"/"砖"/"钢"），3个
- 房屋面 LWPOLYLINE 的 xdata **仅含编码 `[(1000,'141101')]`**，不包含属性值
- CASS V 查询从附近的 TEXT 注记实体读取属性，**不是从 xdata**

### 6.1.3 实体类型后缀含义（第7列）

| 后缀 | 含义 | CASS识别方式 |
|------|------|-------------|
| `_M` | 面实体 | LWPOLYLINE closed=1，参与面查询 |
| `_D` | 点块实体 | INSERT，有定位点 |
| `_X` | 线实体 | LWPOLYLINE closed=0 |
| `_ZJ` | 注记实体 | TEXT，可被V查询读取属性 |
| `ASSIST` | 辅助线图层 | 不参与CASS查询，只用于绘图 |

### 6.1.4 text.def 注记规范

文件位置：`C:\Program Files\CASS11 For AutoCAD 2022\sme\text.def`

每行格式：
```
编码,图层,23(固定),字体样式,字高(1:1000比例尺下),说明
```
示例：
```
141101-1,JMD,23,XDXT,2,房屋结构注记
```
含义：编码`141101-1`的注记使用`XDXT`字体，字高2.0（1:1000下），实际字高需乘以比例尺因子。

### 6.1.5 CodeField.db 属性字段定义（⭐最重要）

文件位置：`C:\Program Files\CASS11 For AutoCAD 2022\system\CodeField.db`

这是CASS的**属性字典数据库**，V查询时弹出的属性对话框就是查的这里。

**关键表：**
| 表名 | 对应地物类型 |
|------|-------------|
| `RESPY` | 居民地及设施（含房屋） |
| `HYDPY` | 水系设施 |
| `TRAPY` | 交通设施 |
| `RESLN`/`RESPT`/`RESPY` | 居民地相关 |
| `VEGPY` | 植被土质 |
| `ZJ` | 注记类 |

**RESPY表关键字段（房屋类）：**

| 字段 | 含义 | 值格式 | 说明 |
|------|------|--------|------|
| `CASSCODE` | CASS编码 | `'141101'` | 对应layer.def主编码 |
| `FWCS` | 房屋层数 | `'M'`或`NULL` | **M=必填**，V查询时强制填写 |
| `DXFWCS` | 地下房屋层数 | `'M'`或`NULL` | 同上 |
| `JGLX` | 结构类型 | `'M,钢,钢筋混泥土,混合结构,砖(石)木'` | **M=必填**，逗号后接枚举值 |
| `YT` | 房屋用途 | `'C,住宅,工业交通仓储,...'` | C=必填 |
| `GD` | 高程 | `'C'` | C=有此属性字段 |

**字段值格式说明：**
- `NULL`：无此属性
- `'C'`：C=Chinese，有此属性字段（V查询对话框中显示）
- `'M'`：M=Must，必填字段（V查询时强制要求填写）
- `'M,值1,值2,...'`：必填，且值为逗号分隔的**枚举列表**（下拉选择）

### 6.1.6 xdata 格式规范（已验证）

CASS通过实体的扩展数据（xdata）识别地物编码：

```
(1001, "SOUTH")        ← AppID，必须
(1000, "141101")       ← 主编码（字符串）
(1000, "砖")           ← 可选：结构类型属性值
(1000, "2")            ← 可选：层数值
...
```

**注意：**
- 每个实体只能有一个`(1001, "SOUTH")`组
- 后面跟若干个`(1000, ...)`字符串组
- 编码必须带引号，是字符串类型
- **注记TEXT实体**的xdata编码也填**主编码**（如`141101`），不是`141101-1`

---

## 6.2 GDB → CASS DWG 转换规则

### 6.2.1 整体转换流程

```
GDB读取(ArcPy) → 编码映射 → 几何转换 → 属性注记生成 → DXF输出(ezdxf) → CASS打开
```

### 6.2.2 各要素类型转换规则

**点要素（GDB Point FC）→ DXF INSERT实体**
- 块名：查layer.def第3列（如`gc200`=测量控制点）
- 图层：查layer.def第2列（如`KZD`）
- xdata：`(1001,"SOUTH"), (1000, "131100")`

**线要素（GDB Line/Polyline FC）→ DXF LWPOLYLINE实体（closed=0）**
- 线型：查layer.def第3列（continuous / X2 / X7 等）
- 图层：对应layer.def第2列

**面要素（GDB Polygon FC）→ DXF LWPOLYLINE实体（closed=1）**
- 房屋面：continuous线型，LAYER=JMD，xdata编码=141101等
- 水系面：continuous线型，LAYER=SXSS
- **必须闭合**，且高程值正确

**属性注记（✅ 参考DXF实测验证 v7）**
以房屋（141101）为例：
1. **房屋面 LWPOLYLINE 的 xdata 仅含编码** `[(1000,'141101')]`，**不包含属性值**
2. **层数是独立的 TEXT 注记实体**，编码 `141101-2`，文本为层数值（如"2"）
3. **结构类型是独立的 TEXT 注记实体**，编码 `141101-1`，文本为结构类型（如"砖"）
4. 注记位置在房屋面内部（重心附近），字高约 2.0
5. **CASS V 查询从附近的 TEXT 注记实体读取属性**，不是从 LWPOLYLINE 的 xdata

**GDB字段到CASS注记的映射：**
| GDB字段 | 含义 | → CASS注记 | TEXT编码 | 值转换 |
|---------|------|-----------|----------|--------|
| `MATRL` | 原材料/结构 | 结构注记 | `141101-1` | 砖→砖(石)木, 砼→钢筋混泥土, 混→混合结构, 钢→钢 |
| `LAY` | 层数(SmallInteger) | 层数注记 | `141101-2` | 直接取整数字符串 |

**MATRL→CASS标准值映射表：**
```
砖/砖混/砖木 → 砖(石)木
砼/混凝土/RC → 钢筋混泥土
混/混合 → 混合结构
钢/钢结构 → 钢
石木/土木/木 → 砖(石)木
```
未知值保持原值，CASS V查询时会要求用户手动填写。

### 6.2.3 转换后验证清单

- [ ] DXF文件能用CASS 10.1直接打开（不是DWG后缀）
- [ ] V查询房屋面（JMD图层LWPOLYLINE）时，属性对话框显示结构和层数
- [ ] 图层颜色正确（JMD=洋红=6，SXSS=蓝色=5等）
- [ ] 点要素显示为gc200块（十字丝+圆圈）
- [ ] 注记TEXT在CASS中可被V查询识别
- [ ] 文件>500KB（防止164KB空文件）

---

## 6.3 测制地形图标准流程（CASS操作）

```
准备定显示区 → 展点 → 绘制平面图 → 绘制等高线(DTM) → 编辑与整饰
```

1. **准备**：设置比例尺、坐标系、图幅范围
2. **展点**：将DAT坐标文件中的点展绘到图上
3. **绘制平面图**：使用右侧屏幕菜单逐一绘制各地物
4. **绘制等高线**：建立DTM → 生成等高线 → 等高线注记 → 编辑
5. **编辑与整饰**：添加图廓、图例、比例尺

## 6.4 绘制地籍图流程

```
生成平面图 → 宗地属性处理 → 绘制宗地图 → 绘制地籍表格
```

## 6.5 工程应用关键模块

### 土方量计算
- **DTM法**：构建数字地面模型，对比填挖方
- **断面法**：沿断面线计算土方
- **方格网法**：将区域划分网格计算
- **等高线法**：基于等高线围成的体积

### 断面图绘制
- 根据里程文件和断面数据自动绘制
- 支持横断面和纵断面

### 公路曲线设计
- 支持缓和曲线、圆曲线
- 根据曲线要素文件自动生成

### 6.2.4 GDB→CASS 暗坑全指南（龙山镇项目实战全记录）⭐

> 基于龙山镇-2000.gdb 转 CASS 10.1 DXF 完整项目，v1→v8 迭代踩坑实录。2026-05-25

---

#### 一、ezdxf 库相关坑（5个）

| # | 坑 | 现象 | 根因 | 正确做法 |
|---|-----|------|------|----------|
| **1** | `.saveas('xxx.dwg')` 输出假DWG | CASS打开报"图形文件无效" | ezdxf 不管后缀名，输出永远是DXF文本格式（文件头 `0\nSECTION`），不是DWG二进制（AC1015） | ①输出后缀直接写 `.dxf`，CASS 10.1 支持直接打开 ✅ ②如需真DWG：用 ODA File Converter 批量转 |
| **2** | `doc.encoding` 不设GBK | CASS 打开后中文乱码/图层名乱码 | ezdxf 默认编码不是GBK | **必须** `doc.encoding = 'gbk'`，CASS 10.1 只认 GBK |
| **3** | `doc.header.hdrvars['$DWGCODEPAGE'] = 'ANSI_936'` | 部分 AutoCAD 版本中文仍乱码 | 仅设 encoding 不够，需同时设 DWGCODEPAGE | 两行都要写 |
| **4** | 跨文档 `ent.copy()` | entitydb 损坏，DXF 打不开 | ezdxf 实体不能跨 doc 复制 | 在目标 doc 中重新创建实体，不要 copy |
| **5** | 输出文件164KB空壳 | 转换完成但文件无实际内容 | ezdxf 在某些错误后输出空 DXF 最小骨架 | 转换后检查 `os.path.getsize() < 500KB` 视为异常 |

---

#### 二、CASS 编码体系暗坑（6个）

| # | 坑 | 现象 | 根因 | 正确做法 |
|---|-----|------|------|----------|
| **6** | 房屋属性写进xdata → CASS不读 | V 查询时属性对话框空白 | **CASS LWPOLYLINE xdata 只存编码**，属性值在**独立的 TEXT 注记实体**上 | 房屋面 xdata：仅 `[(1000,'141101')]`；另外两个 TEXT：`141101-2`=层数，`141101-1`=结构 |
| **7** | `141101-2` 含义误解 | layer.def 写"地下房屋"让人以为是辅助线 | 实测DXF：787个 `141101-2` TEXT实体全是层数注记（"2"/"7"/"8"），非地下房屋边界 | **以实测 DXF 为准，不要盲信 layer.def 的说明文字** |
| **8** | 编码后缀 `-1`/`-2` 规则有例外 | 以为 `-2` 都是辅助线 | `141101-2` 实际是 TEXT 注记（层数），不是辅助线 | **后缀规则是惯例非铁律**，必须参考 text.def + 实测DXF 验证 |
| **9** | xdata 写入空字符串或0编码 | CASS 不识别该实体 | xdata 中编码必须是非空字符串 | `if not code or code == '0': return` |
| **10** | CodeField.db 字段值格式解析错误 | 以为 `M` 是属性值 | `M` = Must（必填），不是实际值；`C` = Chinese（有此字段）；`M,砖,砼,混` = 必填+枚举列表 | 见 6.1.5 节字段值格式说明 |
| **11** | 房屋属性字段存在性不确定 | 不确定哪些 GDB FC 有 MATRL/LAY | 实测：仅 `JMDJSS_JMD_A` 有完整 MATRL+LAY（529/777条），`GGFWJSS`/`GKJSS`/`NYJSS`/`QTJZWJSS` 仅有 TYPE | 先用 arcpy 检查字段是否存在再读取 |

---

#### 三、线型系统暗坑（7个）

| # | 坑 | 现象 | 根因 | 正确做法 |
|---|-----|------|------|----------|
| **12** | X22_L(围墙)/X3_L(陡坎)未创建 | 围墙显示为实线，无齿状 | ACAD.LIN 有 X22/X3/X6 定义，但 layer.def 引用的是 `X22_l`（小写）变体 | ①从 ACAD.LIN 解析 pattern ②去掉 `_L`/`_1` 等后缀匹配基础线型 ③ezdxf 线型名大小写不敏感 |
| **13** | X41-X78 系列线型缺失 | 55个线型"无定义" | ACAD.LIN 仅含 X0-X40，X41+ 是 CASS 后续版本添加的自定义线型，存储在工作空间的 `.lin` 或 `.dwg` 模板中 | ①用 continuous 兜底 ②从 CASS 模板 `.dwt` 中导出 ③接受部分管线/境界/交通线型降级 |
| **14** | 线型后缀变体匹配失败 | `X22_l`、`X17_1`、`X41_2` 等匹配不到 pattern | `replace('_L', '')` 不够用，有 `_1`/`_2`/`_10` 等数字后缀 | 用后缀列表逐条尝试剥离：`['_L','_l','_1','_2',...,'_13']` |
| **15** | 大小写导致的误报缺失 | 报告 `X22_l` 缺失但 `X22_L` 已创建 | 集合差运算用精确匹配，ezdxf 内部大小写不敏感 | 缺失报告用 `.upper()` 大小写不敏感比较 |
| **16** | layer.def 线型列包含 gc 开头值 | `gc200` 等被当成线型处理 | 块名写在 layer.def 第3列时用 `gcXXX` 格式 | 解析 layer.def 时过滤 `linetype.startswith('gc')` 的条目 |
| **17** | ACAD.LIN 含 shape 定义无法直接用于 ezdxf | pattern 创建失败 | ezdxf 的 `pattern` 只接受纯数字 dash/gap 序列，不接受 `[SHAPENAME,shx]` 格式 | 解析时跳过 shape 段，只保留 `('dash', float)` 类型的段 |
| **18** | 线型在运行时创建但未传递 context | process_feature_classes 内 `ensure_linetype` 找不到 acad_patterns | 函数签名没传 `acad_patterns` 参数 | `setup_linetypes` 返回 `acad_patterns`，逐级传递到 `process_feature_classes` → `ensure_linetype` |

---

#### 四、ArcPy / GDB 数据处理坑（5个）

| # | 坑 | 现象 | 根因 | 正确做法 |
|---|-----|------|------|----------|
| **19** | 必须用 ArcGIS Pro 自带的 Python | 找不到 arcpy 模块 | 系统 Python 不带 arcpy | 路径：`C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe` |
| **20** | CLASID 字段格式 | 以为直接就是 FDB 码 | CLASID 是10位字符串，如 `"0141101000"`，实际FDB是 `"141101000"` | `fdb = sval[1:] if len(sval)==10 and sval[0]=='0' else sval` |
| **21** | Feature Dataset 嵌套结构 | `ListFeatureClasses()` 漏掉数据集内的FC | GDB 中 FC 可能在根目录也可能在 Feature Dataset 内 | 先 `ListDatasets()` 再递归 `ListFeatureClasses()` |
| **22** | Annotation FC 被当成要素类 | 转换时字段不存在报错 | Annotation 的 shapeType 也是 'Polygon' 但字段结构完全不同 | `desc.featureType == 'Annotation'` 判断后跳过，交给 `process_annotations` |
| **23** | 中心线要素无直接映射 | 映射表查不到 CLASID | 中心线要素的 CLASID 可能是变体 | 维护 `CENTERLINE_ALT_ENTITY` 字典兜底映射 |

---

#### 五、注记处理坑（3个）

| # | 坑 | 现象 | 根因 | 正确做法 |
|---|-----|------|------|----------|
| **24** | 注记对齐硬编码导致位置偏移 | 注记跑偏 | 之前版本 `halign=1(valign=2` 硬编码为居中 | 从 GDB Annotation FC 读取 `HorizontalAlignment` 和 `VerticalAlignment` 字段 |
| **25** | ArcGIS↔ezdxf 对齐值映射不一致 | 对齐方式错误 | ArcGIS 和 DXF 的对齐枚举值不同 | ArcGIS `0=Left→DXF 0=left`，ArcGIS `0=Top→DXF 3=top`，见代码中 `HALIGN_MAP`/`VALIGN_MAP` |
| **26** | 注记类的 TextString/FontSize/Angle 字段名不确定 | 找不到字段 | GDB Annotation FC 字段名可能大写/驼峰/下划线 | 用候选列表探测：`['TextString','TEXTSTRING','TEXT_STRING','Text']` |

---

#### 六、映射与数据质量坑（5个）

| # | 坑 | 现象 | 根因 | 正确做法 |
|---|-----|------|------|----------|
| **27** | 映射文件分隔符不是英文逗号 | `split(',')` 解析失败 | 文件用中文逗号 `\uff0c` | `split('\uff0c')` |
| **28** | 映射文件编码不是 UTF-8 | 读取乱码 | GBK 编码 | `open(file, encoding='gbk')` |
| **29** | TATC 图层不应导出 | 输出含大量无用地物 | TATC=图廓整饰，不属于地形图内容 | 映射解析时过滤 `layer == 'TATC'` |
| **30** | ASSIST 辅助图层不应混入主图层 | 查询结果混乱 | ASSIST 是辅助绘图用 | 映射解析时过滤 `layer.startswith('ASSIST')` |
| **31** | HEIGHT 字段全为 NULL | 试图读取建筑高度失败 | GDB 中 HEIGHT 字段存在但值全空 | 不要依赖 HEIGHT，仅用 MATRL（结构）+ LAY（层数） |

---

#### 七、脚本工程化坑（3个）

| # | 坑 | 现象 | 根因 | 正确做法 |
|---|-----|------|------|----------|
| **32** | 代码块覆盖（conversation context 截断导致） | 函数体内容混乱，A函数体内混入B函数的内容 | 多轮编辑时上下文截断，编辑匹配到错误位置 | 每次大改后运行语法检查 `py_compile`，比较函数签名与预期 |
| **33** | 大文件读取超时 | `parse_acad_lin_patterns` 读大 LIN 文件卡住 | 文件体积大但内容简单 | 没问题，`readlines` 即可 |
| **34** | 临时调试脚本堆积 | workspace 散落大量 `debug_*.py`/`test_*.py` | 调试时随手创建未清理 | 完成后统一 `Remove-Item debug_*.py, test_*.py` |

---

#### 八、核心工作流速查

```
GDB (ArcPy读取) 
  → FDB码映射 (CLASID去前导0 → 编码对照表) 
  → 几何转换 (Point→INSERT, Polyline→LWPOLYLINE, Polygon→closed LWPOLYLINE)
  → 线型设置 (layer.def → ACAD.LIN pattern → ezdxf linetype)
  → 属性注记 (MATRL→TEXT 141101-1, LAY→TEXT 141101-2)
  → 注记类处理 (GDB Annotation → TEXT + 对齐映射)
  → 编码写入 (xdata: SOUTH appid + (1000, code))
  → DXF输出 (gbk编码, R2010版本, as .dxf后缀)
  → 大小检查 (>500KB) 
  → CASS 10.1 打开验证
```

---

### 6.2.5 转换后验证清单（完整版）

- [ ] DXF文件能用CASS 10.1直接打开（**不是 `.dwg` 后缀！**）
- [ ] 文件大小 > 500KB（防止164KB空壳文件）
- [ ] V查询房屋面（JMD图层LWPOLYLINE closed），属性对话框**显示结构和层数**（关键！）
- [ ] V查询围墙实体（144302编码），**线型为齿状 X22_L** 而非 continuous
- [ ] V查询陡坎实体（204201/204202编码），线型为 X3_L/X6_L
- [ ] 图层颜色正确（JMD=6洋红, SXSS=5蓝, DLDW=11, DLSS=4, DGX=2黄, GCD=1红）
- [ ] 点要素显示为 gc200 块（十字丝+圆圈，非纯 POINT）
- [ ] 注记 TEXT 在 CASS 中可被 V 查询识别
- [ ] `141101-2` TEXT 显示为层数数字（如"2"），`141101-1` TEXT 显示为结构汉字（如"砖"）
- [ ] 线型缺失不导致致命错误（continuous 兜底可接受，优先保证X0-X40全覆盖）

> **神经连接**：CASS编码体系 → 第三篇 软件体系（六位码规则/cassconfig.db来源）、第四篇 数据格式（DAT/CAS文件编码承载）。GDB→CASS转换流程 → 第七篇 ArcGIS Pro核心（工程管理/数据导出）、第十二篇 ArcPy（批量转换脚本da游标）。属性注记策略 → 第十七篇 XDATA深度解析（SOUTH扩展属性 vs TEXT注记选择）。编码对照与验证 → 第十七篇 映射表模板+小样本验证框架。丹江口/龙山镇 → 全库实战案例锚点。

---


<!-- wm:坤图_GIS:V1.0 -->
