-
Shapefile
文件是美国环境系统研究所
(
ESRI
)
所研制的
GIS
文件系统格式文件,
是工业标准的
矢量数据文件。
Shapefile
将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,
特征
表中的几何对象存为以坐标点集表示的图形文件
—
SHP
文件,
Shapefile
文
件并不含拓扑
(
Topological
)数据结构。一个
Shape
文件包括三个文件:一个主文件
(*.shp)
,一个索引文件
(*.
shx)
,和一个
dBASE(*.dbf)
< br>表。
主文件是一个直
接存取,
变长度记录的文件,
其中每个记录描述构成一个地理特
征
(
Feature
)
的所有
vertices
坐标值。
在索引文件中,
每条记录包含对应主文件记录距离主文件头开始的偏移
量,
dBASE
表包含
SH
P
文件中每一个
Feature
的特征
属性,
表中几何记录和属性数据之间的一
一对应关系是基于记录
数目的
ID
。
在
dBASE
文件中的属性记录必须和主文件中的记录顺序是相
同的。图形数据和属性数据通过索引号建立一一对应的关系。
Shapefile
中坐标文件(
.s
hp
)由固定长度的文件头和接着的变长度空间数据记录组成。文件
头由
100
字节的说明信息组成的(附表
< br>
1
),主要说明文件的长度、
Shape
类型、整个
Shape
图层
的范围等等,
这些信息构成了空间数据的元数据。
在导入空间数
据时首先要读入文件头获取
Shape
文件的基本信息,并以此
信息为基础建立相应的元数据表。而变长度空间数据记录是由
固定长度的记录头和变长度
记录内容组成,
其记录结构基本类似,
每条记录都有记录头和记
录内
容组成
(空间坐标对)
。
记录头的内容包括记录号
(
Record Nu
mber
)
和坐标记录长度
(
Content
Length
)两个记录项,
Shapefile
文件中的记录号都是从
1
开始的,坐标记录长度是按
16
位字
来衡量的。记录内容包括目标的几何类型(
ShapeTy
pe
)和具体的坐标记录(
X
,
Y
),记录内
容因要素几何类型的不同,
p>
其具体的内容和格式都有所不同。
对于具体的记录主要包括空
Shape
记录,点记录,线记录和多边形记录,具体的记录结构如附
表
2
所示。
属性文件(
.dbf
)用于记录属性信息。它是一个标准的
DBF
文
件,也是由头文件和实体信息
两部分构成。
其中文件头部分的长
度是不定长的,
它主要对
DBF
文件作
了一些总体说明
(
附表
3)
,
其中最主要的是对这个
DBF
文件的记录项的信息进行了详细的描述(附表
4
),比如对每个记
录项的名称,
数据类型,
长度等信息都有具体的说明。
属性文件
的实体信息部分就是一条条属性
记录,每条记录都是由若干个记录项构成,因此只要依次
循环读取每条记录就可以了。
索引文件(
.shx
)主要包含坐标文件的索引信息,文件中
每个记录包含对应的坐标文件记录
距离坐标文件的文件头的偏移量。
通过索引文件可以很方便地在坐标文件中定位到指定目标地坐
标信息。
索引文件也是由文件头和实体信息两部分构成的,
其中文件头部分是一个长度
固定
(
100
bytes
)的记录段,其内容与坐标文件的文件头基本一致。它的实体信息以记录为基本单位,每< p>
一条记录包括偏移量(
Offset
)和记录段长
度(
Content
Length
)两个记录项。附表
5
给出了具
体的描述。
Shape
文件是按照地物类
型来组织的。
地物类型可以分为简单的分为点
(
Point
)
、
线
(Line)
、
面
(Po
lygon)
三种类型,一个
Shape
文件中只能包括一种类型的地物,即只能包括点、线或者面
状地物中的一种。点状地物
存储的是一组坐标(
X,Y
),线包括简单线和多段线,存储的
是一系
列的坐标串
(
X1,Y1,X2
,Y2…
)
,
面状地物存储的是一系列
封闭的坐标串
(
X1,Y1,X2,Y2, …,
X1,Y1
)
。
命名习惯所有文件名都符合
8
.3
命名习惯。主文件,索引文件和
dBASE
文件有相同的前缀。
详见:
ESRI Shapefile Technical
Description
(
/library/whitepa
pers/pdfs/
)
IDL
p>
下面有独立的类
IDLffShape
来对
shape
文件进行读写操作,使用可见
help
。
SHAPE
文件格式详解
SHAPE
文件格式详解
:
SHAPE
文件格式
SDE,ARC/INFO,PC
ARC/INFO,Data Automation Kit(DAK)
和
ArcCAD
软件提供了
shape
到
coverage
的数据转
换器,
ARC/INFO
同样提供了
coverage
到
shape
的转
换器。为了和其他数据格式交换,
shape
文件的格式在本报
告
中被出版。其他数据流,比如来自全球定位系统
(GPS)<
/p>
接收机的数据能同样被存为
shape
文
件或
X,Y
事件表。
Shape
文件技术描述计算机程序
能通过使用本节的技术描述来产生,读,写
shape
文件。<
/p>
一个
ESR
I
的
shape
文件包括一个主文件,
一个索引文件,和一个
dBASE
表。主文件是一个直接存取,
变量记录长度
文件,其中每个记录描述一个有它自己的
vert
ices
列表的
shape
。在索引文
件中,每个记录包含对应主文件记录离主
文件头开始的偏移,
d
BASE
表包含一
feature
一个
记录的
feature
的特征。几何和属性间的一一对应关系是
基于记录
数目的。在
dBASE
文件中
的属性记录必须和主文件中的记录是相同顺序的。
命名习惯所有文件名都符合
8.3
命名习惯。主
文件,索引文件和
dBASE
文件有相同的前缀。前缀必须是由
字符或数字
(
a-Z,0-9
)开始,
后跟
0
到
7
个
字符(
a-Z,0-9
,
_,
)主文件的后缀是
.shp
,索引文件的后缀是
.shx
,
dBASE
表的
后缀是
.dbf
。文件名
中的所有字母在对文件名敏感的操作系统中都是小写的。
例子
主文件:
索引文件
:
dBASE
表:
数字类型一个
shape
文件存储整数和双精
度数,本文档的余数指以下类型:
整数:有符号
32
位整数(
4
字节)
双精度:有符号
64
位
IEEE
双精度浮点数(
8
字节)浮点数必须是数字的
值。负无穷,正无穷和非数字(
NaN
)值在
< br>shape
文件不被允许。然而
shape
文件支持
'
没有数据
'
p>
的值这样的概念,但是目前只用于衡量。某些小于-
1038
被
shape
文件读取程序用来代表
'
没有数据
'
的值。<
/p>
下面的第一节描述
< br>shape
文件的总体结构和组织。第二节描述
shap
e
文件支持的每种
shape
类型的记
录内容。
主文件的组织
主文件(
.shp
)由固定长度的文件头和接着的变长度记
录组成。每个变长度记录是由固定长度的记录头和接着的变长度
记录内容组成。图
1
图解了主文件的结构。
图
1
主文件的结构
文件头
记录头
记录内容
记录头
记录内容
记录头
记录内容
记录头
记录内容
……
……
记录头
记录内容
Shape
文件中所有的内容可以被分为二类:
与数据相关的:
。主文件记录内容
。主文件头的数据描述域(
Shape
类型,边界盒等)
与文件管理相关的:
。文件和记录长度
。记录偏移等
整数和双精度整数在文件头中组成数据描述域,在主文件的记录内容是小
ndian
(
PC
或
In
tel
)字节顺序。组成文件的
其余部分和文件管理的整数和双
精度浮点数是大
endian
(
Sun
或
Motorola
)字节顺序。
p>
主文件头
主文件头
100
字节长。表
1
显示带有字节位置,值,类型和字节顺序的文
件头中的域。
在此表中,位置是相对于文件的开始。
表
1
主文件头的描述
位置
域
值
类型
字节顺序
0
字节
文件代码
9994
整数
大
4
字节
未被使用
0
整数
大
8
字节
未被使用
0
整数
大
12
字节
未被使用
0
整数
大
16
字节
未被使用
0
整数
大
20
字节
未被使用
0
整数
大
24
字节
文件长度
文件长度
整数
大
28
字节
版本
1000
整数
小
32
字节
Shape
类型
Shape
类型
整数
小
36
字节
边界盒
Xmin
双精度
小
44
字节
边界盒
Ymin
双精度
小
52
字节
边界盒
Xmax
双精度
小
60
字节
边界盒
Ymax
双精度
小
68
字节
*
边界盒
Zmin
双精度
小
76
字节
*
边界盒
Zmax
双精度
小
84
字节
*
边界盒
Mmin
双精度
小
92
字节
*
边界盒
Mmax
双精度
小
*
未被使用,值为
< br>0.0
,若没有被衡量或是
Z
轴
。
文件长度的值是在
16
位字下文件的总长度(包括组成文件头的
50<
/p>
个
16
位字)
。
在
shape
文件中的所有非空
sha
pe
被需要是同种
shape
类型。<
/p>
Shape
类型的值如下:
值
shape
类型
0
空
shape
1
点
3
多线
5
多边形
8
多点
11
点
Z
13
多线
Z
15
多边形
Z
18
多点
Z
21
点
M
23
多线
M
25
多边形
M
28
多点
M
31
多斑块
没有被定义的
Shape
类型值(
2
,
4
,
6
等直到
33
p>
)为将来可能的使用而保留。目前
shape
文件被局限于包含以上定
义的同种
shape
类型。在将来
shape
文件可以被允许包含多于一种
shape
类型。若混合
shape<
/p>
类型被实现,文件头
中的
shape
p>
类型将标识该文件。
< br>主文件头的边界盒存储文件中
shape
的实际幅度。<
/p>
最小边界
X
和
Y
直交的
(潜在的
M,Z
)
长方形包含了所有的
shape
。
若
shape
文件是空的(没有
记录)
,
min,Ymin,Xmax,Ymax
的值是未被定义的。
Mmin
和
Mmax
能包含
shape
文件<
/p>
用来衡量不包含衡量的
shape
类型的
'
没有数据
'
的值(参见
2
页的数字类型)
,记录头
每个记录的头存储了记录的数目和
记录内容的长度。记录头有一个固定长度
8
字节。表
2
显示文件记录头中域的字节
< br>位置,值,类型和字节顺序。在表中,位置是相对于记录的开始的。
表
2
主文件记录头文件的描述
位置
域
值
类型
字节顺序
0
字节
记录数目
记录数目
整数
大
4
字节
内容长度
内容长度
整数
大
记录数目从
1
开始。
一个记录的内容长度是按
16
位字衡量的记录内容长度。
每个记
录因此为文件的总长度贡献
(
4
+内容
长度)
个
16
位字,
< br>正如文件头是
24
字节一样。
主文件记录内容
< br>Shape
文件记录内容包含一个
shape
类型和接着的该
shape
的几何数据。记录内容
的长度依赖于在一个
shape
中部
分
和
vertices
的数目。对每种
s
hape
类型,我们首先描述该
shape
然后是它在磁盘上的存储镜像。在表
3
到
< br>16
,位
置是相对于记录内容的开始。
< br>
空
shape
shape
类型为
< br>0
指代一种不带几何数据的空
shape
,每种要素类型(点,线,多边形等)都支持空,在同一个
shape
文件中有点和空的点是有效的。常常空
shape
是放东西的地方;在
shape
文件产生时被使用和在产生后
更被广泛地使
用。
表
3
空<
/p>
shape
记录内容
位置
域
值
类型
数目
字节顺序
0
字节
shape
类型
0
整数
1
小
在
p>
X,Y
位置的
Shape
< br>类型
点
一个点包括一对以
X,Y
顺序排列的双精度的坐标
Point
{
Double X
//X
坐标
Double Y //Y
坐标
}
表
4
点记录内容
位置
域
值
类型
数目
字节顺序
0
字节
shape
类型
1
整数
1
小
4
字节
X
X
双精度
1
小
12
字节
Y
Y
双精度
1
小
多点
一个多点代表一个点的集合:
MultiPoint
{
Double[4] Box
//
边界盒
Integer NumPoints
//
点的数目
Point[NumPoints] Points
//
在集合中的点
}
边界盒以
Xmin,Ymin,Xmax,Ymax
存储。
表
5
多点记录内容
位置
域
值
类型
数目
字节顺序
0
字节
shape
类型
8
整数
1
小
4
字节
Box Box
双精度
4
小
36
字节
NumPoints NumPoints
整数
1
小
40
字节
Points Points
点
NumPoints
小
PolyLine
一条
PolyLine
是指一条包含一个或多个部分的有序的
< br>vertices
的集合。一个部分是指二个或多个点彼此连
接的顺序。部分间彼此相连或不连。部分间彼此可能相交或不相交。
因为该定义没有禁止有确定坐标的连续点,
< br>shape
文件的读程序必须掌握这样的情况。在另外,退化
(degenerate)
和
可能导致零长度的结果是不被
允许的。
PolyLine
{
Double[4] Box
//
边界盒
Integer NumParts
//
部分的数目
Integer NumPoints
//
点的总数目
Integer[NumParts] Parts
//
在部分中第一个点的索引
Point[NumPoints] Points
//
所有部分的点
}
PolyLine
的域在以下为更详细的描述:
Box
被存储的
PolyLine<
/p>
的边界盒,以
Xmin,Ymin,Xmax,Ymax
的顺序存储。
NumParts
在
PolyLin
e
中部分的数目。
NumPoints
所有部分的点的总数目。
Parts NumParts
长度的数列。为每条
PolyLine
存储它在点数列中的第一个点的索引。数列索引是从
p>
0
开始的。
Points NumPoints
长度的数列。在
PolyLine
中的每一部分的点被尾到尾存储。部分
< br>2
的点跟在部分
1
的点之后,如
此下去。部分数列对每一部分保持开始点的数列索引。
在部分间点之间没有界限。
表
6
PolyLine
记录内容
位置
域
值
类型
数目
字节顺序
0
字节
shape
类型
3
整数
1
小
4
字节
Box Box
双精度
4
小
36
字节
NumParts NumParts
整数
1
小
40
字节
NumPoints NumPoints
整数
1
小
44
字节
Parts Parts
整数
NumParts
小
X
字节
Points Points
点
NumPoints
小
注意:
X=44+4*
NumParts
多边形
一个多边形
包含一个或多个环。一个环是四或多个点彼此相连组成的一个闭合的
彼此不相交的环。<
/p>
一个多边形可能包括多个外环,
一个环的
vertices
的顺序和方向指示环的哪一边是多边形的内部。
在
多边形中的洞的环的
vertices
是逆时针方向的。
一个环组成的多边形总是顺时针方向的。
一个多边形的环是被做为它的
一部分的。因为该定义没有禁止有确定坐标的连续的点,<
/p>
shape
文件读程序必须解决这种情况。在另外,退化
(degenerate)
和可能导致零长度的结果是不被允许的。多边
形的结构被定义为
PolyLine
结构,正如下文:
Polygon
{
Double[4] Box
//
边界盒
Integer NumParts
//
部分的数目
Integer NumPoints
//
点的总数目
Integer[NumParts] Parts
//
在部分中第一个点的索引
Point[NumPoints] Points
//
所有部分的点
}
多边形的域在以下为更详细的描述:
Box
被存储的多边形的边界盒,以
Xmin,Ymin,Xmax,Ymax
的顺序存储。
NumParts
在多边形中环的数目。
NumPoints
所有环的点的总数目。
Parts NumParts
长度的数列。为每条环存储它在
点数列中的第一个点的索引。数列索引是从
0
开始的。
Points
N
umPoints
长度的数列。在多边形中的每一个环的点被尾到尾存储。环
2
的点跟在环
1
的点之后
,如此下去。
部分数列对每一环保持开始点的数列索引。在环间点之间没有界限。
图
2
中的例子图演示了多边形的表现。该图中的多边形有一个洞,总共是
p>
8
个
vertices
。
关于多边形
shape
有以下重要注意事项:
< br>
环是闭合的(第一个和最后一个
vetex
必须是一样的)在点数列中环的顺序是不重要的。
存储在
shape
文件中的多边形必须是
clean
,一个
clean
的多边形是指这样的一个多边形:
1
.
p>
没有自交。这意味着属于一个环的一段可能不与另一个环的一段相交。一个多边形
的环可能在
veti
ces
处彼此相交,但不是在沿段处。重合的段被认为是相交的。
2
.
在定义多边形的线的正确一边有多边形的内部。
一个观察者以<
/p>
vertex
顺序沿环走时,
右边的邻居
是多边形的内部。
一个独环的多边形的
vertices
因此都是顺时针的。
在这些多边形中的洞有一个逆时针的方向。
当定义在多边形中的洞同
样是顺时针时,发生
多边形错误。这会导致内部的重叠。
图
2
一个多边形的实例
在此例中,
NumParts
等于
2,NumPoints
等于
10
。注意洞多边形的点的顺序是逆序的。
0 5
部
分
:
0 5
0 1 2 3 4 5
6 7 8 9
点
:
v1 v2 v3 v4 v1
v5 v8 v7 v6 v5
表
7
多边形记录内容
位置
域
值
类型
数目
字节顺序
0
字节
shape
类型
5
整数
1
小
4
字节
Box Box
双精度
4
小
36
字节
NumParts NumParts
整数
1
小
40
字节
NumPoints NumPoints
整数
1
小
44
字节
Parts Parts
整数
NumParts
小
X
字节
Points Points
点
NumPoints
小
注意:
X=44+4*
NumParts
在
X,Y
空间中衡量的
shape
类型该种
shape
有一个额外的坐标
< br>M
,注意
没有数据
的值可以被指定为
M
的一个
值。
PointM
一个
PointM
包括一对以
X,Y
顺序排列的双精度的坐标,再加上衡量
M
。
PointM
{
Double X //X
坐标
Double Y //Y
坐标
Double M //M
衡量
}
表
8
PointM
记录内容
-
-
-
-
-
-
-
-
-
上一篇:OrcaFlex软件操作指南
下一篇:在领导面前的自我介绍