shp文件白皮书

ESRI 的shape 文件由一个主文件、一个索引文件和一个dBASE 表构成。

命名规范:

主文件、索引文件、dBASE 文件拥有相同的文件名。文件名的开头字母必须是数字或字母(包括a-Z、0-9),接下来是0 到7 个字符(包括a-Z、0-9、_、-)。主文件的括展名为“.shp”,索引文件的括展名为“.shx”,dBASE 文件的括展名为“.dbf”。对于区分大小写的操作系统,文件名要全部采用小写方式。
例如:
■ 主文件: counties.shp
■ 索引文件: counties.shx
■ dBASE 文件:counties.dbf

主文件:是一个可变记录长度的随机文件,文件中的每个记录描述一个包含多个顶点的shape;
索引文件:在索引文件中,每个记录内容包含着与主文件中记录相对应的从主文件开始处的偏移量;
dBASE 表:dBASE 表中包含着与每个要素相对应的一条要素属性记录。几何数据与属性的一一对应关系是基于记录号来对应的。dBASE 文件中属性记录的顺序必须与主文件中的记录顺序相同。

数字类型

Shape 文件中存储着整数和双精度数,在接下来的文档内容中会提到以下的数据类型:
■ Integer: 有符号32 位整数(4 字节)
■ Double: 有符号64 位IEEE 双精度浮点数(8 字节)
浮点数必须是数字值,正、负无穷大、非数字(NaN)值在shape 文件中是不允许使用的。不过,shape 文件支持“no data”值的概念,但在目前这也仅仅用于measures。在读取文件时,任何小于-1038 的浮点数被认为是“no data”值。

在下面的
第一个部分里首先描述shape 文件的一般结构和组织形式。
第二个部分描述shape 文件所支持类型的记录内容。

主文件的组织形式

主文件(.shp)包含一个固定长度的文件头,在文件头的后面存储着可变长度的记录。每个可变长度记录由一个固定长度的记录头和跟随其后的可变长度记录内容组成
在这里插入图片描述
字节顺序
shape 文件中的所有内容可以分为两种类型:
■ 数据相关的
●主文件记录内容
●主文件头数据描述区域(shape 类型、边界框等)
■ 文件管理相关的
●文件和记录的长度
●记录的偏移量等等

本文档中的整数和双精度浮点数采用little endian(PC 和 Intel)和big endian(SunMotolrola)两种表达方式,在主文件头中构成数据描述区域的和主文件记录内容中的采用little endian 的方式;在文件的其余部分和文件管理采用big endian 的方式。

主文件头(File Header)

主文件头长度为 100 字节,表1 中显示了文件头中的字段以及它们的字节位置、值、类型、字节顺序。在此表中,位置是从文件头算起的。

 主文件头的描述
文件长度的值是用16 位字表示的文件总长度(包括组成文件头的50 个16 位字)。shape文件中所有的非空shape 必须是相同类型的。以下是shape 类型的值:
shap值类型的值
末列入上述清单中的Shape type 有2、4、6 以及33 等等,这些是做为保留以备将来使用。目前每个shape 文件被限定为只能包含上述类型的一种,将来shape 文件可能会被允许包含一种以上的shape 类型,如果实现了这种混合类型,文件头中的shape 类型字段也采用与上面相同的定义。
主文件头中的Bounding Box 储存着shape 的实际范围:与X 轴和Y 轴(潜在的M 和Z)正交的包含所有shape 的最小边界矩形。如果shape 文件是空的(即文件不包含任何记录),则Xmin、Ymin、Xmax、Ymax 均末指定。Shape 文件中具有measure shape 类型的Mmin 和Mmax 可以被指定为“no data”值(参见第2 页“数字类型”),也就是不包含measure 值。

主文件记录头(Record Headers)

每个记录的记录头都储存着记录号和记录内容的长度,记录头的长度是8 个字节,记
录号从1 开始。字节位置是相对于记录头算起的。见表2。

主文件记录头的描述
记录的长度以word 来计算,每个记录的长度是记录内容的长度再加上的记录头(4 个word)的长度,与主文件中第24 个字节的内容类似。

主文件记录内容(Record Contents)

Shape 文件的记录内容由shape 类型和其后面的shape 的几何数据组成。记录内容的长度取决于part 的数量和shape 的顶点数目。对于每个shape 类型,我们先给出它的描述,然后是它在磁盘上的记录内容。在表3 至表16 中,position 是从记录内容的开始算起的。

空shape

