shapefile文件结构

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) 各种字符。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容