Shape文件数据结构详解

ShapeFile介绍

Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS文件系统格式文件,是工业标准的矢量数据文件。Shapefile是ArcView GIS 3.x的原生数据格式,属于简单要素类,用点、线、多边形存储要素的形状,却不能存储拓扑关系,具有简单、快速显示的优点。一个shapefile是由若干个文件组成的,空间信息和属性信息分离存储,所以称之为“基于文件”。

ShapeFile文件组成

Shape文件至少由3 个文件构成: 主文件、索引文件、数据文件。

主文件:

*.shp 存储的是几何要素的的空间信息,也就是XY坐标

*.shx 存储的是有关*.shp存储的索引信息。它记录了在*.shp中,空间数据是如何存储的,XY坐标的输入点在哪里,有多少XY坐标对等信息

*.dbf 存储地理数据的属性信息的dBase表

这三个文件是一个shapefile的基本文件,shapefile还可以有其他一些文件,但所有这些文件都与该shapefile同名,并且存储在同一路径下。

其它较为常见的文件:

*.prj 如果shapefile定义了坐标系统,那么它的空间参考信息将会存储在*.prj文件中

*.shp.xml 这是对shapefile进行元数据浏览后生成的xml元数据文件

*.sbn和*.sbx 这两个存储的是shapefile的空间索引,它能加速空间数据的读取。这两个文件是在对数据进行操作、浏览或连接后才产生的,也可以通过ArcToolbox >Data Management Tools >Indexes >Add spatial Index工具生成。


.shp文件数据详细说明

坐标文件(.shp)用于记录空间坐标信息。它由头文件和实体信息两部分构成。

1. 头文件

坐标文件的文件头是一个长度固定(100 bytes)的记录段,一共有9个int型和7个double型数据。

起始位置

名称

数值

类型

位序

0

File Code

9994

Integer

big

4

Unused

0

Integer

big

8

Unused

0

Integer

big

12

Unused

0

Integer

big

16

Unused

0

Integer

big

20

Unused

0

Integer

big

24

文件长度

文件的实际长度

Integer

big

28

版本号

1000

Integer

Little

32

几何类型

表示这个Shapefile文件所记录的空间数据的几何类型

Integer

Little

36

Xmin

空间数据所占空间范围的X方向最小值

Double

Little

44

Ymin

空间数据所占空间范围的Y方向最小值

Double

Little

52

Xmax

空间数据所占空间范围的X方向最大值

Double

Little

60

Ymax

空间数据所占空间范围的Y方向最大值

Double

Little

68*

Zmin

空间数据所占空间范围的Z方向最小值

Double

Little

76*

Zmax

空间数据所占空间范围的Z方向最大值

Double

Little

84*

Mmin

最小Measure值

Double

Little

92*

Mmax

最大Measure值

Double

Littl

最后4个加星号特别标示的四个数据只有当这个Shapefile文件包含Z方向坐标或者具有Measure值时才有值,否则为0.0。所谓Measure值,是用于存储需要的附加数据,可以用来记录各种数据,例如权值、道路长度等信息。

Shapefile文件所支持的几何类型:

编号

几何类型

0

Null Shape(表示这个Shapefile文件不含坐标)

1

Point(表示Shapefile文件记录的是点状目标,但不是多点)

3

PolyLine(表示Shapefile文件记录的是线状目标)

5

Polygon(表示Shapefile文件记录的是面状目标)

8

MultiPoint(表示Shapefile文件记录的是多点,即点集合)

11

PointZ(表示Shapefile文件记录的是三维点状目标)

13

PolyLineZ(表示Shapefile文件记录的是三维线状目标)

15

PolygonZ(表示Shapefile文件记录的是三维面状目标)

18

MultiPointZ(表示Shapefile文件记录的是三维点集合目标)

21

PointM(表示含有Measure值的点状目标)

23

PolyLineM(表示含有Measure值的线状目标)

25

PolygonM(表示含有Measure值的面状目标)

28

MultiPointM(表示含有Measure值的多点目标)

