复制于维基百科:https://zh.wikipedia.org/wiki/Shapefile,因为的确经常会把数据格式的一些细节忘记,所以复制过来,以供后续有必要的时候,查缺补漏。

一、简介

ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的空间数据开放格式。目前,该文件格式已经成为了地理信息软件界的开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。Shapefile也是重要的交换格式,能够在ESRI与其他公司的产品之间进行数据互操作。

Shapefile文件用于描述几何体对象:点、折线与多边形。例如,Shapefile文件可以存储井、河流、湖泊等空间对象的几何位置。除了几何位置,shp文件也可以存储这些空间对象的属性,例如河流的名字、城市的温度等等。

二、概览

Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。但这种格式没法存储地理数据的拓扑信息。Shapefile在九十年代初的ArcView GIS的第二个版本被首次应用。目前,许多自由的程序或商业的程序都可以读取Shapefile。

Shapefile是一种比较原始的矢量数据存储方式,它仅仅能够存储几何体的位置数据,而无法在一个文件之中同时存储这些几何体的属性数据。因此,Shapefile还必须附带一个二维表用于存储Shapefile中每个几何体的属性信息。Shapefile中许多几何体能够代表复杂的地理事物,并为他们提供强大而精确的计算能力。

Shapefile文件指的是一种文件存储的方法,实际上该种文件格式是由多个文件组成的。其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是".shp", ".shx"与 ".dbf"文件。表示同一数据的一组文件其文件名前缀应该相同。例如,存储一个关于湖的几何与属性数据,就必须有lake.shp,lake.shx与lake.dbf三个文件。而其中“真正”的Shapefile的后缀为shp,然而仅有这个文件数据是不完整的,必须要把其他两个附带上才能构成一组完整的地理数据。除了这三个必须的文件以外,还有八个可选的文件,使用它们可以增强空间数据的表达能力。所有的文件名都必须遵循MS DOS的8.3文件名标准(文件前缀名8个字符,后缀名3个字符,如shapefil.shp),以方便与一些老的应用程序保持兼容性,尽管现在许多新的程序都能够支持长文件名。此外,所有的文件都必须位于同一个目录之中。

必须的文件:

.shp — 图形格式,用于保存元素的几何实体。

.shx — 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。

.dbf — 属性数据格式,以dBase III+ 的数据表格式存储每个几何形状的属性数据。

其他可选的文件:

.prj — 投帧式,用于保存地理坐标系统与投影信息,是一个存储well-known text投影描述符的文本文件。

.sbn and .sbx — 几何体的空间索引

.fbn and .fbx — 只读的Shapefiles的几何体的空间索引

.ain and .aih — 列表中活动字段的属性索引。

.ixs — 可读写Shapefile文件的地理编码索引

.mxs — 可读写Shapefile文件的地理编码索引(ODB格式)

.atx — .dbf文件的属性索引,其文件名格式为shapefile.columnname.atx (ArcGIS 8及之后的版本)

.shp.xml — 以XML格式保存元数据。

.cpg — 用于描述.dbf文件的代码页,指明其使用的字符编码。

在每个.shp, .shx与.dbf文件之中,图形在每个文件的排序是一致的。也就是说,.shp的第一条记录与.shx及.dbf之中的第一条记录相对应,如此类推。此外,在.shp与.shx之中,有许多字段的字节序是不一样的。因此用户在编写读取这些文件格式的程序时,必须十分小心地处理不同文件的不同字节序。

Shapefile通常以X与Y的方式来处理地理坐标,一般X对应经度,Y对应纬度,用户必须注意X,Y的顺序。

三、Shapefile图形格式 (.shp)

Shapefile格式的主文件包含了地理参照数据。该文件由一个定长的文件头和一个或若干个变长的记录数据组成。每一条变长数据记录包含一个记录头和一些记录内容。详细的数据存储格式由Esri Shapefile技术描述提供。注意,虽然Shapefile文件的后缀名与AutoCAD的图形字体源格式它们的文件后缀名相同的,都是.shp ,请不要把它们混淆。

主文件头包含17个字段,共100个字节,其中包含九个4字节(32位有符号整数,int32)整数字段,紧接着是八个8字节(双精度浮点数)有符号浮点数字段。

然后这个文件包含不定数目的变长数据记录,每个数据记录以一个8字节记录头开始:

在记录头的后面就是实际的记录:

变长记录的内容由图形的类型决定。Shapefile支持以下的图形类型:

在普通的使用中,Shapefile通常包含点、折线与多边形。带有Z坐标的形状是三维的。带有M坐标的形状是包含一个用户指定的测量值,该测量值定义在每一个点坐标之上。三维的Shapefile十分罕见。此外,实际应用中通常,Shapefile的M测量值这个功能已经被其他功能更加强大和稳健的数据库取代,Shapefile一般只负责几何数据。

四、Shapefile图形索引格式(.shx)

Shapefile的文件索引包含与.shp文件相同的100个字节的文件头,然后跟随着不定数目的8字节定长记录,每个记录都有两个字段。

因为这个图形索引每个数据项都是定长的,因此程序只要在这个图形索引中向前或向后遍历,读取索引中所记录的记录位移与记录长度,程序就可以很快地向前或向后遍历整个Shapefile,在.shp文件中找到任意一个几何体的正确位置。

五、Shapefile属性格式(.dbf)

每个图形的属性数据存储在dBase格式的数据表之中。属性数据也可以存储在另一种开放的数据表格式xBase格式之中。在开源Shapefile函数库Shapefile C library[2]中就是这样存储。

六、Shapefile投帧式(.prj)

.prj文件中的信息包含了.shp文件中几何数据所使用的经纬度坐标系统。尽管这个文件不是必须的,一般使用都会提供它,这样用户就无需猜测所给的坐标的经纬度系统。ArcGIS Desktop 9及以后的版本使用well-known text格式来生成坐标系统描述信息。以前的ArcGIS版本和某些第三方软件通常生成如下的这种格式:

老的投影文件格式样例:

Projection UTM

Zunits NO

Units METERS

Spheroid CLARKE1866

Xshift 0.0000000000

Yshift -4000000.0000000000

Parameters

