shp格式详解(⼀)
⼀、简介
ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的空间数据开放格式。⽬前,该⽂件格式已经成为了地理信息软件界的开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。Shapefile也是重要的交换格式,能够在ESRI与其他公司的产品之间进⾏数据互操作。
Shapefile⽂件⽤于描述⼏何体对象:点、折线与多边形。例如,Shapefile⽂件可以存储井、河流、湖泊等空间对象的⼏何位置。除了⼏何位置,shp⽂件也可以存储这些空间对象的属性,例如河流的名字、城市的温度等等。
⼆、概览
Shapefile属于⼀种⽮量图形格式,它能够保存⼏何图形的位置及相关属性。但这种格式没法存储地理数据的拓扑信息。Shapefile在九⼗年代初的ArcView GIS的第⼆个版本被⾸次应⽤。⽬前,许多⾃由的程序或商业的程序都可以读取Shapefile。
Shapefile是⼀种⽐较原始的⽮量数据存储⽅式,它仅仅能够存储⼏何体的位置数据,⽽⽆法在⼀个⽂件之中同时存储这些⼏何体的属性数据。因此,Shapefile还必须附带⼀个⼆维表⽤于存储Shapefile中每个
⼏何体的属性信息。Shapefile中许多⼏何体能够代表复杂的地理事物,并为他们提供强⼤⽽精确的计算能⼒。
Shapefile⽂件指的是⼀种⽂件存储的⽅法,实际上该种⽂件格式是由多个⽂件组成的。其中,要组成⼀个Shapefile,有三个⽂件是必不可少的,它们分别是".shp", ".shx"与 ".dbf"⽂件。表⽰同⼀数据的⼀组⽂件其⽂件名前缀应该相同。例如,存储⼀个关于湖的⼏何与属性数据,就必须有lake.shp,lake.shx与lake.dbf三个⽂件。⽽其中“真正”的Shapefile的后缀为shp,然⽽仅有这个⽂件数据是不完整的,必须要把其他两个附带上才能构成⼀组完整的地理数据。除了这三个必须的⽂件以外,还有⼋个可选的⽂件,使⽤它们可以增强空间数据的表达能⼒。所有的⽂件名都必须遵循MS DOS的8.3⽂件名标准(⽂件前缀名8个字符,后缀名3个字符,如shapefil.shp),以⽅便与⼀些⽼的应⽤程序保持兼容性,尽管现在许多新的程序都能够⽀持长⽂件名。此外,所有的⽂件都必须位于同⼀个⽬录之中。
必须的⽂件:
.shp — 图形格式,⽤于保存元素的⼏何实体。
.shx — 图形索引格式。⼏何体位置索引,记录每⼀个⼏何体在shp⽂件之中的位置,能够加快向前或向后搜索⼀个⼏何体的效率。
.dbf — 属性数据格式,以dBase III+ 的数据表格式存储每个⼏何形状的属性数据。
其他可选的⽂件:
.prj — 投帧式,⽤于保存地理坐标系统与投影信息,是⼀个存储well-known text投影描述符的⽂本⽂件。
.sbn and .sbx — ⼏何体的空间索引
.fbn and .fbx — 只读的Shapefiles的⼏何体的空间索引
.ain and .aih — 列表中活动字段的属性索引。
.ixs — 可读写Shapefile⽂件的地理编码索引
.mxs — 可读写Shapefile⽂件的地理编码索引(ODB格式)
.atx — .dbf⽂件的属性索引,其⽂件名格式为lumnname.atx (ArcGIS 8及之后的版本)
.l — 以XML格式保存元数据。
.cpg — ⽤于描述.dbf⽂件的代码页,指明其使⽤的字符编码。
在每个.shp, .shx与.dbf⽂件之中,图形在每个⽂件的排序是⼀致的。也就是说,.shp的第⼀条记录与.shx及.dbf之中的第⼀条记录相对应,如此类推。此外,在.shp与.shx之中,有许多字段的字节序是不⼀样的。因此⽤户在编写读取这些⽂件格式的程序时,必须⼗分⼩⼼地处理不同⽂件的不同字节序。
Shapefile通常以X与Y的⽅式来处理地理坐标,⼀般X对应经度,Y对应纬度,⽤户必须注意X,Y的顺序。
三、Shapefile图形格式 (.shp)
Shapefile格式的主⽂件包含了地理参照数据。该⽂件由⼀个定长的⽂件头和⼀个或若⼲个变长的记录数据组成。每⼀条变长数据记录包含⼀个记录头和⼀些记录内容。详细的数据存储格式由Esri Shapefile技术描述提供。注意,虽然Shapefile⽂件的后缀名与AutoCAD的图形字体源格式它们的⽂件后缀名相同的,都是.shp ,请不要把它们混淆。
主⽂件头包含17个字段,共100个字节,其中包含九个4字节(32位有符号整数,int32)整数字段,紧接着是⼋个8字节(双精度浮点数)有符号浮点数字段。
然后这个⽂件包含不定数⽬的变长数据记录,每个数据记录以⼀个8字节记录头开始:
在记录头的后⾯就是实际的记录:
变长记录的内容由图形的类型决定。Shapefile⽀持以下的图形类型:
在普通的使⽤中,Shapefile通常包含点、折线与多边形。带有Z坐标的形状是三维的。带有M坐标的形
状是包含⼀个⽤户指定的测量值,该测量值定义在每⼀个点坐标之上。三维的Shapefile⼗分罕见。此外,实际应⽤中通常,Shapefile的M测量值这个功能已经被其他功能更加
强⼤和稳健的数据库取代,Shapefile⼀般只负责⼏何数据。
四、Shapefile图形索引格式(.shx)
Shapefile的⽂件索引包含与.shp⽂件相同的100个字节的⽂件头,然后跟随着不定数⽬的8字节定长记录,每个记录都有两个字段。
因为这个图形索引每个数据项都是定长的,因此程序只要在这个图形索引中向前或向后遍历,读取索引中所记录的记录位移与记录长度,程
序就可以很快地向前或向后遍历整个Shapefile,在.shp⽂件中到任意⼀个⼏何体的正确位置。
五、Shapefile属性格式(.dbf)
每个图形的属性数据存储在dBase格式的数据表之中。属性数据也可以存储在另⼀种开放的数据表格式xBase格式之中。在开源Shapefile
函数库Shapefile C library[2]中就是这样存储。
六、Shapefile投帧式(.prj)
.prj⽂件中的信息包含了.shp⽂件中⼏何数据所使⽤的经纬度坐标系统。尽管这个⽂件不是必须的,⼀般使⽤都会提供它,这样⽤户就⽆需
猜测所给的坐标的经纬度系统。ArcGIS Desktop 9及以后的版本使⽤well-known text格式来⽣成坐标系统描述信息。以前的ArcGIS版本
和某些第三⽅软件通常⽣成如下的这种格式:
⽼的投影⽂件格式样例:
Projection UTM
Zunits NO
Units METERS
Spheroid CLARKE1866
Xshift 0.0000000000
Yshift -4000000.0000000000
Parameters
-108 0 0.000 /* longitude
36 0 0.000 /* latitude
新的WKT格式样例:
GEOGCS["GCS_North_American_1927",DATUM["D_North_American_1927",SPHEROID["Clarke_1866",6378206.4,294.97869
.prj⽂件中包含以下信息:
经纬度坐标系统或地图投影的名称
测量基准
椭球体参数
本初⼦午线
所使⽤的单位
⽤于定义地图投影的参数,例如:
纬度原点
缩放⽐例
中央经线
北伪偏移
东伪偏移
标准纬线
七、Shapefile空间索引格式(.sbn)
这是⼀个⼆进制的空间索引⽂件,仅仅可以应⽤在ESRI的软件之中。其⽂件格式没有公开的⽂档,其
他⼚商也没有实现这个⽂件。.sbn并不是必须的,因为.shp⽂件之中已经包含了所有的解析空间数据所需的信息。
⼋、限制
1.Shapefile与拓扑
Shapefile⽆法存储拓扑信息。在ESRI的⽂件格式中,ArcInfo 的Coverage、以及Personal/File/Enterprise地理数据库,能够保存地理要素的拓扑信息。
2.空间表达
在shapefile⽂件之中,所有的折线与多边形都是⽤点来定义,点与点之间采⽤线性插值,也就是说点与点之间都是⽤线段相连。在数据采集时,点与点之间的距离决定了该⽂件所使⽤的⽐例。当图形放⼤超过⼀定⽐例的时候,图形就会呈现出锯齿。要使图形看上去更加平滑,那么就必须使⽤更多的点,这样就会消耗更⼤的存储空间。在这种情况下,样条函数可以很精确地表达不同形状的曲线⽽且占据相对更少的空间,但是⽬前shapefile并不⽀持样条曲线。
3.数据存储量
.
shp⽂件或.dbf⽂件最⼤的体积不能够超过2 GB(或231位)。也就是说,⼀个shapefile最多只能够存储七千万个点坐标。⽂件所能够存储的⼏何体的数⽬取决于单个要素所使⽤的顶点的数⽬。
属性数据库格式所使⽤的.dbf⽂件基于⼀个⽐较古⽼的dBase标准。这种数据库格式天⽣有许多限制,例如:
⽆法存储空值。这对于数量数据来说是⼀个严重的问题,因为空值通常都⽤0来代替,这样会歪曲很多统计表达的结果。
对字段名或存储值中的Unicode⽀持不理想。
字段名最多只能够有10个字符。
最多只能够有255个字段。
只⽀持以下的数据类型:浮点类型(13字节存储空间),整数(4或9字节存储空间),⽇期(不能够存储时间,8字节存储空间)和⽂本(最⼤254字节存储空间)
unicode文件格式浮点数有可能包含舍⼊错误,因为它们以⽂本的形式保存。
4、混合⼏何类型
由于在每⼀条⼏何记录中都有该记录的⼏何类型,所以理论上⼀个shapefile是可以存储混合的⼏何类型。但实际上规范中指出在同⼀shapefile之中所有⾮空的⼏何体都必须是同⼀类型。因此shapefile被限制为仅仅可以混合存储空⼏何体和另⼀单⼀⼏何体,该⼏何体的类型必须与⽂件头中定义的类型⼀致。例如,⼀个shapefile⽂件不可能同时包含折线与多边形数据,所以,在实际的地理事物描述中,井(点类型)、河(折线类型)与湖(多边形类型)必须分开存储在三个不同的⽂件之中。
九、总结
重点记住shp、shx、dbf、prj都存储的是什么,其他的也不常⽤。
这个介绍⾥,好像少了⼀点点东西,shpfile的索引编码不是固定的,既每次在软件中打开的时候,FID都是变化的,举例来说,假设我有⼀个省边界⽂件province.shp,第⼀次在QGIS中打开,辽宁省的FID是1,再重新打开⼀下,辽宁省的FID可能就是2了,⽂件的FID,既feature id是不固定的,所以,要做数据标识,得拿其他字段来做,或者⼲脆新建⼀个字段id做索引。
Shpfile应该是最常⽤的地理信息数据格式⽂件,了解它的格式说明还是很有必要的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论