shapefile 输出的地理处理注意事项
多年以来,Esri 研发了三种用于存储地理信息的主要数据格式:coverage、shapefile 以及地理数据库。其中,Shapefile 为存储地理及属性信息提供了一种简单的格式。正由于 shapefile 的简易性,使其成为一种非常流行的开放式数据转换格式。凭借其简易性,shapefile 似乎已成为人们的必然选择,然而,其在地理数据库地址应用中仍存在局限性。因此,使用 shapefile 时,应注意其局限性。概括如下:
地理数据不仅仅局限于 shapefile 可存储的简单要素和属性。例如:在地理数据库中,可支持注记、属性关系、拓扑关系、属性域和子类型、坐标精度和分辨率以及很多其他功能,但在 shapefile 中则不支持这些内容。
由于 shapefile 是一种广泛用于数据转换的开放式格式,因此,许多非 Esri 软件包都可输出 shapefile。(欲了解 shapefile 格式规范,请参阅 http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf。)遗憾的是,这些软件包并不总能创建格式正确的 shapefile。或许,您已遭遇过从其他源接收受损 shapefile 的麻烦。
Shapefile 利用 dBASE 文件格式(.dbf 文件)来存储属性。而 dBASE 是一种非 Esri 格式,该格式是于二十世纪八十年代早期开发的,是当时在存储属性方面应用最广的格式。然而,它们的时代已悄然而逝,从那时起,数据制图表达方法方面的改进(如,Unicode 标准)不断涌现,以支持世界上大部分的书写系统。这就是 shapefile 无法使用非英语语言有效存储信息的原因之一。
与地理数据库中的要素类不同,ArcGIS 不对形状长度和形状面积字段进行计算和维护。
正因为存在这些(或更多)问题,如果选用 shapefile 进行活动数据库管理将显得捉襟见肘 - 它们无法处理现今数据的创建、编辑、版本管理及归档的生命周期。
几何限制
任何 shapefile 组件文件都有大小为 2 GB 的上限,可理解为可包含的点要素最多约为 7000 万个。shapefile 中可存储的线或面要素的实际数量取决于每个线或面中的折点数(一个折点相当于一个点)。
Shapefile 也不包含类似于地理数据库要素类 x、y 容差的信息。两坐标系被视为同一坐标系之前,x、y 容差就是它们之间的最小距离。当评估相同要素类中各要素之间的关系或评估多个不同要素类之间的关系时,会使用此 x、y 容差。编辑要素时,也会经常使用它。若所要执行的任意类型的操作涉及元素之间的比较(例如,使用叠加工具、裁剪工具、按位置选择图层工具或任何将两个或多个要素类作为输入的工具),则应使用地理数据库要素类(包含 x、y 容差)而非 shapefile。
由于形状压缩方法的不同,shapefile 所占用的空间可能为文件地理数据库或 SDE 的三到五倍。
Shapefiles 支持多面体,但不支持以下多面体的高级功能:
纹理坐标
纹理及部分色带
光线法向量
shapefile 的空间索引不足以与地理数据库要素类的空间索引进行对比。这就意味着,同地理数据库要素类相比,空间查询(如,选择面内的要素)耗时更长。当处理大量要素时,其唯一的明显不足之处就是效率低。
shapefile 不支持通过参数定义的曲线(也称为圆弧曲线)。如创建曲线中所述,将通过编辑数据库要素类来创建参数曲线。圆弧曲线利用数学公式绘制曲线。若您将含圆弧曲线的地理数据库要素类导出到 shapefile 中,就可将弯曲要素变换为简单线要素,并使空间上靠近的折点捕捉到弯曲的形状。
属性限制
与其他格式不同,shapefile 以字符格式(而非二进制格式)存储数值型属性。对于实数(即,包含小数位的数字),这可能会导致舍入误差。因此,此限制不适用于形状坐标,而仅适用于属性。下表列出了各属性数据类型的字段宽度。
地理数据库数据类型 | dBASE 字段类型 | dBASE 字段宽度(字符数) |
---|---|---|
对象 ID | 数字 | 9 |
短整型 | 数字 | 4 |
长整型 | 数字 | 9 |
转为浮点型 | 转为浮点型 | 13 |
双精度 | 转为浮点型 | 13 |
文本 | 字符 | 254 |
日期 | 日期 | 8 |
dBASE 中的字段宽度
dBASE 中的字段宽度
dBASE 文件标准仅支持其字段名称及字段值中的 ANSI 字符。Esri 已针对 dBASE 文件新增了大量 Unicode 支持,以存储 Unicode 字段名称及字段值。但此附加支持仅适用于 ArcGIS,在非 Esri 应用程序中可能不提供这些支持。对于 Esri 来说,对 dBASE 中 Unicode 的支持是一个持续进行的过程,这就意味着,新问题将不断出现,也将不断地加以解决。
日期字段仅支持日期。它们不支持时间。
日期字段仅支持日期。它们不支持时间。
字段名称不能超过 10 个字符。
属性的最大记录长度为 4000 个字节。记录长度是用于定义全部字段的字节数,而非用于存储实际值的字节数。
最大字段数为 255。若超出此上限,当转换为 shapefile 时只会转换前 255 个字段。
dBASE 文件必须至少包含一个字段。当您创建新 shapefile 或新 dBASE 表时,默认会创建一个整数 ID 字段。
dBASE 文件不支持类型 blob、guid、全局 ID、坐标 ID 或栅格字段类型。
dBASE 文件不支持 WHERE 子句,也不支持 SQL。
当您保存所做编辑时属性索引会被删除,因此必须重新创建属性索引。
不支持的功能
Shapefile 在工作空间或要素类级别无扩展数据类型,因此,从地理数据库要素类或其他格式转换为 shapefile 时会导致下列数据丢失:
子类型
属性域
几何网络
拓扑
注记
形状长度和形状面积
对于存储在地理数据库中的线或面要素类,ArcGIS 会计算并维护 shape_length 和 shape_area 字段;也就是说,编辑地理数据库要素类中的线形状或面形状时,系统会重新计算 shape_length 和 shape_area 字段中的值以反映对要素所做的编辑。但这不适用于 shapefile。即使 shapefile 具有 shape_area 或 shape_leng 字段,对 shapefile 进行编辑后,字段也不会更新