Esri 提供了两种用于存储地理信息的主要数据格式:shapefile 和地理数据库。 其中,Shapefile 为存储地理及属性信息提供了一种简单的格式。 正由于 shapefile 的简易性,使其成为一种流行的开放式数据转换格式。 凭借其简易性,shapefile 似乎已成为人们的必然选择,然而,其在地理数据库地址应用中仍存在局限性。 概括地说,其局限性包括以下几点:
- 地理数据不仅局限于 shapefile 可进行存储的简单要素和属性。 例如:在地理数据库中,可支持注记、属性关系、拓扑关系、属性域和子类型、坐标精度和分辨率以及很多其他功能,但在 shapefile 中则不支持这些内容。
- Shapefile 利用 dBASE 文件格式(.dbf 文件)来存储属性。而 dBASE 是一种非 Esri 格式,该格式是于二十世纪八十年代早期开发的,是当时在存储属性方面应用最广的格式。 然而,它的时代已悄然而逝,从那时起,数据制图表达方法方面的改进(如,Unicode 标准)不断涌现,以支持世界上大部分的书写系统。 这就是 shapefile 无法使用非英语语言有效存储信息的原因之一。
- 与地理数据库中的要素类不同,shapefile 不保留形状长度和形状面积字段。
Shapefile 不适用于主动数据库管理,它们不处理数据创建、编辑、版本化和存档的现代生命周期。
Shapefile 可能适用于以下情况:
- 导出数据供非 Esri 软件应用程序使用时。
- 要快速写入简单要素和属性时。
除以下列出的一些特例外,可以使用 shapefile 来存储简单的要素几何。 不过,shapefile 的属性存在问题。 例如,shapefile 无法存储空值,无法向上舍入数字,对 Unicode 字符串的支持不足,字段名称最长只能为 10 个字符,且无法在日期字段中存储时间。 此外,它们不支持在地理数据库中的某些功能,如:属性域和子类型。 因此,除非您的数据属性非常简单且不需要使用地理数据库功能,否则请不要使用 shapefile。
Shapefile 组件与文件扩展名
Shapefile 存储在三个或更多个具有相同前缀的文件中,且位于同一文件夹中。 使用 File Explorer 而非 ArcGIS Pro 查看该文件夹时,可以看到单个文件。
扩展名 | 描述 | 是否为必需项? |
---|---|---|
.shp | 用于存储要素几何的主文件。 此文件中不存储任何属性,仅包含几何。 | 是 |
.shx | .shp 文件的配套文件,用于存储 .shp 文件中各个要素 ID 的位置。 | 是 |
.dbf | 存储要素属性信息的 dBASE 表。 | 是 |
.sbn 和 .sbx | 存储要素空间索引的文件。 | 否 |
.atx | 为各 dBASE 属性索引而创建。 | 否 |
.ixs 和 .mxs | 读写 shapefile 的地理编码索引。 | 否 |
.prj | 存储坐标系信息的文件。 | 否 |
.xml | ArcGIS 的元数据;用于存储有关 shapefile 的信息。 | 否 |
Shapefile 限制
Shapefile 具有以下限制:
- 任何 shapefile 组件文件都有大小为 2 GB 的上限,可理解为可包含的点要素最多约为 7000 万个。 shapefile 中的线或面要素的数量取决于每个线或面中的折点数(一个折点相当于一个点)。
- Shapefile 也不包含类似于地理数据库要素类具有的 x,y 容差的信息。 两坐标系被视为同一坐标系之前,x、y 容差就是它们之间的最小距离。 当评估相同要素类中各要素之间的关系或评估多个要素类之间的关系时,会使用此 x、y 容差。 编辑要素时,也会经常使用它。 使用任意涉及元素比较(例如,叠加工具集中的工具、裁剪工具、按位置选择图层工具或任何将两个或多个要素类作为输入的工具)的操作时,需使用地理数据库要素类(包含 x,y 容差)而非 shapefile。
- 由于形状压缩方法的不同,shapefile 所占用的空间可能为文件或企业级地理数据库的三到五倍。
- Shapefile 支持多面体,但不支持以下多面体的高级功能:
- 纹理坐标
- 纹理及部分色带
- 光线法向量
- 与地理数据库要素类的空间索引相比,shapefile 的空间索引效率很低。 这就意味着,同地理数据库要素类相比,空间查询(如,选择面内的要素)耗时更长。 当处理大量要素时,其唯一的明显不足之处就是效率低。
- shapefile 不支持通过参数定义的曲线(也称为圆弧曲线)。 如创建圆弧中所述,参数曲线是通过编辑数据库要素类而创建的。 圆弧曲线利用数学公式绘制曲线。 当将含圆弧曲线的地理数据库要素类导出到 shapefile 中时,就可将弯曲要素变换为简单线要素,并使空间上靠近的折点捕捉到弯曲的形状。
属性限制
Shapefile 中的属性具有以下限制:
- 与其他格式不同,shapefile 以字符格式(而非二进制格式)存储数值型属性。 对于实数(即,包含小数位的数字),这可能会导致舍入误差。 因此,此限制不适用于形状坐标,而仅适用于属性。 下表列出了各属性数据类型的字段宽度。
地理数据库数据类型 dBASE 字段类型 dBASE 字段宽度(字符数) 对象 ID
数字
9
短整型
数字
4
长整型
数字
9
浮点型
浮点型
13
双精度
浮点型
13
文本
字符
254
日期
日期
8
dBASE 中的字段宽度 - 日期字段仅支持日期;不支持时间。
警告:
日期字段不支持时间是对执行时态分析的所有工具的严格限制。
- 字段名称的长度不能超过 10 个字符。
- 属性的最大记录长度为 4000 字节。 记录长度是用于定义全部字段的字节数,而非用于存储实际值的字节数。
- 最大字段数为 255。 若超出此上限,当转换为 shapefile 时会转换前 255 个字段。
- dBASE 文件必须至少包含一个字段。 当创建 shapefile 或 dBASE 表格时,默认会包含一个整型 ID 字段。
- dBASE 文件不支持 BLOB、GUID、全局 ID、坐标 ID 或栅格字段类型。
- dBASE 文件不支持 Where 子句,也不支持 SQL。
- 当保存编辑时,属性索引会被删除,并且必须重新创建属性索引。
默认情况下,在 ArcGIS Pro 中,dBASE 文件的字段名称和值支持 ANSI 字符集。 Esri 已针对 dBASE 文件新增了 Unicode 支持,可以为 Unicode 字段名称及字段值提供支持。 但此附加支持可能不适用于非 Esri 应用程序。 要支持其他字符集,请将 dbfDefault 注册表值设置为支持代码页面标识符。
字符串字段的长度属性因数据源而异。 在 dBASE 文件中,字段长度表示支持的字节数。 相反,在文件地理数据库表中,字段长度表示字符数。 这意味着,一个字段长度为 10 的 shapefile 仅可容纳三个 3 字节的汉字。 将包含多字节字符的表导出到 dBASE 表时,值可能不会按预期传输。 如果多字节字符的长度超出字段长度,则字段值将包含空值或意外值。
空值表示
shapefile 不支持空值。 如果将含有空值的要素类转换为 shapefile 或将数据库表转换为 dBASE 文件,则将按下表所述更改空值。
警告:
当将 shapefile 或 dBASE (.dbf) 文件用作工具的输入时,ArcGIS 无法确定字段值表示空值还是合法值。
包含空值的数据类型 | 空值替换 |
---|---|
数字(双精度型) - 当工具需要输出“空”、无穷大或 NaN(非数字)时 | -1.7976931348623158e+308(最大负值的 IEEE 标准) |
数字(长整型) - 当工具需要输出“空”、无穷大或 NaN(非数字)时 | -214748364 |
数字(双精度型和长整型)- 所有其他地理处理工具 | 0 |
文本 | “ ”(空白 - 单空格) |
日期 | 存储为零,但显示为 <空> |
不支持的功能
Shapefile 在工作空间或要素类级别无扩展数据类型, 从地理数据库要素类或其他格式转换为 shapefile 将导致以下内容丢失:
- 子类型
- 属性域
- 几何网络
- 拓扑
- 注记
形状长度和形状面积
对于存储在地理数据库中的线或面要素类,ArcGIS 会计算并维护 shape_length 和 shape_area 字段 当编辑地理数据库要素类中的线形状或面形状时,系统会自动更新 shape_length 和 shape_area 字段中的值。 但这些不适用于 shapefile。 即使 shapefile 具有 shape_area 或 shape_leng 字段,对 shapefile 进行编辑后,字段也不会更新。
Shapefile 和地理处理
大多数输出要素类的地理处理工具都支持将 shapefile 和地理数据库要素类作为输出格式。 同样,大多数输出表的工具都支持将 dBASE 文件 (.dbf) 和地理数据库表作为输出。
使用地理处理窗格中的工具时,该工具将自动生成输出要素类或表路径。 如果当前工作空间环境设置为文件夹而非地理数据库,则输出要素类路径将为 shapefile 或 dBASE 文件。 默认情况下,“当前工作空间”环境设置为地理数据库。
由于 shapefile 写入速度快,可加快模型运行速度,因此,在某些情况下,可将其作为模型的中间数据使用。 不过,写入文件地理数据库与写入 shapefile 的速度几乎相同,所以除非对运行速度的要求较高,否则文件地理数据库更适用于中间数据及输出数据。 将 shapefile 用于中间数据的替代方法是将要素写入内存工作空间。
空间参考和 shapefile
空间参考和地理处理阐述了使用地理处理工具时空间参考属性的重要性。 提供了很多地理处理环境,用于控制工具所使用的空间参考。 当工具的输出为 shapefile 时,不支持以下环境设置: