ESRI白皮书——ESRI Shapefile 技术描述

    ESRI Shapefile 技术描述 —— ESRI白皮书 —— 1998年6月

   

目录

一、为什么使用Shapefile?

1.1、Shapefile可以被怎样创建?

二、Shapefile技术说明

2.1、命名规范

2.2、数值类型

三、主文件的组织结构

3.1、字节顺序

3.2、主文件头

3.3、记录头

四、主文件的记录内容

4.1、无形状

4.2、X、Y空间中的图形类型

4.2.1 点(Point)

4.2.2 多点(MultiPoint)


    这份文档定义了shapefile(.shp)空间数据格式,以及描述了为什么shapefile是重要的。它列出了ESRI的软件工具,这些软件工具能够直接创建shapefile或者将其他格式数据转成shapefile数据。这份文档也提供了不使用ESRI软件的情况下,自己编写程序来创建shapefile的技术信息,以满足某些组织想编写他们自己的数据转换软件的愿望。

一、为什么使用Shapefile?

    shapefile将要素的非拓扑几何信息和属性信息存储在一个数据集中,其中,要素的几何结构被存储为由矢量坐标集合组成的几何图形中。

    因为shapefile不具有拓扑数据结构,所以它相比其他格式的数据具有更快的绘制速度和编辑能力shapefile处理重叠的(因为不具有拓扑特性)或者非连续的单个要素也通常只需较少的磁盘空间以及简单的读、取。

    shapefile可以支持点、线以及区域要素,区域要素表现为闭环、两次数字化的多边形。属性信息承载在dBASE格式文件中,每个属性记录和几何信息记录具有一一对应的关系。

1.1、Shapefile可以被怎样创建?

    shapefile可以由以下四种通用方式创建:

  • 导出    ——    使用ARC/INFO,PC ARC/INFO,Spatial Database Engine(SDE)、ArcView GIS、商业地图这些软件可以将任何数据源导出为shapefile数据。
  • 数字化    ——    使用ArcView GIS要素创建工具可以直接数字化几何形状从而创建Shapefile数据
  • 编程    ——    使用Avenue(ArcView GIS),MapObjects、ARC Macro Language(AML)(ARC/INFO),或者Simple Macro Language(SML)(PC ARC/INFO)软件,你可以在你自己的程序中创建Shapefile数据。
  • 依据Shapefile规范编写一个程序直接创建Shapefile数据

    SDE、ARC/INFO、PC ARC/INFO、Data Automation Kit(DAK)和ArcCAD软件提供shapecoverage的转换工具,ARC/INFO也提供了一个coverageshape的转换工具。关于其他数据格式的转换,这份白皮书中发布了相关shapefile规范。其他数据流,例如来自GPS接收器的数据,也可以被存储为shapefile或者X,Y事件表。

二、Shapefile技术说明

    这节会介绍使用技术规范来创建计算机程序以用于读、写shapefile

    一个ESRI shapefile数据集由一个主文件、一个索引文件和一个dBASE表组成。主文件是一个可直接访问的、可变记录长度的文件,其中,每个记录描述一个具有顶点列表的图形。在索引文件中,每个记录包含对应的主文件记录距离主文件开头的偏移量。dBASE表也以记录的方式包含每个要素的要素属性。几何信息和属性信息基于记录号建立一对一关系,在dBASE文件中的记录顺序必须与主文件中的记录顺序相同。

2.1、命名规范

    所有文件名都遵循8.3命名规则。主文件、索引文件和dBASE文件具有相同的文件名前缀,文件名前缀必须以字母、数字字符开头(a-Z,0-9),后跟0个或最多7个字符(a-Z,0-9,_,-)。主文件的文件名后缀是.shp,索引文件的文件名后缀是.shxdBASE表的文件名后缀是.dbf。在区分大小写文件名的操作系统中,文件名中的所有字母都是小写字母。

    示例:

        主文件:counties.shp

        索引文件:counties.shx

        dBASE表:counties.dbf

2.2、数值类型

    shapefile数据存储整形双精度的数字,本文档的其余部分将引用以下类型:

  •     Interger: Signed 32-bit integer(4 bytes)
  •     Double:Signed 64-bit IEEE double-precision floating point number(8 bytes)

    浮点数必须是数字值,shapefile不允许Positive infinityNegative infinityNot-a-Number(NaN)。然而,shapefile支持"no data"值的概念,但是它们目前只用于测量,shapefile读取器认为任何小于-10^38的浮点数都代表"no data"值。


    下面的第一部分描述shapefile的常规结构和组织,第二部分描述shapefile支持的每种类型图形的记录内容。

三、主文件的组织结构

    主文件包含一个固定长度文件头,后面跟着可变长度的记录。每一个可变长记录由一个固定长度的记录头(注意,不是文件头)和可变长记录内容构成。图1说明了主文件的组织结构:

                                                                                图1 

3.1、字节顺序

    shapefile中所有的内容可以被分为两个类型:

    ①相关的数据

  • 主文件记录内容
  • 主文件头的数据描述字段(Shape TypeBounding Box等等)

    ②相关的文件管理

  • 文件长度和记录长度
  • 记录偏移量,等等

    构成文件头中的数据描述字段和主文件中的记录内容的整数和双精度整数以小字节序(低字节序)顺序排列,构成文件其余部分和文件管理的整数和双精度浮点数以大字节序(高字节序)顺序排列。

