2018-Shapefiles-Good-Bad-Ugly
Shapefile:好、坏与丑
原文:Shapefiles: The Good, the Bad, and the Ugly
作者:Martin Davis
日期:2018年4月
概述
ESRI Shapefile 格式是 GIS 领域最广泛使用的矢量数据格式之一。尽管它已经存在了超过 30 年,但由于其普遍支持和简单性,仍然被大量使用。本文深入分析 Shapefile 的优点、缺点以及其令人头疼的问题。
好的方面(The Good)
1. 普遍支持
Shapefile 几乎被所有 GIS 软件支持:
- ArcGIS(创建者)
- QGIS
- MapInfo
- Google Earth
- 几乎所有空间数据库
这种普遍性使其成为数据交换的事实标准。
2. 简单高效
- 简单的表格模型:属性存储在简单的 DBF 表中
- 二进制浮点存储:坐标以高效的二进制格式存储
- 简单的索引:SHX 文件提供快速的要素访问
3. 相对较小的文件大小
对于简单数据,Shapefile 通常比 GML 或 KML 等格式更紧凑。
4. 成熟稳定
经过 30 多年的使用,格式规范稳定且有良好的文档支持。
坏的方面(The Bad)
1. 多文件结构
Shapefile 不是单个文件,而是一组文件:
.shp- 几何数据.shx- 几何索引.dbf- 属性数据.prj- 坐标系信息(可选).cpg- 字符编码(可选).sbn/.sbx- 空间索引(可选)
这种多文件结构容易导致文件丢失或不同步。
2. 字段名限制
DBF 格式限制字段名最多 10 个字符:
- 难以使用有意义的字段名
- 容易产生命名冲突
- 导入导出时可能截断字段名
3. 数据类型限制
DBF 只支持有限的数据类型:
- 浮点数
- 整数
- 日期
- 短文本(最多 254 字符)
不支持:
- 布尔类型
- 长文本
- 二进制数据
- 嵌套结构
4. 单一几何类型
每个 Shapefile 只能存储一种几何类型:
- Point
- Polyline
- Polygon
不能混合不同类型的几何图形。
5. 文件大小限制
Shapefile 有 2GB 的文件大小限制(某些实现支持 4GB,但不可靠)。
丑的方面(The Ugly)
1. 没有可靠的坐标系定义
.prj 文件是可选的,经常缺失或不正确:
- 没有强制的坐标系定义机制
- 投影信息容易丢失
- 不同软件可能以不同方式解释
.prj文件
2. 字符编码问题
没有标准的方式指定字符编码:
- 国际化数据容易出现乱码
.cpg文件经常被忽略- 不同软件可能使用不同的默认编码
3. 没有 NULL 值支持
DBF 格式不能很好地处理空值:
- 使用空字符串或零来表示缺失数据
- 无法区分"没有数据"和"数据为空"
4. 没有拓扑支持
Shapefile 不支持拓扑关系:
- 不能定义多边形之间的共享边界
- 不能表示网络连通性
- 不适合需要拓扑完整性的应用
5. 没有真正的 3D 支持
虽然可以存储 Z 值,但:
- 不支持真正的 3D 几何
- 不能表示复杂的 3D 形状
6. 过时的格式规范
格式设计于 1990 年代:
- 没有版本控制
- 没有归档支持
- 没有高级空间索引
- 没有压缩支持
替代方案
GeoPackage
- 基于 SQLite 的单文件格式
- 支持多种几何类型
- 内置空间索引
- 开放标准
GeoJSON
- 基于 JSON 的文本格式
- 易于阅读和编辑
- 广泛的 Web 支持
- 无二进制依赖
File Geodatabase
- ESRI 的现代替代方案
- 支持大文件和复杂数据
- 高级功能支持
- 但仍然是专有格式
GeoParquet
- 基于 Apache Parquet
- 高效的列式存储
- 适合大数据处理
- 现代的开放格式
何时仍然使用 Shapefile
尽管有这些限制,Shapefile 在以下情况下仍然有用:
- 数据交换:当不确定接收方的软件时
- 简单数据:小型、简单的数据集
- 遗留系统:与旧系统的兼容性
- 快速共享:当简单性比功能更重要时
最佳实践
如果必须使用 Shapefile:
1. 始终包含 .prj 文件
2. 使用 .cpg 文件指定 UTF-8 编码
3. 保持字段名简短但有意义
4. 记录字段名的完整含义
5. 分发时打包为 ZIP 文件
6. 考虑大文件拆分策略
总结
Shapefile 是 GIS 历史的重要组成部分,但技术进步已经使它落后于时代。对于新项目,建议使用更现代的格式如 GeoPackage 或 GeoJSON。但由于其普遍性,短期内 Shapefile 仍将继续存在。
正如 Martin Davis 在原文中所说:除非别无选择,否则请使用更好的格式。

浙公网安备 33010602011771号