Shape 类型为0 表示一个没有几何类据的空的(Null)shape。每个要素类型(point、line、polygon 等等)都支持“空状态”-在同一个shape 文件中“有点”(have point)和“无点”(null point)都是合法的。空shape 经常作为位置标志符来使用,在创建shape 文件时使用它,稍后就会被填充为几何数据。

空shape记录内容:
在这里插入图片描述

XY 平面上的shape 类型(二维)

Point(点)
一个 Point 由一对双精度坐标组成,存储顺序为X,Y。

Point
{
Double X // X coordinate
Double Y // Y coordinate
}

Point 记录的内容:
在这里插入图片描述
MultiPoint(多点)
一个 MultiPoint 描述一组点, 具体如下:

MultiPoint
{
Double[4] Box // Bounding Box
Integer NumPoints // Number of Points
Point[NumPoints] Points // The Points in the set
}

Bounding box 的存储顺是 Xmin, Ymin, Xmax, Ymax.
MultiPoint 的记录内容:
在这里插入图片描述
PolyLine(第二版中称为Arc)

        一条 Polyline 是一个按次序排列的顶点序列,包含一个或几个part,一个part 是由两个或两个以上的点连接而成的序列,Part 之间互相连接或不连接均可,Part 之间可以交叉也可以不交叉。

        在本规范中没有禁止使用连续的相同坐标,所以要注意处理这种情况。另一方面,退化的(degenerate)、长度为0 的part 是不允许出现的。

PolyLine
{
Double[4] Box // Bounding Box
Integer NumParts // Number of Parts
Integer NumPoints // Total Number of Points
Integer[NumParts] Parts // Index to first Point in Part
Point[NumPoints] Points // Points for all parts
}

PolyLine 的各个字段描述如下:
Box: PolyLine 的Bounding box,按照Xmin, Ymin, Xmax, Ymax 的顺序存储。
NumParts: PolyLine 中Part 的数目。
NumPoints: 所有Part 的总点数。
Parts: 长度为NumParts 的数组,存储着每个part(注:原文中是polyline)的起始点在points 数组中的索引,索引从0 开始。
Points: 长度为NumPoints 的数组,按顺序存储构成PolyLine 的所有Part 的点。组成序号为2 的Part 的点紧接着序号为1 的,依此类推。数组Parts 中存储着每个Part 起点的数组索引。在points 数组中,各Part 之间没有分隔符。
Polyline 的记录内容:
在这里插入图片描述
Polygon(面)
Polygon 由一个或多个环组成。环是一个由4 个或4 个以上的顺序连接的点构成的闭合的、非自相交的回路。Polygon 可以包含多个外部环。顶点的顺序或方向表明环的哪一侧是处于Polygon 内部的。沿着一个环的顶点顺序前进,前进方向的右侧就是这个环所在的Polygon。在Polygon 中由顶点组成的洞是逆时针方向的。单一且闭合的Polygon 的结点顺序总是顺时针方向的。组成Polygon 的ring 就是Polygon 的Part。
在本规范中没有禁止使用连续相同的点,所以要注意处理这种情况。另一方面,退化的(degenerate)、长度为0 的part 是不允许出现的。
Polygon 的结构与Polyline 的结构是相同的,具体如下:

Polygon
{
Double[4] Box // Bounding Box
Integer NumParts // Number of Parts
Integer NumPoints // Total Number of Points
Integer[NumParts] Parts // Index to First Point in Part
Point[NumPoints] Points // Points for All Parts
}

Polygon 中各个字段的描述如下:
Box: Polygon 的封装边界,存储顺序为:Xmin, Ymin, Xmax, Ymax。
NumParts: Polygon 中环的个数。
NumPoints: 构成所有环的点的数目。
Parts: 长度为NumParts 的数组,存储着每个环的首点在Points 数组中的索引,数组索引从0 开始。
Points: 长度为NumPoints 的数组。构成Polygon 的每个环的点,按照首尾相连的顺序存储的。组成序号为2 的环的点紧接着序号为1 的环,依此类推。数组
Parts 中存储着每个环的起点的数组索引。组成不同环的点之间没有分隔符。
在图2 的例子中表明了polygon 的表示方法。图中显示的是内含一个岛、由8 个顶点组成的Polygon。