-108 0 0.000 /* longitude

36 0 0.000 /* latitude

新的WKT格式样例:

GEOGCS["GCS_North_American_1927",DATUM["D_North_American_1927",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0],UNIT["Degree",0.0174532925199433]]

.prj文件中包含以下信息:

经纬度坐标系统或地图投影的名称

测量基准

椭球体参数

本初子午线

所使用的单位

用于定义地图投影的参数,例如:

纬度原点

缩放比例

中央经线

北伪偏移

东伪偏移

标准纬线

七、Shapefile空间索引格式(.sbn)

这是一个二进制的空间索引文件,仅仅可以应用在ESRI的软件之中。其文件格式没有公开的文档,其他厂商也没有实现这个文件。.sbn并不是必须的,因为.shp文件之中已经包含了所有的解析空间数据所需的信息。

八、限制

1.Shapefile与拓扑

Shapefile无法存储拓扑信息。在ESRI的文件格式中,ArcInfo 的Coverage、以及Personal/File/Enterprise地理数据库,能够保存地理要素的拓扑信息。

2.空间表达

在shapefile文件之中,所有的折线与多边形都是用点来定义,点与点之间采用线性插值,也就是说点与点之间都是用线段相连。在数据采集时,点与点之间的距离决定了该文件所使用的比例。当图形放大超过一定比例的时候,图形就会呈现出锯齿。要使图形看上去更加平滑,那么就必须使用更多的点,这样就会消耗更大的存储空间。在这种情况下,样条函数可以很精确地表达不同形状的曲线而且占据相对更少的空间,但是目前shapefile并不支持样条曲线。

3.数据存储量

.shp文件或.dbf文件最大的体积不能够超过2 GB(或231位)。也就是说,一个shapefile最多只能够存储七千万个点坐标。文件所能够存储的几何体的数目取决于单个要素所使用的顶点的数目。

属性数据库格式所使用的.dbf文件基于一个比较古老的dBase标准。这种数据库格式天生有许多限制,例如:

无法存储空值。这对于数量数据来说是一个严重的问题,因为空值通常都用0来代替,这样会歪曲很多统计表达的结果。

对字段名或存储值中的Unicode支持不理想。

字段名最多只能够有10个字符。

最多只能够有255个字段。

只支持以下的数据类型:浮点类型(13字节存储空间),整数(4或9字节存储空间),日期(不能够存储时间,8字节存储空间)和文本(最大254字节存储空间)

浮点数有可能包含舍入错误,因为它们以文本的形式保存。

4、混合几何类型

由于在每一条几何记录中都有该记录的几何类型,所以理论上一个shapefile是可以存储混合的几何类型。但实际上规范中指出在同一shapefile之中所有非空的几何体都必须是同一类型。因此shapefile被限制为仅仅可以混合存储空几何体和另一单一几何体,该几何体的类型必须与文件头中定义的类型一致。例如,一个shapefile文件不可能同时包含折线与多边形数据,所以,在实际的地理事物描述中,井(点类型)、河(折线类型)与湖(多边形类型)必须分开存储在三个不同的文件之中。

九、总结

重点记住shp、shx、dbf、prj都存储的是什么,其他的也不常用。

这个介绍里,好像少了一点点东西,shpfile的索引编码不是固定的,既每次在软件中打开的时候,FID都是变化的,举例来说,假设我有一个省边界文件province.shp,第一次在QGIS中打开,辽宁省的FID是1,再重新打开一下,辽宁省的FID可能就是2了,文件的FID,既feature id是不固定的,所以,要做数据标识,得拿其他字段来做,或者干脆新建一个字段id做索引。

Shpfile应该是最常用的地理信息数据格式文件,了解它的格式说明还是很有必要的。

shp格式详解(一)相关推荐

  1. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

  2. php serialize取值,PHP 序列化(serialize)格式详解

    PHP 序列化(serialize)格式详解(转) 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PH ...

  3. php serialize mysql_php 序列化(serialize)格式详解

    1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...

  4. 三维重建:PNG格式详解-与LibPNG使用

    PNG图像包含了骨骼信息,左边的图像比右边的大几十K,包含了骨骼信息:        PNG格式详解:https://blog.mythsman.com/post/5d2d62b4a2005d7404 ...

  5. 4-4:TCP协议之TCP头部格式详解

    文章目录 一:TCP头部格式详解 (1)4位首部长度 (2)序列号和确认应答号 A:可靠性问题 B:32位序号和确认号 (3)窗口大小 (4)标志位 (5)紧急指针 A:带外数据(out_of _ba ...

  6. PHP 序列化(serialize)格式详解

      1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对 ...

  7. 安卓camera2 API获取YUV420_888格式详解

    安卓音视频开发中的一个环节是摄像头采集数据,Android平台上摄像头采集的API有两套,camera1和camera2.本文主要讲的是camera2这套API采集数据,并指明YUV420_888格式 ...

  8. Gerber 格式详解

    Gerber 格式详解 gerber中文 gerber,gerber 文件:590m.com/f/25127180-487459253-79168e(访问密码:551685) 以下内容无关: ---- ...

  9. BMP格式详解<转>

    BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Win ...

  10. 小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解

    小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解 1 前言 2 I2S 3 Codec模式(左/右对齐) 3.1 左对齐(MSB对齐) 3.2 右对齐(LSB对齐) 4 DSP模式 5 ...

最新文章

  1. 通过apt自动生成建造者模式单线程版代码(三)
  2. Resource interpreted as Stylesheet but transferred with MIME type application/x-css
  3. ERROR: ORA-01033: ORACLE initialization or shutdown in progress Oracle无法启动的解决
  4. 【设计模式】责任链模式
  5. libreoffice
  6. 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!
  7. [转载]ASP.NET开发经验积累
  8. Python爬虫的框架有哪些?推荐这五个!
  9. mysql查询父子关系树_swt 生成树[读取Mysql数据库中的父子关系表]
  10. 微信小程序API~GET
  11. 基于FPGA 的8b10b编解码电路前端电路设计
  12. vue中dom元素和组件的获取
  13. 2015年计算机维修记录表,2015年 主题教学记录表.doc
  14. 互联网的未来之下:政权 金权 人权 无关平权
  15. CAD制图软件中如何设置CAD打印样式表(CTB)?
  16. 虾皮的注册流程是什么?怎么注册虾皮?
  17. 什么是云服务举例说明_云服务器与云服务有什么区别
  18. excel将一个工作表根据条件拆分成多个工作表图文教程
  19. 【Python网络爬虫】基本原理
  20. Linux(ubuntu)安装JLink 驱动

热门文章

  1. 联想x3850x6重装系统,ibm x3850 x6安装系统,2015ibm服务器x3850x6
  2. java开发和android开发_浅谈Java开发和Android开发的不同
  3. 如何关闭flashhelper的ff新推荐广告弹窗
  4. OpenGL超级宝典 纹理(一)
  5. 软件测试达内视频笔记(一)
  6. 计算机的管理员关机命令,电脑定时自动关机命令怎么使用?
  7. 雪球python爬虫炒股_关于雪的作文
  8. 一个故意不通过图灵测试的人工智能
  9. java中bool_java中boolean用法
  10. html+css制作一个浪漫爱心表白网页 表白网页在线制作 最浪漫的表白网页