许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  ESRI Shapefile格式全面解析:数据结构与读写方法

ESRI Shapefile格式全面解析:数据结构与读写方法

阅读数 13
点赞 0
article_banner

ESRI Shapefile格式解析

概述

Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。但这种格式没法存储地理数据的拓扑信息。Shapefile在九十年代初的ArcView GIS  的第二个版本被首次应用。目前,许多自由的程序或商业的程序都可以读取Shapefile。

Shapefile是一种比较原始的矢量数据存储方式,它仅仅能够存储几何体的位置数据,而无法在一个文件之中同时存储这些几何体的属性数据。因此,Shapefile还必须附带一个二维表用于存储Shapefile中每个几何体的属性信息。Shapefile中许多几何体能够代表复杂的地理事物,并为他们提供强大而精确的计算能力。然而,单个shapefile文件只能包含一种几何体,例如一个shapefile文件不可能同时包含折线与多边形数据。

Shapefile由多个文件组成,其中有三个文件必不可少:

.shp — 图形格式,用于保存元素的几何实体。 .shx — 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。 .dbf — 属性数据格式,以dBase III+ 的数据表格式存储每个几何形状的属性数据。

表示同一数据的一组文件其文件名前缀应该相同。例如,存储一个关于湖的几何与属性数据,就必须有lake.shp,lake.shx与lake.dbf三个文件。而其中“真正”的Shapefile的后缀为shp,然而仅有这个文件数据是不完整的,必须要把其他两个附带上才能构成一组完整的地理数据。

   除了这三个必须的文件以外,还有八个可选的文件,其中最有用的莫过于.prj文件:

.prj —投影信息文件,用于保存well-known text格式的地理坐标系统与投影信息。

在每个.shp, .shx与.dbf文件之中,图形在每个文件的排序是一致的。也就是说,.shp的第一条记录与.shx及.dbf之中的第一条记录相对应,如此类推。此外,在.shp与.shx之中,有许多字段的字节序是不一样的。因此用户在编写读取这些文件格式的程序时,必须十分小心地处理不同文件的不同字节序。

Shapefile通常以XY的顺序来记录地理坐标,一般X对应经度,Y对应纬度,用户必须注意X,Y的顺序。

.shp文件格式

Shapefile格式的主文件包含了地理参照数据。该文件由一个定长的文件头和一个或若干个变长的记录数据组成。每一条变长 数据记录 包含一个记录头和一些记录内容。详细的数据存储格式由Esri Shapefile技术描述.[1]提供。注意,虽然Shapefile文件的后缀名与AutoCAD的图形字体源格式它们的文件后缀名相同的,都是.shp ,请不要把它们混淆。

主文件头包含17个字段,共100个字节,其中包含九个4字节(32位有符号整数,int32)整数字段,紧接着是八个8字节(双精度浮点数)有符号浮点数字段。


字节类型字节序用途
0–3int32大端序文件编号,永远是整数9994(十六进制数0x0000270a)
4–23int32大端序五个没有被使用的32位整数
24–27int32大端序文件长度,包括文件头。(用16位整数表示)
28–31int32小端序版本号
32–35int32小端序图形类型(参见下面)
36–67double小端序最小外接矩形 (MBR),也就是一个包含shapefile之中所有图形的矩形。以四个浮点数表示,分别是X坐标最小值,Y坐标最小值,X坐标最大值,Y坐标最大值。
68–83double小端序Z坐标值的范围。以两个浮点数表示,分别是Z坐标的最小值与Z坐标的最大值。
84–99double小端序M坐标值的范围。以两个浮点数表示,分别是M坐标的最小值与M坐标的最大值。

然后这个文件包含不定数目的变长数据记录,每个数据记录以一个8字节记录头开始:


字节类型字节序用途
0–3int32大端序记录编号 (从1开始)
4–7int32大端序记录长度(以16位整数表示)

在记录头的后面就是实际的记录:


字节类型字节序用途
0–3int32小端序图形类型(参见下面)
4–--图形内容

变长记录的内容由图形的类型决定。Shapefile支持以下的图形类型:


