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 · 完全离线 · 免费测试版