在 ArcGIS 中打开 shapefile 文件的属性表时,有时会发现 Shape 一列显示为 Polyline ZM。这一标识并非错误,而是 shapefile 几何类型的一种标准表达方式。理解其含义、成因以及在不同 GIS 平台间的兼容性问题,对于空间数据处理工作至关重要。
一、Polyline ZM 的基本概念
Shapefile 是一种广泛使用的矢量数据格式,其几何类型由点、线、面三大基础类型扩展而来。在 ArcGIS 的属性表中,Shape 列显示的类型名称反映了该要素类所存储的几何维度信息。
Polyline ZM 表示这是一个线要素(Polyline),并且其每个节点(Vertex)都可以存储 Z 值和 M 值。具体来说:
- Z 值(Z-value):代表高程信息,用于三维空间表达,例如地形表面上的管线、道路中心线等。
- M 值(M-value):代表测量值(Measure),通常用于线性参考系统,例如沿道路的里程桩号、沿管线的距离标记等。
在 shapefile 格式规范中,几何类型通过类型代码来区分。Polyline 的基础类型代码为 3,而带有 Z 值的 Polyline Z 类型代码为 13,带有 M 值的 Polyline M 类型代码为 23,同时带有 Z 和 M 值的 Polyline ZM 类型代码为 33。这一编码体系由 ESRI 在 1998 年发布的 shapefile 技术白皮书中定义,至今仍是各 GIS 软件实现 shapefile 读写的基础依据。
二、Polyline ZM 的成因
Shapefile 中出现 Polyline ZM 类型,通常源于以下几种情况:
1. 创建时主动选择了 Z 值和 M 值
在 ArcGIS 中新建 shapefile 时,创建对话框会提供是否包含 Z 值和 M 值的选项。如果用户在创建时勾选了「Coordinates include Z values」和「Coordinates include M values」,生成的线要素类就会是 Polyline ZM 类型。这是最常见、也最直接的成因。
2. 数据转换或导入时保留了原始维度信息
从其他数据源导入或转换数据时,如果源数据本身包含 Z 值和 M 值(例如从 CAD 文件、地理数据库要素类、或带有高程属性的 GPS 轨迹数据导入),ArcGIS 在输出为 shapefile 时可能会自动保留这些维度信息,从而生成 Polyline ZM 类型。
3. 使用了带有 Z/M 输出的 geoprocessing 工具
某些地理处理工具在输出线要素时,会默认继承输入要素的 Z 值和 M 值。例如使用 Buffer、Intersect、Clip 等工具处理带有 Z/M 的线数据时,输出结果可能同样是 Polyline ZM 类型。
三、Polyline ZM 在 MapGIS 中的兼容性问题
用户反馈将 Polyline ZM 类型的 shapefile 导入 MapGIS 进行格式转换时,数据不显示,恢复窗口也没有反应,关闭时无保存提示。这一现象反映了不同 GIS 平台之间对 shapefile 扩展类型的支持差异。
MapGIS 作为国内广泛使用的 GIS 软件,其对 shapefile 格式的支持主要覆盖基础的 Point、Polyline、Polygon 类型以及部分 Z 类型。对于同时包含 Z 值和 M 值的 Polyline ZM 类型,部分版本的 MapGIS 可能无法正确解析其几何结构,导致数据加载失败或显示异常。
从技术层面分析,Polyline ZM 的 shapefile 在 .shp 主文件中,每个要素的记录结构比普通 Polyline 多出 Z 值数组和 M 值数组两个字段。如果软件在读取时未正确识别类型代码 33,或者未按规范跳过 Z/M 数组的字节偏移,就会导致解析错位,进而出现无法显示、窗口无响应等问题。
四、解决方案:将 Polyline ZM 转换为普通 Polyline
针对 MapGIS 无法正常读取 Polyline ZM 数据的问题,最直接的解决办法是在 ArcGIS 中将数据转换为不含 Z 值和 M 值的标准 Polyline 类型,然后再导入 MapGIS。
方法一:使用 Copy Features 工具并禁用 Z/M 值
这是最常用的方法,操作步骤如下:
- 打开 ArcToolbox,依次展开 Data Management Tools → Features,双击 Copy Features 工具。
- 在 Input Features 中选择需要转换的 Polyline ZM 数据。
- 在 Output Feature Class 中指定输出路径和名称。
- 点击工具对话框底部的 Environments 按钮,展开环境设置。
- 在 Z Values 和 M Values 两个选项中,分别将输出设置为 Disabled。
- 点击确定运行工具,输出的 shapefile 即为不含 Z 值和 M 值的普通 Polyline 类型。
方法二:使用 Feature Class to Shapefile 工具
如果源数据存储在地理数据库(Geodatabase)中,也可以使用 Feature Class to Shapefile 工具进行转换。同样需要在环境设置中禁用 Z 值和 M 值,以确保输出的 shapefile 为普通 Polyline 类型。
方法三:在 ArcGIS Pro 中使用导出功能
在 ArcGIS Pro 中,可以右键点击图层,选择 Data → Export Features。在导出对话框的 Geometry 选项中,将 Include Z values 和 Include M values 的勾选取消,即可输出普通 Polyline 类型的 shapefile。
五、Z 值和 M 值的应用场景与保留价值
虽然 Polyline ZM 在跨平台转换时可能带来兼容性问题,但 Z 值和 M 值本身具有重要的应用价值,不应在数据处理中盲目丢弃。
Z 值的典型应用
- 三维可视化:在 ArcScene 或 ArcGIS Pro 的三维场景中,带有 Z 值的线要素可以直接以真实高程进行展示,例如地下管线、输电线路、山区道路等。
- 地形分析:带有 Z 值的线要素可以与 DEM 数据进行叠加分析,用于剖面生成、坡度计算等。
- BIM 与 GIS 集成:在建筑信息模型(BIM)与 GIS 的融合应用中,Z 值是连接两者空间基准的关键维度。
M 值的典型应用
- 线性参考系统(LRS):M 值最常见的用途是建立线性参考系统,用于道路、铁路、管线等线性设施的管理。例如,一条高速公路的 M 值可以表示从起点开始的里程数。
- 动态分段:基于 M 值可以进行动态分段分析,在不分割物理要素的情况下,按属性区间进行查询和展示,例如查找某条道路上 50 公里至 80 公里之间的路段。
- 事件定位:交通事故、路面病害、设施巡检等点事件可以通过 M 值精确地定位到线要素上的具体位置。
六、Shapefile 几何类型体系总览
为便于理解和识别,下表列出了 shapefile 格式中常见的几何类型及其类型代码:
| 几何类型 | 类型代码 | 说明 |
|---|---|---|
| Null Shape | 0 | 空几何,无具体图形 |
| Point | 1 | 点要素 |
| Polyline | 3 | 线要素,不含 Z/M |
| Polygon | 5 | 面要素,不含 Z/M |
| MultiPoint | 8 | 多点要素,不含 Z/M |
| Point Z | 11 | 点要素,含 Z 值 |
| Polyline Z | 13 | 线要素,含 Z 值 |
| Polygon Z | 15 | 面要素,含 Z 值 |
| MultiPoint Z | 18 | 多点要素,含 Z 值 |
| Point M | 21 | 点要素,含 M 值 |
| Polyline M | 23 | 线要素,含 M 值 |
| Polygon M | 25 | 面要素,含 M 值 |
| MultiPoint M | 28 | 多点要素,含 M 值 |
| Point ZM | 31 | 点要素,含 Z 值和 M 值 |
| Polyline ZM | 33 | 线要素,含 Z 值和 M 值 |
| Polygon ZM | 35 | 面要素,含 Z 值和 M 值 |
| MultiPoint ZM | 38 | 多点要素,含 Z 值和 M 值 |
七、主要 GIS 软件对 Polyline ZM 的支持情况
不同 GIS 软件对 shapefile 中 Z/M 维度的支持程度存在差异,了解这些差异有助于预判数据交换中可能出现的问题:
| 软件/平台 | Polyline ZM 读取 | Polyline ZM 写入 | 备注 |
|---|---|---|---|
| ArcGIS Desktop / Pro | 完整支持 | 完整支持 | 原生支持 Z/M 值的创建、编辑与分析 |
| QGIS | 完整支持 | 完整支持 | 可在图层属性中查看和管理 Z/M 值 |
| MapGIS | 部分版本支持有限 | 支持有限 | 建议先转换为普通 Polyline 再导入 |
| SuperMap | 支持 | 支持 | 对 Z 值支持较好,M 值支持视版本而定 |
| GeoServer | 支持读取 | 支持输出 | WFS 服务可配置是否输出 Z/M 维度 |
| PostGIS | 支持 | 支持 | 通过几何类型修饰符(如 LINESTRINGZM)存储 |
八、数据转换中的注意事项
在处理 Polyline ZM 数据的转换时,需要注意以下几个问题:
1. 转换前备份原始数据
禁用 Z/M 值的转换操作会永久性地丢弃这些维度信息。如果后续还需要使用 Z 值或 M 值进行分析,建议在转换前备份原始数据,或同时保留两个版本。
2. 检查属性表是否有依赖 Z/M 的字段
有些数据会在属性表中单独存储高程或里程字段,这些字段与几何中的 Z/M 值可能存在对应关系。转换后应检查这些属性字段是否仍然有效,避免数据不一致。
3. 注意坐标系统的一致性
Z 值的高程基准与水平坐标系统可能不同。在转换或投影时,需要确认高程基准是否与水平基准匹配,避免三维分析结果出现偏差。
4. 批量转换时的效率问题
如果需要批量转换多个 Polyline ZM 数据,可以使用 ArcGIS 的 Batch 模式或编写 Python 脚本调用 arcpy.CopyFeatures_management 函数,并在环境设置中统一禁用 Z/M 值,以提高处理效率。
九、常见问题解答
Q1:为什么我的 shapefile 在 ArcGIS 中显示为 Polyline,但导入 MapGIS 后仍然有问题?
即使 ArcGIS 中显示为普通 Polyline,也需要确认 shapefile 的 .shp 文件头中的类型代码确实为 3。有时数据在创建时虽然未勾选 Z/M 选项,但后续编辑或处理过程中可能被意外赋予了 Z/M 值。可以使用 ArcGIS 的 Check Geometry 工具或第三方 shapefile 查看器确认实际的类型代码。
Q2:能否在 MapGIS 中直接处理 Polyline ZM 数据?
取决于具体的 MapGIS 版本。较新的 MapGIS 版本对 shapefile 的支持有所改进,但稳妥的做法仍然是在 ArcGIS 或 QGIS 中先完成类型转换,再导入 MapGIS 进行后续处理。
Q3:转换后的数据是否会丢失精度?
禁用 Z/M 值只影响几何中的 Z 维度和 M 维度,不会影响 X、Y 坐标的精度。如果属性表中存有高程或里程信息,这些字段在转换过程中不会受到影响。
Q4:QGIS 中如何查看和移除 Z/M 值?
在 QGIS 中,可以通过 Processing Toolbox 中的 Drop M/Z values 工具(位于 Vector geometry 分类下)快速移除几何中的 Z 值和 M 值,输出为普通 Polyline 类型。
十、总结
Shapefile 中 Shape 列显示为 Polyline ZM,说明该线要素类的每个节点都具备存储 Z 值(高程)和 M 值(测量值)的能力。这一类型在 ArcGIS 中完全正常,但在导入 MapGIS 等对 ZM 类型支持有限的软件时,可能出现无法显示或转换失败的问题。
解决这一兼容性问题的核心方法是:在 ArcGIS 中使用 Copy Features 等工具,在环境设置中禁用 Z 值和 M 值,将数据转换为标准 Polyline 类型后再进行跨平台交换。同时,在决定是否丢弃 Z/M 信息之前,应充分评估这些维度数据在三维分析、线性参考等应用中的价值,避免因格式转换而造成不可逆的信息损失。

