管网CAD 转 JSON 实战记录

引言

随着智慧城市和智慧管网项目的日益普及,将传统的 CAD 图纸数据转换为 Web 前端友好的 JSON 格式,已成为我们经常面临的挑战。这个过程不仅涉及数据格式的转换,更重要的是对原始 CAD 数据进行高效、精准的清洗。本文将详细记录我如何将某区域的 CAD 管网图纸清洗并转换为 Web 前端友好的 JSON 数据,希望能为遇到类似问题的你提供一份实用的操作指南。

项目背景与资料概况

本次项目资料为某区域的管网 CAD 图纸,其中包含了地形地貌、地下建筑等多种不相关的图层。

CAD原始图纸

CAD 数据面临的挑战

在处理这份 CAD 图纸时,我们遇到了以下几个主要问题:

  1. 文件体积庞大:原始 CAD 文件非常大,对计算机性能(尤其是内存)要求较高,处理起来效率低下。
  2. 图层繁多复杂:图纸中包含大量与管网无关的图层,需要进行精细化筛选和清洗。
  3. 冗余信息干扰:需要处理的管网图层(如雨水、污水管网)中,包含大量流向箭头等多余线段,这些信息在转换为 JSON 后会增加数据量并干扰前端展示。

数据清洗与转换步骤

1. CAD 数据初步处理

首先,我们利用 CAD 的“选择相似”功能筛选出所需图层内容(例如雨水管网、污水管网),并将其复制到一个新的 CAD 文件中,确保坐标系不变。这一步旨在剥离不相关的图层,减少文件大小。

2. 清洗冗余流向箭头

在数据清洗过程中,我遇到了一个棘手的问题:管网上的流向箭头与管线本身在样式(线型、宽度)上几乎一致,难以区分。经过仔细观察,我发现所有箭头的尺寸是相同的。因此,我编写了一个 LISP 脚本来自动删除特定长度范围内的多段线,从而高效地去除了上万个不必要的流向箭头,极大地简化了数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(defun c:DelPLInRange ( / ss ent len target-ents min-len max-len cmdecho regenmode)
;; 定义长度范围
(setq min-len 1.118)
(setq max-len 1.19)

;; 保存系统变量
(setq cmdecho (getvar "CMDECHO"))
(setq regenmode (getvar "REGENMODE"))
(setvar "CMDECHO" 0)
(setvar "REGENMODE" 0)

(princ (strcat "\n正在扫描长度在 (" (rtos min-len 2 3) ", " (rtos max-len 2 3) ") 之间的多段线..."))

;; 选择所有多段线
(setq ss (ssget "_X" '((0 . "LWPOLYLINE,POLYLINE"))))

(if (null ss)
(princ "\n未找到任何多段线。")
(progn
(setq target-ents nil)
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i))))
(setq len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)))
;; 判断是否在开区间 (min-len, max-len)
(if (and (> len min-len) (< len max-len))
(setq target-ents (cons ent target-ents))
)
)

(if (null target-ents)
(progn
(princ (strcat "\n 未找到长度在 (" (rtos min-len 2 3) ", " (rtos max-len 2 3) ") 之间的多段线。"))
)
(progn
(princ (strcat "\n 找到 " (itoa (length target-ents)) " 条符合条件的多段线。"))

;; 用户确认
(initget "是否")
(setq ans (getkword "\n 是否删除这些多段线?[是/否] <否>: "))

(if (= ans "是")
(progn
(princ "\n 正在删除... 请稍候(数据量大时需耐心等待)...")
(foreach e target-ents
(entdel e)
)
(redraw)
(princ "\n✅ 删除完成!")
)
(princ "\n❌ 已取消删除。")
)
)
)
)
)

;; 恢复系统变量
(setvar "CMDECHO" cmdecho)
(setvar "REGENMODE" regenmode)
(princ)
)

这个 LISP 脚本极大地优化了数据,减少了不必要的信息量,为后续转换奠定了基础。

3. 导入奥维互动地图并转换为图层文件

将清洗后的 CAD 文件导入奥维互动地图,并将其转换为图层文件。

关键步骤: 在导入奥维时,务必勾选“合并连续线段”和“合并相邻的等距直线”选项。这一操作能有效减少图形要素数量,因为原始 CAD 图中部分管网可能由多段线断开表示,合并后能形成完整的几何对象,提高数据质量和处理效率。

奥维导入设置

4. 坐标转换与投影选择

在奥维中,点击“导入地图”后,进入“坐标转换”界面。选择“横轴墨卡托投影坐标”,然后根据实际情况选择对应的坐标系。