对于Polygon 要注意以下几点:
■ 环是闭合的(首点与末点必须是相同的)。
■ 环在数组points 中的次序是不重要的。
■ 存储在shapefile 中的Polygon 必须是“干净的”的,“干净的”Polygon 是这样的:
1.不能自交叉。这意味着:属于一个环的片断不能与属于另一个环的片断交叉;组
成Polygon 的环之间可以在顶点处相接,但不能有重合片断,重合的片断被认为是交叉的。
2.含有polygon 的inside,并且这些inside 是由有“正确”侧边的线组成的。沿着环
的结点顺序的前进方向右侧是polygon 的内部。对于由单一环构成的polygon,其顶点顺
序总是顺时针方向。Polygon 中构成岛的环是逆时针方向的,如果构成岛的环是顺时针方
向,这时将产生一个“脏的”polygon,导致出现叠加。
Polyline 的实例:
在这里插入图片描述
在本例中,NumParts 为2,NumPoints 为10。注意在图中polygon 内的岛,组成它的点的顺序是倒向的。
在这里插入图片描述
Polygon 的记录内容
在这里插入图片描述

XY 平面上的Measured Shape 类型(二维附加坐标shape)

这个类型的 Shape 有一个附加的坐标-M。M 的值可以是“no data”(参见第2 页“数字类型”)
PointM
一个PointM 由一对双精度坐标X、Y 加上M 构成。

PointM
{
Double X // X coordinate
Double Y // Y coordinate
Double M // Measure
}

PointM 的记录内容:
在这里插入图片描述
MultiPointM
MultiPointM 描述一组PointM, 具体如下:

MultiPointM
{
Double[4] Box // Bounding Box
Integer NumPoints // Number of Points
Point[NumPoints] Points // The Points in the set
Double[2] MRange // Bounding Measure Range
Double[NumPoints] MArray // Measures
}

MultiPointM 中各个字段描述如下:
Box: MultiPointM 的封装边界,按照Xmin, Ymin, Xmax, Ymax 的顺序存储。
NumPoints: 点的总数。
Points: 长度为NumPoints 的点数组。
MRange: MultiPointM 中measure 的最小值和最大值,按照Mmin, Mmax 的顺序存储。
MArray: 长度为NumPoints 的measure 数组。
MultiPointM 的记录内容:
在这里插入图片描述
PolyLineM
PolyLineM 由一个或几个part 构成。一个part 是由两个或两个以上的点连接而成的序列,Part 之间互相连接或不连接均可,Part 之间可以交叉也可以不交叉。

PolyLineM
{
Double[4] Box // Bounding Box
Integer NumParts // Number of Parts
Integer NumPoints // Total Number of Points
Integer[NumParts] Parts // Index to First Point in Part
Point[NumPoints] Points // Points for All Parts
Double[2] MRange // Bounding Measure Range
Double[NumPoints] MArray // Measures for All Points
}

PolyLineM 中各个字段描述的如下:
Box: PolyLineM 的封装边界,按照Xmin, Ymin, Xmax, Ymax 的顺序存储。
NumParts: PolyLineM 中part 的数目。
NumPoints: 构成所有part 的点的总数。
Parts: 长度为NumParts 的数组,存储着每个part 的首点在points 数组中的索引。数组索引从0 开始。
Points: 长度为NumPoints 的数组。构成PolyLineM 的每个Part 的点,是按照首尾相连的顺序存储的。组成序号为2 的Part 的点紧接着序号为1 的Part,依此类推。数组Parts 中存储着每个Part 的起点的数组索引。组成不同Part 的点之
间没有分隔符。
MRange: PolyLineM 中measure 的最小值和最大值,按照Mmin, Mmax 的顺序存储。
MArray: 长度为NumPoints 的数组。PolyLineM 中每个Part 的measure 是按照首尾相连的顺序存储的。第二个Part 的measure 紧接着第一个Part 的measure 存储,依此类推。数组Parts 中存储着每个Part 的起点的数组索引。在数组Marray中,不同的part 之间没有分隔符。

PolyLineM 的记录内容:
在这里插入图片描述
PolygonM
PolygonM 由多个环组成。环是一个闭合的、非自相交的回路。注意这里的交叉指的是在XY 空间中而不是在XYM 空间中。一个PolygonM 可以包含多个外部环,每个环都是PolygonM 的一个part。
PolygonM 的结构与PolyLineM 的结构是一样的:

PolygonM
{
Double[4] Box // Bounding Box
Integer NumParts // Number of Parts
Integer NumPoints // Total Number of Points
Integer[NumParts] Parts // Index to First Point in Part
Point[NumPoints] Points // Points for All Parts
Double[2] MRange // Bounding Measure Range
Double[NumPoints] MArray // Measures for All Points
}

