DXF 转 SHP 怎么转:将 DXF 转换为 Shapefile(从 CAD 到 GIS)

DXF 和 Shapefile 可以容纳相同的线,但它们是为不同工作而设计的。DXF 是图纸:图层上的实体,带有块、文字和填充,并且不知道自己位于地球上的哪个位置。Shapefile 是 GIS 图层:每个文件一种几何类型,一张属性表,以及一个可选的坐标系。把一种转换为另一种,意味着按几何类型拆分图纸、决定哪些内容成为属性,并附上 DXF 从未有过的坐标系。下面说明哪些内容会保留、哪些不会,以及如何离线完成。

为什么 DXF 无法与 Shapefile 一一对应

一个 Shapefile 只存储一种几何类型——点、线或多边形。DXF 则在同一图层上随意混合它们。任何转换首先要做的,就是把图纸拆分到最多三个文件中,每种几何类型一个。

Shapefile 还带有属性表(.dbf),并可选地带有坐标系(.prj)。DXF 没有这种形式的两者:它的“属性”就是图层名以及实体类型所隐含的信息,它也不声明任何坐标系。

哪些会保留,哪些不会

几何会保留:点、开放线和闭合轮廓分别成为点、折线和多边形。如果 Shapefile 以三维方式(PointZ、PolyLineZ、PolygonZ)而非平面方式写出,高程也能保留。

身份以属性的形式保留:对象名称及其来源的 DXF 图层成为表中的字段,因此图层结构会作为一列保留下来,可以据此筛选。

绘图样式不会保留:文字、块符号、填充图案、颜色和线型属于表现,而 Shapefile 只存储几何和属性。Shapefile 也没有真正的曲线,因此任何转换后都要检查圆弧和圆——它们必须变成一串顶点。

坐标系是最容易被遗漏的一步

DXF 中的坐标是真实的数值——通常是国家格网或 UTM——但文件并不说明它们属于哪个坐标系。没有 .prj 的 Shapefile 有同样的问题,而带着错误 .prj 的 Shapefile 更糟:它会信心十足地落在错误的位置。

因此,转换正是附上绘图所用坐标系的时机。这是一种指定,而不是转换:数值保持不变,只是声明了它们的含义。如果无法明确识别坐标系,宁可不写 .prj,也不要写一个猜测的。

在 STREAM 中逐步操作

1. 在坐标系与绘图所用坐标系一致的项目中工作。

2. 导入 DXF。它的图层会一并导入;对象非常多的图层为提速会以只读方式加载——右键单击该图层并选择“转为可编辑”,其对象才能被导出。

3. 隐藏不想输出的内容。只有可见对象会被导出。

4. 打开“地图输出”并选择 Shapefile。STREAM 为点、线和面分别写出一个三维 Shapefile,跳过没有对象的类型,并把每个对象的名称和图层写入属性表。量测结果也会导出:面积量测随多边形导出,其他量测随线导出。

5. 当项目坐标系能解析为 EPSG 代码时写出 .prj;否则文件不带 .prj,而不是带一个猜测的 .prj。

6. 在您的 GIS 中打开结果并检查三件事:图层落在正确的位置,属性表中有您期望的图层名,Z 值存在。

反向转换:从 Shapefile 到 DXF

反向转换同样可行。导入 Shapefile、GeoJSON 或 GeoPackage——每个图层成为一个图层,每个要素成为一个可在其上绘制、捕捉和编辑的对象——然后导出 DXF,图层会一并导出。

常见问题

为什么转换一个 DXF 会得到多个 Shapefile?

因为一个 Shapefile 只能容纳一种几何类型。同一图纸中的点、线和多边形会写入不同的文件;没有对象的类型会被跳过。

为什么转换后的 Shapefile 没有坐标系?

因为 DXF 不声明坐标系。请附上绘图所用的坐标系——这是指定,而不是转换。当项目坐标系能解析为 EPSG 代码时,STREAM 会将其写为 .prj,否则宁可不写 .prj 也不写猜测的。

转换会保留高程吗?

如果 Shapefile 以三维方式写出,就会保留。STREAM 写出 PointZ、PolyLineZ 和 PolygonZ 文件,每个顶点的 Z 值都会保留。

DXF 中的文字、块和填充会怎样?

它们属于图纸表现,而不是 GIS 几何,不会写入 Shapefile。对象名称及其 DXF 图层会作为属性保留。

可以把 Shapefile 转回 DXF 吗?

可以。导入 Shapefile、GeoJSON 或 GeoPackage,然后导出 DXF;每个 GIS 图层都会成为一个 DXF 图层。

在 STREAM 中进行 CAD 与 GIS 格式互转

原生 Windows · 完全离线 · 免费测试版

成果与报告导出