3.2、主文件头

    主文件头有100字节的长度。表1展示了文件头中的字段及其字节位置、值、类型和字节顺序。在表中,位置字段相对于文件起始。

    文件长度的值是16位(2字节)字文件的总长度(包括组成文件头的50个16位字,50*2字节=100字节,所以主文件有100字节的长度)。

    一个shapefile数据中的所有非空图形都必须具有相同的图形类型(Shape Type),图形类型对应的值如下:

    上面未指定的图形类型(2、4、6...直到33)被保留以供将来使用。目前,一个shapefile文件被限制包含以上指定的相同类型的图形。以后,shapefile可能允许包含不只一种图形类型,如果混合图形类型被实现,文件头中的Shape Type字段将标记该文件。

    在主文件头中,Bounding Box存储了各个图形的实际范围(extent):与X轴和Y轴(以及潜在的M轴和Z轴)垂直的最小边框矩形包含所有的图形。如果shapefile是空的(即没有记录),XminYminXmaxYmax的值将未定义。未包含测量值的测量图形类型的shapefileMminMmax可以包含“no data”值(查看上面的数值类型一节)。

3.3、记录头

    每一个记录的记录头存储记录数值(类似于主码)和记录内容的长度。记录头拥有8字节(8 bytes)的固定长度值

    表2展示了记录头中字段的字节位置、值、类型和字节顺序,在该表中,位置相对于记录的起始。

    记录数值从1开始。

    记录的内容长度是基于16位(2字节)字测量的记录内容部分的长度。因此,基于16位字的文件总长度的增加(4+内容长度),将被存储在文件头的Byte 24所在的File Length

四、主文件的记录内容

    shapefile记录内容由图形类型和图形的几何数据组成,记录内容的长度基于图形的组成部分和顶点的数目。对于每一个图形类型,我们首先描述形状然后将其映射为磁盘上的记录内容。表3至表16,Position字段与主文件记录内容的起始相关。

4.1、无形状

    0形状类型意味着无形状,即没有图形没有几何数据。每种要素类型(点、线、多边形等等)都支持无形状——在shapefile中有点形状图形和无点形状图形是一样的。通常无形状图形具有位置信息;它们在shapefile创建过程中使用,并在它们创建之后立即填充形状数据。

                                                                                      表3

4.2、X、Y空间中的图形类型

4.2.1 点(Point)

    一个点图形由一对X,Y次序的双精度坐标组成。

                                                                               表4

4.2.2 多点(MultiPoint)

    多点相当于点的集合,如下所示:

    Bounding BoxXminYminXmaxYmax的顺序存储。

                                                                                        表5

4.2.3 折线(PolyLine)

    折线是由一个或多个顶点组成的有序集合。折线的一部分是由两个或两个以上点组成的连通序列。各部分之间可能连在一起,也可能不连在一起。各部分可能会相交,也可能不会相交。

    由于本规范不禁止具有相同坐标的连续点,所以shapfile读取程序必须能处理这种情况。另一方面,shapefile读取程序可能不允许生成生零长度折线。

     PolyLine的字段细节如下:

  • Box    ——    以Xmin、Ymin、Xmax、Ymax次序存储的边框
  • NumParts    ——    折线组成部分的总数量
  • NumPoints    ——    折线里点的总个数
  • Parts    ——    长度为NumParts值的数组。存储折线中各组成部分在Points数组中的第一个点的索引。数组索引以0起始。
  • Points    ——    长度为NumPoints值的数组。折线中每个部分的点都是端到端存储的,第二部分的点紧随第一部分的点,依此类推。Parts数组保存每部分起始点的数组索引,各部分之间在Points数组没有分隔符。

                                                                                           图6

4.2.4 Polygon(多边形)

    多变形由一个闭环或多个闭环组成,闭环是由4个或4个以上的点组成的连通序列,从而形成封闭的、非自交环。一个多边形可能包含多个闭环。闭环的顶点或方向指示闭环的哪一边是多边形的内部,沿着闭环以顶点顺序行走的观察者的右边的邻域是多边形内的邻域。多边形中定义孔洞内环的顶点顺序是逆时针方向的,因此,一个单环多边形的顶点顺序总是顺时针的。多边形的环被称为多边形的组成部分。

    由于本规范不禁止具有相同坐标的连续点,shapfile阅读程序必须处理这种情况。另一方面,shapefile阅读程序可能不允许产生零长度或零面积的多边形。

    多边形的数据结构和折线的数据结构一样,如下所示:

    多边形的字段的详细描述如下:

  • Box    ——    以Xmin、Ymin、Xmax、Ymax次序存储的边框
  • NumParts    ——    多边形的闭环的数量
  • NumPoints    ——    所有闭环中结点的总数量
  • Parts    ——    长度为NumParts值的数组。存储每个闭环在Points数组中的第一个点的索引。数组索引以0起始。
  • Points    ——    长度为NumPoints值的数组。多边形中每个闭环的点都是端到端存储的,第二部分的点紧随第一部分的点,依此类推。Parts数组保存各闭环起始点的数组索引,各闭环之间在Points数组中没有分隔符。

    图2中的实例图演示了多边形的表示。该图展示了具有1个孔洞闭环和8个顶点的多边形。

    以下是关于多边形图形的重要注意事项:

  • 闭环是闭合的(闭环的第一个顶点和最后一个顶点是一样的)
  • 在points数组中闭环的次序是不重要的
  • 存储在shapefile文件中的多边形必须是干净的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值