PolygonM 中各个字段的描述如下:
Box: PolygonM 的封装边界,按照Xmin, Ymin, Xmax, Ymax 的顺序存储。
NumParts: PolygonM 中环的数目。
NumPoints: 构成所有环的点的总数。
Parts: 长度为NumParts 的数组,存储着每个环的首点在points 数组中的索引。数组索引从0 开始。
Points: 长度为NumPoints 的数组。构成PolygonM 的每个环的点,是按照首尾相连的顺序存储的。组成序号为2 的环的点紧接着序号为1 的环,依此类推。数组Parts 中存储着每个环的起点的数组索引。组成不同环的点之间没有分隔
符。
MRange: PolygonM 中measure 的极小值和极大值,按照Mmin, Mmax 的顺序存储。
MArray: 长度为NumPoints 的数组。构成PolyLineM 的每个环的measure,是按照首尾相连的顺序存储的。第二个环的measure 紧接着第一个环的measure 存储,依此类推。数组Parts 中存储着每个环的起始measure 的数组索引。在数组MRrray 中,不同的环之间没有分隔符。
关于PolygonM,有以下几点需要重视:
■ 环是闭合的(环中的第一个顶点和最后一个顶点必须是相同的);
■ 环在points 数组中的次序是不重要的
PolygonM 的记录内容:
在这里插入图片描述

在XYZ 空间中的Shape 类型(三维)

此类型有一个可选的坐标-M。注意,M 可以被赋值为“no data”(参见第2 页的“数字类型”)。
PointZ
一个PointZ 由三个双精度坐标X、Y、Z,外加一个measure 组成。

PointZ
{
Double X // X coordinate
Double Y // Y coordinate
Double Z // Z coordinate
Double M // Measure
}

PointZ 的记录内容:
在这里插入图片描述
MultiPointZ
MultiPointZ 由一组PointZ 组成:

MultiPointZ
{
Double[4] Box // Bounding Box
Integer NumPoints // Number of Points
Point[NumPoints] Points // The Points in the Set
Double[2] ZRange // Bounding Z Range
Double[NumPoints] ZArray // Z Values
Double[2] MRange // Bounding Measure Range
Double[NumPoints] MArray // Measures
}

Bounding box 按照Xmin, Ymin, Xmax, Ymax 的顺序存储;
Bounding ZRange 按照Zmin, Zmax 的顺序存储;Bounding MRange 按照Mmin, Mmax 的顺序存储。
MultiPointZ 记录内容:
在这里插入图片描述
PolyLineZ
一个PolyLineZ 由一个或多个part 构成。一个part 是由两个或两个以上的点连接而成的序列,Part 之间互相连接或不连接均可,Part 之间可以交叉也可以不交叉。

PolyLineZ
{
Double[4] Box // Bounding Box
Integer NumParts // Number of Parts
Integer NumPoints // Total Number of Points
Integer[NumParts] Parts // Index to First Point in Part
Point[NumPoints] Points // Points for All Parts
Double[2] ZRange // Bounding ZRange
Double[NumPoints] ZArray // Z Value for All Points
Double[2] MRange // Bounding Measure Range
Double[NumPoints] MArray // Measures
}

PolyLineZ 中各个字段的描述如下:
Box: PolyLineZ 的封装边界,按照Xmin, Ymin, Xmax, Ymax 的顺序存储。
NumParts: PolyLineZ 中part 的数目。
NumPoints: 构成所有part 的点的总数。
Parts: 长度为NumParts 的数组,存储着每个part 的首点在points 数组中的索引。数组索引从0 开始。
Points: 长度为NumPoints 的数组。构成PolyLineZ 的每个Part 的点,是按照首尾相连的顺序存储的,第2 个Part 的点紧接着第1 个Part 的点,依此类推。数
组Parts 中存储着每个Part 的起点的数组索引。在数组points 中,各个Part之间没有分隔符。
ZRange: PolyLineZ 中Z 的极小值和极大值,按照Zmin,Zmax 的顺序存储。
ZArray: 长度为NumPoints 的数组。PolyLineZ 中每个Part 的Z 值是按照首尾相连的顺序存储的。第二个Part 的Z 值紧接着第一个Part 的Z 值存储,依此类推。数组Parts 中存储着每个Part 的起始Z 值的数组索引。在数组ZArray 中,各个Part 之间没有分隔符。
MRange: PolyLineZ 中measure 的极小值和极大值,按照Mmin,Mmax 的顺序存储。
MArray: 长度为NumPoints 的数组。PolyLineZ 中每个Part 的measure 是按照首尾相连的顺序存储的。第二个Part 的measure 紧接着第一个Part 的measure 存储,依此类推。数组Parts 中存储着每个Part 的起始measure 的数组索引。在数组measure 中,各个Part 之间没有分隔符。
PolyLineZ 的记录内容:
在这里插入图片描述
PolygonZ
PolygonZ 由多个环组成。环是一个闭合的、非自相交的回路。一个PolygonZ 可以包含多个外部环。每个环都是PolygonZ 的一个part。
PolygonZ 的结构与PolyLineZ 的结构是相同的:

PolygonZ
{
Double[4] Box // Bounding Box
Integer NumParts // Number of Parts
Integer NumPoints // Total Number of Points
Integer[NumParts] Parts // Index to First Point in Part
Point[NumPoints] Points // Points for All Parts
Double[2] ZRange // Bounding ZRange
Double[NumPoints] ZArray // Z Value for All Points
Double[2] MRange // Bounding Measure Range
Double[NumPoints] MArray // Measures
}

PolygonZ 中各个字段的描述如下:
Box: PolygonZ 的封装边界,按照Xmin, Ymin, Xmax, Ymax 的顺序存储。
NumParts: PolygonZ 中环的数目。
NumPoints: 构成所有环的点的总数。
Parts: 长度为NumParts 的数组,存储着每个环的首点在points 数组中的索引。数组索引从0 开始。
Points: 长度为NumPoints 的数组。构成PolygonZ 的每个环的点,按照首尾相连的顺序存储。组成序号为2 的环的点紧接着序号为1 的环,依此类推。数组Parts 中存储着每个环的起点的数组索引。在points 数组中组成不同环的点之间没有分隔符。
ZRange: PolygonZ 中Z 的极小值和极大值,按照Zmin,Zmax 的顺序存储。
ZArray: 长度为NumPoints 的数组。PolygonZ 中每个环的Z 值是按照首尾相连的顺序存储的。第二个环的Z 值紧接着第一个环的Z 值存储,依此类推。数组Parts 中存储着每个环的起始Z 值的数组索引。在数组ZArray 中,各个环之间没有分隔符。
MRange: PolygonZ 中measure 的极小值和极大值,按照Mmin, Mmax 的顺序存储。
MArray: 长度为NumPoints 的数组。构成PolyLineZ 的每个环的measure,是按照首尾相连的顺序存储的。第二个环的measure 紧接着第一个环的measure 存储,依此类推。数组Parts 中存储着每个环的起始measure 的数组索引。在数组MRrray 中,构成不同的环的点之间没有分隔符。
关于PolygonZ,有以下几点需要重视:
■ 环是闭合的(环中的第一个顶点和最后一个顶点必须是相同的);
■ 环在points 数组中的次序是不重要的。
PolygonZ 记录内容:
在这里插入图片描述
MultiPatch
MultiPatch 由多个曲面组成,每个曲面描述一个表面。每个曲面是MultiPatch 的一个part,曲面的类型决定了顶点的排列顺序。MultiPatch 的part 可以是以下类型:
■ Triangle Strip 相当于三角锁,除了前两个顶点外,每一个顶点都形成一个新的三角形,新的三角形总是由新顶点和它前面的两个原有顶点组成的。
■ Triangle Fan 扇形三角,每一个顶点都形成一个新的三角形,新三角形总是由新顶点和它前面的点以及第一个顶点构成的。
■ Outer Ring Polygon 的外环。
■ Inner Ring Polygon 的内环。
■ First Ring Polygon 中第一个末指定类型的环。
■ Ring Polygon中末指定类型的环。
一个单独的Triangle Strip 或Triangle Fan,描述一个单一的曲面。参见图3.
一系列的环可以构成一个内部带岛的曲面,比较典型的是由一个外环描述曲面的外边界,内含几个内环用来描述岛。当一个内含岛的多边曲面由多个环构成,且其中的一个单独的环的类型无法确定,那么这些环必须以First Ring 开始,然后是多个Ring。一个环的序列如果没有以First Ring 做为开始,则这些环被认为是没有岛的外环。
MultiPatch part 的样例:
在这里插入图片描述
每个part 的编码如下:

Value Part Type
0 Triangle Strip
1 Triangle Fan
2 Outer Ring
3 Inner Ring
4 First Ring
5 Ring
MultiPatch
{
Double[4] Box // Bounding Box
Integer NumParts // Number of Parts
Integer NumPoints // Total Number of Points
Integer[NumParts] Parts // Index to First Point in Part
Integer[NumParts] PartsTypes // Part Type
Point[NumPoints] Points // Points for All Parts
Double[2] ZRange // Bounding ZRange
Double[NumPoints] ZArray // Z Value for All Points
Double[2] MRange // Bounding Measure Range
Double[NumPoints] MArray // Measures
}

MultiPatch 中各个字段的描述如下:
Box: MultiPatch 的封装边界,按照Xmin, Ymin, Xmax, Ymax 的顺序存储。
NumParts: MultiPatch 中part 的数目。
NumPoints: 构成所有part 的点的总数。
Parts: 长度为NumParts 的数组,存储着每个part 的首点在points 数组中的索引。数组索引从0 开始。
Points: 长度为NumPoints 的数组。构成MultiPatch 的每个环的点,按照首尾相连的顺序存储。组成第二个part 的点紧跟着第一个part 的点,依此类推。数组
Parts 中存储着每个part 的起点的数组索引。在points 数组中组成不同part的点之间没有分隔符。
ZRange: arc 的Z 值的极小值和极大值,按照Zmin,Zmax 的顺序存储。
ZArray: 长度为NumPoints 的数组。MultiPatch 中每个part 的Z 值是按照首尾相连的顺序存储的。第二个part 的Z 值紧接着第一个part 的Z 值存储,依此类推。数组Parts 中存储着每个part 的起始Z 值的数组索引。在数组ZArray 中,各个part 之间没有分隔符。
MRange: MultiPatch 中measure 的极小值和极大值,按照Mmin, Mmax 的顺序存储。
MArray: 长度为NumPoints 的数组。构成MultiPatch 的每个环的measure,是按照首尾相连的顺序存储的。第二个环的measure 紧接着第一个环的measure 存储,依此类推。数组Parts 中存储着每个环的起始measure 的数组索引。在数组MRrray 中,构成不同的环的点之间没有分隔符。
关于MultiPatch,有以下几点需要注意:
■ 如果MultiPatch 的一个part 是环,则这个环必须是闭合的(环中的第一个顶点和最后一个顶点必须是相同的);
■ 如果构成MultiPatch 的part 是环,则环在points 数组中的次序是重要的:内环必须跟在外环后面;如果一个曲面由一个环序列描述,那么这些环必须以First Ring 类型的环作为起始环。
■ 各个part 可以共享公有边界,但彼此不能交叉和穿过(penetrate)。
MultiPatch 记录内容:

在这里插入图片描述

索引文件的组织

索引文件(.shx)由一个长度为100 字节的文件头引导,后面是一系列长度为8 字节的记录。
索引文件的组织:
在这里插入图片描述

索引文件文件头(File Header)

索引文件文件头的组织形式与上面的主文件文件头的描述是一样的。文件头中存储的文件长度是以16 字节的word 表示的文件的总长度(文件头的50 个16 字节word 加上记录个数的4 倍)。

索引记录(Records)

索引文件中的第 I 个记录存储着第I 个记录在主文件中的偏移量和内容长度。表17 中显示了文件头中的各个字段以及它们的位置、值、类型、字节顺序。表中的位置是从索引文件记录的开始算起的。
索引记录的描述:
在这里插入图片描述
一个记录在主文件中的偏移量是用16 字节的word 来表示的,它表示从主文件开始至这个记录记录头第一个字节的word 个数。因此,主文件中的第一个记录的偏移量是50。索引记录中存储的内容长度与主文件中记录头中存储的数值相同。

dBASE 文件的组织

dBASE 文件(.dbf)中包含任何需要的要素属性或可供其它表连接的属性关键字。它是标准的DBF 格式文件,广泛应用于诸多的Windows 和DOS 平台上基于表格的应用程序。各类字段都可被引入到表中。在这里要遵循四个(原文中为“三个”)条件:
■ 文件名必须与shape 文件和索引文件相同,括展名必须为“.dbf”(参见第2 页的“命名规则”)。
■ 每个要素在表中必须要包含一个与之相对应的记录。
■ 记录的顺序必需与要素在主文件中(*.shp)的顺序一样。
■ dBASE 文件头中的年份值必须要晚于1900 年。
更多的关于dBASE 文件的格式,访问INPRISE 公司,网站是www.inprise.com.

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值