sharpfile文件和C#解析(基础知识准备)
ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的一种空间数据开放格式。[1]该文件格式已经成为了地理信息软件界的一个开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。Shapefile也是一种重要的交换格式,它能够在ESRI与其他公司的产品之间进行数据互操作。
Shapefile文件用于描述几何体对象:点,折线与多边形。例如,Shapefile文件可以存储井、河流、湖泊等空间对象的几何位置。除了几何位置,shp文件也可以存储这些空间对象的属性,例如一条河流的名字,一个城市的温度等等。
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 IV的数据表格式存储每个几何形状的属性数据。
其他可选的文件:
.prj— 投帧式,用于保存地理坐标系统与投影信息,是一个存储well-known text投影描述符的文本文件。
.sbnand.sbx— 几何体的空间索引
.fbnand.fbx— 只读的Shapefiles的几何体的空间索引
.ainand.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字节(双精度浮点数)有符号浮点数字段。
字节 |
类型 |
字节序 |
用途 |
---|---|---|---|
0–3 |
int32 |
大端序 |
文件编号 (永远是十六进制数0x0000270a) |
4–23 |
int32 |
大端序 |
五个没有被使用的32位整数 |
24–27 |
int32 |
大端序 |
文件长度,包括文件头。(用16位整数表示) |
28–31 |
int32 |
小端序 |
版本 |
32–35 |
int32 |
小端序 |
图形类型(参见下面) |
36–67 |
double |
小端序 |
最小外接矩形(MBR),也就是一个包含shapefile之中所有图形的矩形。以四个浮点数表示,分别是X坐标最小值,Y坐标最小值,X坐标最大值,Y坐标最大值。 |
68–83 |
double |
小端序 |
Z坐标值的范围。以两个浮点数表示,分别是Z坐标的最小值与Z坐标的最大值。 |
84–99 |
double |
小端序 |
M坐标值的范围。以两个浮点数表示,分别是M坐标的最小值与M坐标的最大值。 |
然后这个文件包含不定数目的变长数据记录,每个数据记录以一个8字节记录头开始:
字节 |
类型 |
字节序 |
用途 |
---|---|---|---|
0–3 |
int32 |
大端序 |
记录编号 (从1开始) |
4–7 |
int32 |
大端序 |
记录长度(以16位整数表示) |
在记录头的后面就是实际的记录:
字节 |
类型 |
字节序 |
用途 |
---|---|---|---|
0–3 |
int32 |
小端序 |
图形类型(参见下面) |
4– |
- |
- |
图形内容 |
变长记录的内容由图形的类型决定。Shapefile支持以下的图形类型:
值 |
图形类型 |
字段 |
---|---|---|
0 |
空图形 |
无 |
1 |
Point(点) |
X, Y |
3 |
Polyline(折线) |
(最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点 |
5 |
Polygon(多边形) |
(最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点 |
8 |
MultiPoint(多点) |
(最小包围矩形)MBR,点的数目,所有点 |
11 |
PointZ(带Z与M坐标的点) |
X, Y, Z, M |
13 |
PolylineZ(带Z或M坐标的折线) |
必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组 |
15 |
PolygonZ(带Z或M坐标的多边形) |
必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组 |
18 |
MultiPointZ(带Z或M坐标的多点) |
必须的: (最小包围矩形)MBR,点的数目,所有点, Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组 |
21 |
PointM(带M坐标的点) |
X, Y, M |
23 |
PolylineM(带M坐标的折线) |
必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点 可选的: M坐标范围, M坐标数组 |
25 |
PolygonM(带M坐标的多边形) |
必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点 可选的: M坐标范围, M坐标数组 |
28 |
MultiPointM(带M坐标的多点) |
必须的: (最小包围矩形)MBR,点的数目,所有点 可选的: M坐标范围, M坐标数组 |
31 |
MultiPatch |
必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组 可选的: M坐标范围, M坐标数组 |
在普通的使用中,Shapefile通常包含点、折线与多边形。带有Z坐标的形状是三维的。带有M坐标的形状是包含一个用户指定的测量值,该测量值定义在每一个点坐标之上。三维的Shapefile十分罕见。此外,实际应用中通常,Shapefile的M测量值这个功能已经被其他功能更加强大和稳健的数据库取代,Shapefile一般只负责几何数据。
Shapefile图形索引格式
Shapefile的文件索引包含与.shp文件相同的100个字节的文件头,然后跟随着不定数目的8字节定长记录,每个记录都有两个字段:
字节 |
类型 |
字节序 |
用途 |
---|---|---|---|
0–3 |
int32 |
大端序 |
记录位移(用16位整数表示) |
4–7 |
int32 |
大端序 |
记录长度(用16位整数表示) |
因为这个图形索引每个数据项都是定长的,因此程序只要在这个图形索引中向前或向后遍历,读取索引中所记录的记录位移与记录长度,程序就可以很快地向前或向后遍历整个Shapefile,在.shp文件中找到任意一个几何体的正确位置。
Shapefile属性格式(.dbf)
每个图形的属性数据存储在dBase格式的数据表之中。属性数据也可以存储在另一种开放的数据表格式xBase格式之中。在开源Shapefile函数库Shapefile C library中就是这样存储。
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文件中包含以下信息:
经纬度坐标系统或地图投影的名称
测量基准
椭球体参数
本初子午线
所使用的单位
用于定义地图投影的参数,例如:
纬度原点
缩放比例
中央经线
北伪偏移
东伪偏移
标准纬线
空间索引格式(.sbn)
这是一个二进制的空间索引文件,仅仅可以应用在ESRI的软件之中。其文件格式没有公开的文档,其他厂商也没有实现这个文件。.sbn并不是必须的,因为.shp文件之中已经包含了所有的解析空间数据所需的信息。
格式限制
Shapefile与拓扑
Shapefile无法存储拓扑信息。在ESRI的文件格式中,ArcInfo 的Coverage、以及Personal/File/Enterprise地理数据库,能够保存地理要素的拓扑信息。
空间表达
在shapefile文件之中,所有的折线与多边形都是用点来定义,点与点之间采用线性插值,也就是说点与点之间都是用线段相连。在数据采集时,点与点之间的距离决定了该文件所使用的比例。当图形放大超过一定比例的时候,图形就会呈现出锯齿。要使图形看上去更加平滑,那么就必须使用更多的点,这样就会消耗更大的存储空间。在这种情况下,样条函数可以很精确地表达不同形状的曲线而且占据相对更少的空间,但是shapefile并不支持样条曲线。
数据存储
.shp文件或.dbf文件最大的体积不能够超过2 GB(或2位)。也就是说,一个shapefile最多只能够存储七千万个点坐标。文件所能够存储的几何体的数目取决于单个要素所使用的顶点的数目。
属性数据库格式所使用的.dbf文件基于一个比较古老的dBase标准。这种数据库格式天生有许多限制,例如:
无法存储空值。这对于数量数据来说是一个严重的问题,因为空值通常都用0来代替,这样会歪曲很多统计表达的结果。
对字段名或存储值中的Unicode支持不理想。
字段名最多只能够有10个字符。
最多只能够有255个字段。
只支持以下的数据类型:浮点类型(13字节存储空间),整数(4或9字节存储空间),日期(不能够存储时间,8字节存储空间)和文本(最大254字节存储空间)
浮点数有可能包含舍入错误,因为它们以文本的形式保存。
混合几何类型
由于在每一条几何记录中都有该记录的几何类型,所以理论上一个shapefile是可以存储混合的几何类型。但实际上规范中指出在同一shapefile之中所有非空的几何体都必须是同一类型 [1] 。因此shapefile被限制为仅仅可以混合存储空几何体和另一单一几何体,该几何体的类型必须与文件头中定义的类型一致。例如,一个shapefile文件不可能同时包含折线与多边形数据,所以,在实际的地理事物描述中,井(点类型)、河(折线类型)与湖(多边形类型)必须分开存储在三个不同的文件之中。
sharpfile文件和C#解析(基础知识准备)相关推荐
- Linux中文件描述符1,linux内核中的文件描述符(一)--基础知识简介
原标题:linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blo ...
- linux内核中的文件描述符(一)--基础知识简介
linux内核中的文件描述符(一)--基础知识简介 Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blog.cs ...
- java 多态判断非空_Java 面试知识点解析基础知识
文本公众号来源: 我没有三颗心脏作者: 我没有三颗心脏 (一)Java 基础知识点 1)面向对象的特性有哪些? 答:封装.继承和多态(应要多算一个那就是抽象) 封装是指将对象的实现细节隐藏起来,然后通 ...
- linux 文件夹隐藏属性,Linux基础知识之文件隐藏属性
这几天温习下Linux基础知识,基础里面较为薄弱的知识点我会在这里记录一下,以便回头查看 Linux下的文件除了权限属性,还有一些隐藏属性,必须使用lsattr来显示,如下所示: [[email pr ...
- 渗透学习-文件上传篇-基础知识部分(持续更新中)
提示:仅供进行学习使用,请勿做出非法的行为.如若由任何违法行为,将依据法律法规进行严惩!!! 文章目录 前言 一.文件上传漏洞简要阐述 文件上传是什么? 为什么会产生文件上传漏洞?及其可能一哪些危害? ...
- 命令行curl上传文件_命令行基础知识:使用cURL下载文件
命令行curl上传文件 Client URL, or simple cURL is a library and command-line utility for transferring data b ...
- C语言 文件操作 深度解析 #重点知识:文件操作函数的使用#
文章目录 前言 1. 为什么使用文件 2. 什么是文件 程序文件 数据文件 3. 文件的打开和关闭 4. 文件的顺序读写 `fgetc` `fputc` `fgets` `fputs` `fprint ...
- Python文件处理和异常处理基础知识
B站视频:文件处理 B站视频:异常处理 文件默认注释及文件改名: (1)下面这些是File–>Setting设置里面的 coding and template 修改得到的 ''' (2)改dem ...
- 计算机基础知识拓展名,25、文件扩展名--电脑基础知识
Windows中的文件多种多样,系统是用文件名来识别,在同一个文件夹里,不允许有重名的,也就是文件名是唯一的: (电脑入门到精通网 www.58116.cn) 1.文件名 (电脑入门到精通网 www. ...
最新文章
- SQL server 实例教程
- 项目从0到1避坑指南
- 企业视觉-大型电商(系统)高性能-用户视觉性能(1)
- vs code c语言json文件配置,解析VScode在Windows环境下c_cpp_properties.json文件配置问题(推荐)...
- ★LeetCode(704)——二分查找(JavaScript)
- 这两年亚马逊创业都是一个非常火热的话题
- _stdcall和_cdecl
- android MIT App Inventor 2 Beta 中文资料
- android面试题2022
- 根据身高体重计算BMI指数
- 中国自由软件推广先锋的自述,心潮澎湃的一往无前,一定要看!作者:洪峰...
- [EKL-踩坑记] —— ES虚拟内存设置
- 稳踞三大价值高地!昆仑万维角逐AIGC“新大陆”
- 无人驾驶虚拟仿真(十二)--图像处理之红绿灯识别
- Linux 命令行浏览器
- [LabVIEW应用]Labview如何将PC机和仪器设备连接到一起
- 数据分析师要掌握什么知识和技能?
- 嵌入式计算机是专用计算机系统,嵌入式系统是一种专用的计算机系统.doc
- 移植OpenCV的AdaBoost人脸检测算法到DM6467
- U盘制作成启动盘后容量变小怎么恢复