奥维坐标转换界面

这一步至关重要,需要根据您的项目实际情况来确定。例如,我的项目区域经纬度大致在 106°E, 29°N 附近,在 CAD 中对应的投影坐标为 356652, 373299。根据经验判断,这应属于 CGCS 2000_3_Degree_GK_Zone_36(3 度带第 36 带)

小贴士: 在 ArcGIS 等 GIS 软件中,如果投影坐标的横坐标前两位是 35,通常说明使用的是 3 度带;如果是 18,则可能是 6 度带。

选择合适的投影坐标后,点击确定即可完成转换。

奥维导入完成

5. 导出为 GeoJSON 格式

上述步骤针对单个管网图层(例如雨水管网)进行了详细说明。对于其他需要处理的图层,如污水管网、雨水井、污水井等,操作流程类似,只需重复数据清洗和导入转换过程即可。

所有图层处理完毕并导入奥维后,即可选择导出为 GeoJSON 格式。GeoJSON 是一种轻量级的地理空间数据交换格式,非常适合 Web 前端应用。

深入理解:高斯-克吕格投影带的选择

为了帮助大家更好地理解和选择合适的投影坐标系,这里提供一份详细的高斯-克吕格投影带选择指南。

经度 106°位于中国境内,选择合适的投影带需根据具体应用场景(如比例尺、测图精度要求)以及所使用的坐标系标准。以下是详细分析与建议:

一、判断适用的投影带类型

我国采用高斯-克吕格投影,分为 6 度带和 3 度带两种分带方式:

分带类型 每带经差 全球带数 适用比例尺
6 度带 60 带 1:2.5 万~1:50万
3 度带 120 带 1:1万及更大比例尺

二、计算 106°所属的投影带

  1. 6 度带计算
    公式: $N = \text{floor}((\text{经度} + 3) / 6) + 1$
    代入 106°: $106 \div 6 \approx 17.67 \rightarrow \text{取整为 } 17 \rightarrow \text{带号} = 17 + 1 = 18$

    • 第 18 带范围:102°~108°
    • 中央经线:105°
    • 106° 在此范围内,属于 6 度带第 18 带。
  2. 3 度带计算
    公式: $N = \text{floor}((\text{经度} + 1.5) / 3)$
    代入 106°: $106 \div 3 \approx 35.33 \rightarrow \text{取整为 } 35$

    • 第 35 带范围:103.5°~106.5°
    • 中央经线:105°
    • 106° 在此范围内,属于 3 度带第 35 带。

⚠️ 注意: 106.5°是边界,若经度 $>106.5°$,则进入第 36 带(106.5°~109.5°)。

三、如何选择?——根据用途推荐

应用场景 推荐分带 理由
中小比例尺地图(如1:5万、1:25万) 6 度带(第 18 带) 符合国家标准,数据兼容性好
大比例尺测绘、城市工程、1:1万地形图 3 度带(第 35 带) 精度更高,变形小,适用于高精度测量
GIS 分析、CAD 制图、坐标转换 优先使用 3 度带 更适合局部区域高精度建模

四、补充说明(以重庆为例)

  • 重庆市中心经度约 106.5°E,正好处于 6 度带第 18 带与 3 度带第 35 带的交界附近。
  • 实际工作中,重庆地区常用:
    • CGCS 2000_3_Degree_GK_Zone_35(3 度带第 35 带)
    • 或 CGCS 2000_GK_Zone_18(6 度带第 18 带)

📍 例如在 ArcGIS 中,若坐标横坐标前两位是 35,说明使用的是 3 度带;如果是 18,则是 6 度带。

结语

通过上述数据清洗、奥维导入与坐标转换、以及最终的 GeoJSON 导出,我们成功地将复杂的 CAD 管网图纸数据转化为 Web 前端可直接使用的友好格式。这个过程虽然涉及多个步骤和工具,但掌握其核心原理和操作技巧,将大大提高智慧管网项目的数据处理效率和质量。希望本文能为您在实际工作中提供有益的参考!
当然也可看出不仅仅是 json ,只要成功导入奥维就可以转换为 kml、shape file 等一系列的格式。

[!tip]
如有帮助,请收藏、点赞、评论、转发一条龙~
微信公众号:环境猫 er
CSDN : 细节处有神明
个人博客:https://maoyu92.github.io/


管网CAD 转 JSON 实战记录
https://maoyu92.github.io/2025/11/03/04 经验分享/复杂管网CAD文件 转 JSON 实战记录/
作者
陈文茂
发布于
2025年11月3日
许可协议