图形类型字段
0空图形
1Point(点)X, Y
3Polyline(折线)(最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点
5Polygon(多边形)(最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点
8MultiPoint(多点)(最小包围矩形)MBR,点的数目,所有点
11PointZ(带Z与M坐标的点)X, Y, Z, M
13PolylineZ(带Z或M坐标的折线)必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组
15PolygonZ(带Z或M坐标的多边形)必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组
18MultiPointZ(带Z或M坐标的多点)必须的: (最小包围矩形)MBR,点的数目,所有点, Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组
21PointM(带M坐标的点)X, Y, M
23PolylineM(带M坐标的折线)必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点\可选的: M坐标范围, M坐标数组
25PolygonM(带M坐标的多边形)必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点\可选的: M坐标范围, M坐标数组
28MultiPointM(带M坐标的多点)必须的: (最小包围矩形)MBR,点的数目,所有点\可选的: M坐标范围, M坐标数组
31MultiPatch必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组

在普通的使用中,Shapefile通常包含点、折线与多边形。带有Z坐标的形状是三维的。带有M坐标的形状是包含一个用户指定的测量值,该测量值定义在每一个点坐标之上。三维的Shapefile十分罕见。此外,Shapefile的M测量值通常已经被其他功能更加强大和稳健的数据库取代,Shapefile一般只负责几何数据。

. shx文件  格式

Shapefile的文件索引包含与.shp文件相同的100个字节的文件头,然后跟随着不定数目的8字节定长记录,每个记录都有两个字段:


字节类型字节序用途
0–3int32大端序记录位移(用16位整数表示)
4–7int32大端序记录长度(用16位整数表示)

因为这个图形索引每个数据项都是定长的,因此程序只要在这个图形索引中向前或向后遍历,读取索引中所记录的记录位移与记录长度,程序就可以很快地向前或向后遍历整个Shapefile,在.shp文件中找到任意一个几何体的正确位置。

.dbf文件格式

属性文件(.dbf)用于记录属性信息。它是一个标准的DBF文件,也是由头文件和实体信息两部分构成。这个文件可以用excel打开。

   其 中文 件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(见表2.7),其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。一般来说,shapefile文件有多少个属性就有多少个记录项
文件头结构如下表所示:


字节类型说明
01个字节表示当前的版本信息。
1-33个字节表示最近的更新日期,按照YYMMDD格式。
4-71个32位数文件中的记录条数。
8-91个16位数文件头中的字节数。
10-111个16位数一条记录中的字节长度。
12-132个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
141个字节表示未完成的操作。
151个字节dBASE IV编密码标记。
16-2712个字节保留字节,用于多用户处理时使用。
281个字节DBF文件的MDX标识。在创建一个DBF 表时 ,如果使用了MDX 格式的索引文件,那么 DBF 表的表头中的这个字节就自动被设置了一个标志,当你下次试图重新打开这个DBF表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的MDX 文件。
291个字节Language driver ID.
32-X(n*32)个字节记录项信息描述数组。n表示记录项的个数。这个数组的结构在下个表中有详细的解释。
X+11个字节作为记录项终止标识。

每条记录项都是对一项属性的描述,结构见下表:


字节类型说明
0-1011个字节记录项名称,是ASCII码值。例如:“LAYER”,“AREA”,“GM_TYPE”,"NAME"等。
111个字节记录项的数据类型,是ASCII码值。(B、C、D、G、L、M和N,具体的解释见表2.9)。
12-154个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
161个字节记录项长度,二进制型。
171个字节记录项的精度,二进制型。
18-192个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
201个字节工作区ID。
21-3010个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
311个字节MDX标识。如果存在一个MDX 格式的索引文件,那么这个记录项为真,否则为空。

记录项数据类型如下表所示:


代码数据类型允许输入的数据
B二进制型各种字符。
C字符型各种字符。
D日期型用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。
G(General or OLE)各种字符。
N数值型(Numeric)- . 0 1 2 3 4 5 6 7 8 9
M(Memo)各种字符。

写完所有记录项之后,就是实体信息了。按与shp中几何实体相同的次序写入即可。

参考

维基百科
ESRI文档
CSDN博客


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空