简介:多年来,ESRI开发了三种主要的地理信息数据存储格式:coverage, shapefile,以及geodatabase。其中,shapefile是一个简单的,非拓扑的格式,用来存储地理和属性信息。正是由于它的简单,shapefile是一种非常常用的公开数据转换格式。尽管shapefile因为简单而被选用,但同时它的使用也受到一定的限制:
- 地理数据不仅仅是shapefile所能存储的要素和属性。其它的还有注记,属性联系,拓扑关系,属性值域和子类,坐标精度和分辨率,等等由geodatabase支持而shapefile无法支持的能力。
- Shapefile是一个开放格式,常用于数据转换,很多非ESRI的软件包能输出shapefile。你可以在网页http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf找到shapefile的格式规范,但是很多软件包生成的shapefile格式并不完全正确。你也许已经遇到很多次这样的经历:从其他源找来的shapefile是损坏的。
- Shapefile使用的是dbase表格来存储属性数据。Dbase是八十年代早期流行的数据库软件,但是由于缺乏后续的数据表达提升,它在存储处理非英文信息时表现的不是那么好。
这些问题都表明shapefile并不是一个很好的选择。那什么时候还是该用它呢?
- 导出数据到非ESRI软件应用中;
- 导出数据到ArcView GIS 3或ArcInfo工作站中使用;
- 当需要快速地存储写入简单要素和属性,如地处理服务中。但必须注意它的限制。
什么时候不该使用shapefile呢?
Shapefile对于存储简单的要素几何是可以接收的。但是,存储属性时它有一些严重的问题。例如,它不能存储null值,对数值进行四舍五入,对unicode字符串的支持很差,不允许字段名字超过10个字符,不能在一个字段内同时存储日期和时间。这些都是主要问题,而且它们不支持值域子类等地理数据库支持的能力。所以除非你的数据属性非常简单而且不需要地理数据库提供的那些能力,通常不要使用shapefile。
Shapefile 的构成
Shapefile存储为同一文件夹下同名而不同后缀的三个或更多的文件。在windows资源管理器下你就可以看到各个的组成文件。
后缀名 描述
.shp 存储要素几何的主文件,不存储属性
.shx .shp的伴生文件,存储各个要素的ID在shp文件中的位置
.dbf dBASE表格,存储要素的属性信息
.sbn, .sbx 存储要素的空间索引的文件
.atx 存储各个在ArcCatalog中创建的dBASE属性索引
.ixs, .mxs 地理编码索引
.prj 存储坐标系统信息的文件
.xml ArcGIS元数据;存储关于shapefile的信息
几何缺陷
- 任何构成shapefile的子文件都不能超过2gb,也就是大约7千万个点要素。
- Shapefile不像地理数据库要素类,它不包含xy限差(坐标被认为相同的最大差异)。
- 同样多的要素,由于压缩方法,shapefile可能是文件地理数据库的3-5倍大小。
- Shapefile尽管支持多片,但不支持材质坐标、材质和部分颜色以及照明法线等
- Shapefile的空间索引相对(地理数据库)低效。所以数据量大时查询很费时。
- Shapefile不支持由参数定义的曲线
属性缺陷
- Shapefile以字符格式而非二进制格式存储数值属性。对于实数,这会导致舍入错误。
- dBASE文件标准中字段名和存储的值仅仅支持ANSI字符。ESRI对之进行了扩展以便支持Unicode,但这个支持仅存在于ArcGIS中,其他非ESRI的应用层序并不支持。
- dbase字段支持日期和时间,但不能在同一字段中
- 字段名字不能超过10个字符
- 每条记录的字段宽度不能超过总计4000字节
- 最多只能有255个字段
- Dbase文件必须至少包含一个字段
- Dbase文件不支持blob,guid,global ID,coordinate ID,或raster等字段类型。
- 除了where短句外对SQL的支持非常少
- 保存编辑是会自动删除属性索引,你必须重新建立
NULL值的表示
Shapefile不支持null值。将包含null值的要素类转为shapefile,将根据字段类型的不同转变为0值,” “值,或者非常大的负数(-1.7976931348623158e+308)。如果这些值用于后续运算,必须先进行合理处理!!