Shp数据格式说明

article/2025/10/7 23:55:41

复制于维基百科: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应该是最常用的地理信息数据格式文件,了解它的格式说明还是很有必要的。


http://chatgpt.dhexx.cn/article/ErOxsnP2.shtml

相关文章

gis利器之Gdal(二)shp数据读取

本文将简单介绍shp数据的基本知识,以java语言为例,介绍如何基于java调用gdal完成对shp数据的解析,主要包括空间信息解析、属性信息解析、空间参考信息解析,bbox信息解析等等。 shp文件是一种矢量图形存储文件,可以用于…

全国矢量shp数据:行政区划,县界,道路,河流....都可下载

前段时间我们分享过一次全国矢量数据,包含道路,水系,铁路等等 不过第二天我们就把文章删除了 以至于后台不少留言问为啥删除 主要原因是数据精度稍微有点差(部分数据偏差过大) 不过 今天我们来重新分享 这次本着授…

为什么不太建议你通过 Python 去找工作?

有小伙伴问:我是一名大专生,学校把 Python 做为主语言教给我们,但是我也去了解过,其实 Python 门槛挺高的,所以我在自学 Java,但是我现在并不清楚到底要不要全心的去学 Java,学校里的课程也越来…

学Python真的好找工作吗?资深程序员为你解答

找工作难不难,主要还是看你自身的经验以及个人能力,如果决定学的话就要仔细去学习,而不是分散学习,这样既浪费了你的学习时间,又没有学到东西,尤其是大三即将毕业的同学,你只有其实不到一年的时间去学习,正…

【转行python】:简要说说python最好找工作的三个方向

前言 目前来说python最好找工作的三个方向:爬虫、数据分析和web开发。 之前我跟一些转行成功的朋友交流过,有一个朋友印象深刻,跟大家聊一下,朋友A某211研究生毕业,毕业后到了一家航空相关的企业上班,上了…

学Python好找工作吗?需要满足Python岗位哪些要求?

学Python好找工作吗?需要满足哪些要求?随着Python的火爆,国内Python的岗位也随之增多,只要技术能力强项目经验充足,找到工作不是问题。即使是一些二线城市,Python的薪资待遇也比较好。 一、学Python好找工作…

学习Python编程好找工作吗?

说起编程语言,不少人都会推荐学习Python,但很多人对Python不太了解,所以比较好奇“学习Python编程是否好找工作”,关于这个问题,小编通过下文为大家详细解答一下。 从市场情况来讲,Python职位比较多&…

学Python真的好找工作吗?工作多年的程序员为你解答

找工作难不难,主要还是看你自身的经验以及个人能力,如果决定学的话就要仔细去学习,而不是分散学习,这样既浪费了你的学习时间,又没有学到东西,尤其是大三即将毕业的同学,你只有其实不到一年的时间去学习,正…

Python虽然很火,为啥找工作这么难

知乎有人提了这么个问题,Python这么火,为啥找工作这么难呢? 这两年因为第三波人工智能热潮让 Python火了一把,让中小学生、非程序员(产品经理、运营)都加入到了学习Python的行列,那之前Python火吗? 虽然和Java、C这些大佬有差距…

学Python找工作你起码要会这些

要想通过自学Python并找到第一份工作应该做好以下几方面的事情: 第一:掌握Python的Web开发。 虽然Python目前在大数据、机器学习领域有大量的应用,但是掌握Python的Web开发依然是很有必要的,毕竟在生产环境下,Python…

对于你学了python是否可以找工作。

‘’’ Date: 2022-04-22 13:50:12 LastEditors: YuanPangZi LastEditTime: 2022-04-22 13:50:14 FilePath: \python_base\0_node_base\python_des.py ‘’’ 学python能找工作吗?需要计算机基础吗? 答案是**肯定的** 学python找工作这个事情 现在pyth…

Python虽然很火,为啥找工作这么难?

前几天看到某论坛有人提了这么个问题,Python这么火,为啥找工作这么难呢? 这两年因为第三波人工智能热潮让 Python火了一把,让中小学生、非程序员(产品经理、运营)都加入到了学习Python的行列,那之前Python火吗? 虽然和Java、C这…

扎心“我学了六个月 Python,怎么还是会找不到工作”

在编程界,Python是一种神奇的存在。有人认为,只有用Python才能优雅写代码,提高代码效率;但另一部分人恨不能把Python喷成筛子。那么,Python到底有没有用,为什么用Python找不到工作? Python到底能…

python这么火找不到工作_python工作太难找,python找不到工作原因。

python工作难找,是目前python发展的必然历程,因为python市场虽然有点火,但是市场却没有那么多的python职位提供。python专家急需,python新手却胜任不了。python基础岗位又太少了。我们一起来看一下。 1、python的工作难找原因之一…

Python学到什么程度才可以去找工作?掌握这4点足够了!

大家在学习Python的时候,有人会问“Python要学到什么程度才能出去找工作”,对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来,一般都不会有什么问题,而对于自学Python来说,…

去年那些口口声声说“学Python找不到工作”的人,今年为何被打脸?

最近在网上看到了一件比较有意思的事情,就是伴随着Python在TIOBE排行榜上多次超越了Java登上第2名的时候,去年口口声声说"不推荐学Python,学Python找不到工作"的一些博主,居然出现了剧情大转变,居然公然承认…

为什么我不建议你通过 Python 去找工作?

二哥,你好,我是一名大专生,学校把 Python 做为主语言教给我们,但是我也去了解过,其实 Python 门槛挺高的,所以我在自学 Java,但是我现在并不清楚到底要不要全心的去学 Java,学校里的…

学python为何不好找工作呢?

随着人工智能的大火,越来越多的人选择去学习Python编程语言,但是总会在网上看到有人吐槽学完Python找不到工作。 为什么会出现这种情况呢? 为什么会出现这种学习完Python编程语言却无法找到工作的情况呢? 虽然Python是一个当前十分热门的编程语言&am…

自学python能不能找到工作,学会了python好找工作吗

python学到什么程度可以就业 Python可以从事的岗位有很多,就业岗位不同,需要具备的技能不同,具体要求如下:阶段一:Python开发基础Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语…

学Python容易找工作嘛?

答案肯定是不难找啦,说不好找的只是在为自己没有学好再找借口,然后大喊“我待资本如初恋,资本虐我千百遍”! 北上广作为流动人口最多的城市,我们就来看看这三个城市的Python岗位。这仅仅是在一个平台搜索了Python跳出来…