31

MultiPatch(表示复合目标)

对于一个不是记录Null Shape类型的Shapefile文件,它所记录的空间目标的几何类型必须一致,不能在一个Shapefile文件中同时记录两种不同类型的几何目标。

2. 实体信息的内容

实体信息负责记录坐标信息,它以记录段为基本单位,每一个记录段记录一个地理实体目标的坐标信息,每个记录段分为记录头和记录内容两部分。

记录头的内容包括记录号(Record Number)和坐标记录长度(Content Length) 两个记录项。它们的位序都是big。记录号(Record Number)和坐标记录长度(Content Length) 两个记录项都是int型,并且shapefile文件中的记录号都是从1开始的。

记录内容包括目标的几何类型(ShapeType)和具体的坐标记录(X、Y) ,记录内容因要素几何类型的不同其具体的内容及格式都有所不同。下面分别介绍点状目标(Point)、线状目标(PolyLine)和面状目标(Polygon)三种几何类型的.shp文件的记录内容:

点状目标

shapefile中的点状目标由一对X、Y坐标构成,坐标值为双精度型(double)。点状目标的记录内容如:

记录项

数值

数据类型

长度

个数

位序

几何类型(ShapeType)

1(表示点状目标)

int型

4

1

Little

X方向坐标

X方向坐标值

double型

8

1

Little

Y方向坐标

Y方向坐标值

double型

8

1

Little

线状目标

shapefile中的线状目标是由一系列点坐标串构成,一个线目标可能包括多个子线段,子线段之间可以是相离的,同时子线段之间也可以相交。Shapefile允许出现多个坐标完全相同的连续点,当读取文件时一定要注意这种情况,但是不允许出现某个退化的、长度为0的子线段出现。线状目标的记录内容如表:

记录项

数值

数据类型

长度

个数

位序

几何类型(ShapeType)

3(表示线状目标)

int型

4

1

Little

坐标范围(Box)

表示当前线目标的坐标范围

double型

32

4

Little

子线段个数(NumParts)

表示构成当前线目标的子线段的个数

int型

4

1

Little

坐标点数(NumPoints)

表示构成当前线目标所包含的坐标点个数

int型

4

1

Little

Parts数组

记录了每个子线段的坐标在Points数组中的起始位置

int型

4×NumParts

NumParts

Little

Points数组

记录了所有的坐标信息

Point型

根据点个数来确定

NumPoints

Little

面状目标

shapefile中的面状目标是由多个子环构成,每个子环是由至少四个顶点构成的封闭的、无自相交现象的环。对于含有岛的多边形,构成它的环有内外环之分,每个环的顶点的排列顺序或者方向说明了这个环到底是内环还是外环。一个内环的顶点是按照逆时针顺序排列的;而对于外环,它的顶点排列顺序是顺时针方向。如果一个多边形只由一个环构成,那么它的顶点排列顺序肯定是顺时针方向。

每条多边形记录的数据结构与线目标的数据结构完全相同,

对于一个shapefile中的多边形,它必须满足下面三个条件:

  1. 构成多边形的每个子环都必须是闭合的,即每个子环的第一个顶点跟最后一个顶点是同一个点;
  2. 每个子环在Points数组中的排列顺序并不重要,但每个子环的顶点必须按照一定的顺序连续排列;
  3. 存储在shapefile 中的多边形必须是干净的。

所谓一个干净的多边形,它必须满足两点:

  1. 没有自相交现象。这就要求任何一个子环不能跟其它的子环相交,共线的现 象也将被当作相交。但是允许两个子环的顶点重合;
  2. 对于一个不含岛的多边形或者是含岛的多边形的外环,它们的顶点排列顺序必须是顺时针方向;而对于内环,它的排列顺序必须是逆时针方向。所谓的“脏多边形”就是指顶点排列顺序为顺时针的内环。

面状目标的记录内容如表

记录项

数值

数据类型

长度

个数

位序

几何类型(ShapeType)

5(表示面状目标)

int型

4

1

Little

坐标范围(Box)

