1. shp文件
1. 文件结构
| Position | Field | Value | Type | Order |
|---|---|---|---|---|
| Byte 0 | File Code | 9994 | Integer | Big |
| Byte 4 | Unused | 0 | Integer | Big |
| Byte 8 | Unused | 0 | Integer | Big |
| Byte 12 | Unused | 0 | Integer | Big |
| Byte 16 | Unused | 0 | Integer | Big |
| Byte 20 | Unused | 0 | Integer | Big |
| Byte 24 | File Length | File Length | Integer | Big |
| Byte 28 | Version | 1000 | Integer | Little |
| Byte 32 | Shape Type | Shape Type | Integer | Little |
| Byte 36 | Bounding Box | Xmin | Double | Little |
| Byte 44 | Bounding Box | Ymin | Double | Little |
| Byte 52 | Bounding Box | Xmax | Double | Little |
| Byte 60 | Bounding Box | Ymax | Double | Little |
| Byte 68* | Bounding Box | Zmin | Double | Little |
| Byte 76* | Bounding Box | Zmax | Double | Little |
| Byte 84* | Bounding Box | Mmin | Double | Little |
| Byte 92* | Bounding Box | Mmax | Double | Little |
- Unused, with value 0.0, if not Measured or Z type
说明:Big表示大尾(big endian)型字节顺序,即是高低位字节是反序的,主要适用于Sun® or Motorola®平台,而Little表示小尾(little endian)型字节顺序,高低位字节顺序不变,主要使用在PC or Intel®平台。在读取的字节为Big时,需要进行字节顺序交换,才能得出正确的值。
一个把Big顺序转换为Little顺序的函数可以如下:
int Big2LittleEndian(int num)
{
int reverse; //返回结果
char bit0, bit1, bit2, bit3;
bit0 = (num & 0x000000ff);
bit1 = (num & 0x0000ff00) >> 8;
bit2 = (num & 0x00ff0000) >> 16;
bit3 = (num & 0xff000000) >> 24;
reverse = (bit0 << 24) | (bit1 << 16) | (bit2 << 8) | (bit3);
return reverse;
}
2. shapefile的图形对象类型
文件头中第32-35位字节为一个整型,其值反映了shapefile的图形对象类型,具体值对应含义如下:
| Value | Shape Type |
|---|---|
| 0 | Null Shape |
| 1 | Point |
| 3 | PolyLine |
| 5 | Polygon |
| 8 | MultiPoint |
| 11 | PointZ |
| 13 | PolyLineZ |
| 15 | PolygonZ |
| 18 | MultiPointZ |
| 21 | PointM |
| 23 | PolyLineM |
| 25 | PolygonM |
| 28 | MultiPointM |
| 31 | MultiPatch |
3. 图幅的范围大小
第36-67个字节包含了图幅的范围大小,每条记录由记录头和实体内容组成,记录头格式固定,具体组成如下所示:
| Position | Field | Value | Type | Byte Order |
|---|---|---|---|---|
| Byte 0 | Record Number | Record Number | Integer | Big |
| Byte 4 | Content Length | Content Length | Integer | Big |
说明:记录头包含8个字节,0-3表示记录的顺序号,4-7表示记录实体自身的大小。 实体的内容根据对象类型不同而变化,需根据具体情况处理。
2. shx文件
1. 文件结构
.shx文件由文件头和记录组成,文件头与前述.shp文件一致,但需注意File Length字段的值不一样。而每条记录由2个整型组成,具体内容如下:
| Position | Field | Value | Type | Byte Order |
|---|---|---|---|---|
| Byte 0 | Offset | Offset | Integer | Big |
| Byte 4 | Content Length | Content Length | Integer | Big |
说明:offset表示该条记录在.shp文件中的字节位置,而Content Length说明了记录的大小。
3. DBF文件
标准的DBF文件,是由头文件和实体信息两部分构成。文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(表),其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。
1. 文件(.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表示记录项的个数。这个数组的结构在下表中有详细的解释。 |
| X+1 | 1个字节 | 作为记录项终止标识。 |
2. 记录项信息描述
| 位置 | 内容 | 说明 |
|---|---|---|
| 0-10 | 11个字节 | 记录项名称,是ASCII码值。 |
| 11 | 1个字节 | 记录项的数据类型,是ASCII码值。(B、C、D、G、L、M和N,具体的解释见下表)。 |
| 12-15 | 4个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
| 16 | 1个字节 | 记录项长度,二进制型。 |
| 17 | 1个字节 | 记录项的精度,二进制型。 |
| 18-19 | 2个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
| 20 | 1个字节 | 工作区ID。 |
| 21-30 | 10个字节 | 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。 |
| 31 | 1个字节 | MDX标识。如果存在一个MDX 格式的索引文件,那么这个记录项为真,否则为空。 |
3. 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) | 各种字符。 |










网友评论