表示当前面目标的坐标范围

double型

32

4

Little

子线段个数(NumParts)

表示构成当前面状目标的子环的个数

int型

4

1

Little

坐标点数(NumPoints)

表示构成当前面状目标所包含的坐标点个数

int型

4

1

Little

Parts数组

记录了每个子环的坐标在Points数组中的起始位置

int型

4×NumParts

NumParts

Little

Points数组

记录了所有的坐标信息

Point型

根据点个数来确定

NumPoints

Little

.dbf属性文件的结构说明

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

1.头文件

文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明,其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。

在文件中的位置

内容

说明

0

1个字节

表示当前的版本信息

1-3

3个字节

表示最近的更新日期,按照YYMMDD格式。

4-7

1个32位数

文件中的记录条数。

8-9

1个16位数

文件头中的字节数。

10-11

1个16位数

一条记录中的字节长度。

12-13

2个字节

保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。

14

1个字节

表示未完成的操作。

15

1个字节

dBASE IV编密码标记。

16-27

12个字节

保留字节,用于多用户处理时使用。

28

1个字节

DBF文件的MDX标识。在创建一个DBF 表时,如果使用了MDX 格式的索引文件,那么 DBF 表的表头中的这个字节就自动被设置了一个标志,当你下次试图重新打开这个DBF表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的MDX 文件。

29

1个字节

Language driver ID.

30-31

2个字节

保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。

32-X

(n*32)个字节

记录项信息描述数组。n表示记录项的个数。这个数组的结构在表2.8中有详细的解释。

X+1

1个字节

作为记录项终止标

记录项信息

位置

内容

说明

0-10

11个字节

记录项名称,是ASCII码值。

11

1个字节

记录项的数据类型,是ASCII码值。(B、C、D、G、L、M和N,具体的解释见表2.9)。

12-15

4个字节

保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。

16

1个字节

记录项长度,二进制型。

17

1个字节

记录项的精度,二进制型。

18-19

2个字节

保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。

20

1个字节

工作区ID。

21-30

10个字节

保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。

31

1个字节

MDX标识。如果存在一个MDX 格式的索引文件,那么这个记录项为真,否则为空

.dbf 文件中的数据类型

代码

数据类型

允许输入的数据

B

二进制型

各种字符。

C

字符型

各种字符。

D

日期型

用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。

G

(General

or OLE)

各种字符。

N

数值型(Numeric)

- . 0 1 2 3 4 5 6 7 8 9

L

逻辑型(Logical)

? Y y N n T t F f (? 表示没有初始化)。

M

(Memo)

各种字符。

2.实体信息

实体信息部分就是一条条属性记录,每条记录都是由若干个记录项构成。

假设要读取一个名为soil的dbf文件(存储了土地利用信息),它含有8个记录项,记录项信息如表:

记录项名称

数据类型

长度

小数位数

Area

数值型(double)

31

15

Perimeter

数值型(double)

31

15

soils_

数值型(int)

11

0

soils_id

数值型(int)

11

0

soil_code

字符型(character)

3

Suit

字符型(character)

1

Centroid_x

数值型(double)

31

15

Centroid_y

数值型(double)

31

15

 

.shx索引文件数据结构说明

索引文件(.shx)主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件的文件头的偏移量。通过索引文件可以很方便地在坐标文件中定位到指定目标的坐标信息。

索引文件也是由头文件和实体信息两部分构成,其中文件头部分是一个长度固定(100 bytes)的记录段,其内容与坐标文件的文件头基本一致。它的实体信息以记录为基本单位,每一条记录包括偏移量(offset)和记录段长度(Content Length)两个记录项,它们的位序都是big,两个记录项都是int型。

记录项

数值

数据类型

长度

个数

位序

位移量(Offset)

表示坐标文件中的对应记录的起始位置相对于坐标文件起始位置的位移量。

int型

4

1

Big

记录长度

(Content Length)

表示坐标文件中的对应记录的长度。

int型

4

1

Big

发布了32 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42022528/article/details/102722481