shp文件详细格式

上传人:豆浆 文档编号:2046187 上传时间:2017-07-19 格式:DOC 页数:30 大小:243.50KB
返回 下载 相关 举报
shp文件详细格式_第1页
第1页 / 共30页
shp文件详细格式_第2页
第2页 / 共30页
shp文件详细格式_第3页
第3页 / 共30页
shp文件详细格式_第4页
第4页 / 共30页
shp文件详细格式_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《shp文件详细格式》由会员分享,可在线阅读,更多相关《shp文件详细格式(30页珍藏版)》请在金锄头文库上搜索。

1、2.2.2 Shape files 数据说明Shape files 是 ESRI 提供的一种矢量数据格式,它没有拓扑信息,一个 Shape files 由一组文件组成,其中必要的基本文件包括坐标文件(.shp)、索引文件(.shx)和属性文件(.dbf)三个文件。1. 坐标文件的结构说明坐标文件(.shp)用于记录空间坐标信息。它由头文件和实体信息两部分构成(如图2.1 所示)。1) 坐标文件的文件头坐标文件的文件头是一个长度固定(100 bytes)的记录段,一共有 9 个 int 型和 7 个double 型数据,主要记录内容见表 2.2。文件头记录头 记录内容记录头 记录内容记录头 记录

2、内容记录头 记录内容记录头 记录内容图 2.1 坐标文件的结构起始位置 名称 数值 类型 位序0 File Code9994 Integer big4 Unused 0 Integer big8 Unused 0 Integer big12 Unused 0 Integer big16 Unused 0 Integer big20 Unused 0 Integer big24 文件长度 文件的实际长度 Integer big28 版本号 1000 Integer Little32 几何类型 表示这个 Shapefile 文件所记录的空间数据的几何类型Integer Little36 Xmin

3、空间数据所占空间范围的 X 方向最小值 Double Little44 Ymin 空间数据所占空间范围的 Y 方向最小值 Double Little52 Xmax 空间数据所占空间范围的 X 方向最大值 Double Little60 Ymax 空间数据所占空间范围的 Y 方向最大值 Double Little68* Zmin 空间数据所占空间范围的 Z 方向最小值 Double Little76* Zmax 空间数据所占空间范围的 Z 方向最大值 Double Little84* Mmin 最小 Measure 值 Double Little92* Mmax 最大 Measure 值 Dou

4、ble Little表 2.2 shapefiles 头文件表注:最后 4 个加星号特别标示的四个数据只有当这个 Shapefile 文件包含 Z 方向坐标或者具有 Measure 值时才有值,否则为 0.0。所谓 Measure 值,是用于存储需要的附加数据,可以用来记录各种数据,例如权值、道路长度等信息。(1) 位序细心的读者会注意到表 2.2 中的数值的位序有 Little 和 big 的区别,对于位序是 big的数据我们在读取时要小心。通常,数据的位序都是 Little,但在有些情况下可能会是big,二者的区别在于它们位序的顺序相反。一个位序为 big 的数据,如果我们想得到它的真实数

5、值,需要将它的位序转换成 Little 即可。转换原理非常简单,就是交换字节顺序,下面是作者实现的在两者间进行转换的程序,代码如下:/位序转换程序unsigned long OnChangeByteOrder (int indata)char ss8;char ee8;unsigned long val = unsigned long(indata);_ultoa( val, ss, 16 );/将十六进制的数(val)转到一个字符串(ss)中int i;int length=strlen(ss);if(length!=8)for(i=0;i8-length;i+)eei=0;for(i=0;

6、ilength;i+) eei+8-length=ssi;for(i=0;i8;i+)ssi=eei;/*进行倒序int t;t =ss0;ss0 =ss6;ss6 =t;t =ss1;ss1 =ss7;ss7 =t;t =ss2;ss2 =ss4;ss4 =t;t =ss3;ss3 =ss5;ss5 =t;/*/*将存有十六进制数(val)的字符串(ss)中的十六进制数转成十进制数int value=0;for(i=0;i8;i+)int k; CString mass;mass=ssi;if(ssi=a | ssi=b | ssi=c |ssi=d |ssi=e |ssi=f)k=10+s

7、si-a;elsesscanf(mass,%d,&k);value=value+int(k*pow(16,7-i);return (value);(2) Shapefile 文件支持的几何类型(ShapeType)Shapefile 文件所支持的几何类型如表 2.3 所示:编号 几何类型0 Null Shape(表示这个 Shapefile 文件不含坐标)1 Point(表示 Shapefile 文件记录的是点状目标,但不是多点)3 PolyLine(表示 Shapefile 文件记录的是线状目标)5 Polygon(表示 Shapefile 文件记录的是面状目标)8 MultiPoint(表

8、示 Shapefile 文件记录的是多点,即点集合)11 PointZ(表示 Shapefile 文件记录的是三维点状目标)13 PolyLineZ(表示 Shapefile 文件记录的是三维线状目标)15 PolygonZ(表示 Shapefile 文件记录的是三维面状目标)18 MultiPointZ(表示 Shapefile 文件记录的是三维点集合目标)21 PointM(表示含有 Measure 值的点状目标)23 PolyLineM(表示含有 Measure 值的线状目标)25 PolygonM(表示含有 Measure 值的面状目标)28 MultiPointM(表示含有 Meas

9、ure 值的多点目标)31 MultiPatch(表示复合目标)表 2.3 shapefiles 文件支持的几何类型对于一个不是记录 Null Shape 类型的 Shapefile 文件,它所记录的空间目标的几何类型必须一致,不能在一个 Shapefile 文件中同时记录两种不同类型的几何目标。读取坐标文件(.shp)的文件头的代码如下:void OnReadShp(CString ShpFileName)FILE* m_ShpFile_fp; /*Shp 文件指针/打开坐标文件if(m_ShpFile_fp=fopen(ShpFileName,rb)=NULL)return;/读取坐标文件

10、头的内容 开始int FileCode;int Unused;int FileLength;int Version;int ShapeType;double Xmin;double Ymin; double Xmax;double Ymax;double Zmin;double Zmax;double Mmin;double Mmax;fread(&FileCode, sizeof(int), 1,m_ShpFile_fp);FileCode = OnChangeByteOrder (FileCode);for(i=0;i5;i+)fread(&Unused,sizeof(int), 1,m_

11、ShpFile_fp);fread(&FileLength, sizeof(int), 1,m_ShpFile_fp);FileLength = OnChangeByteOrder (FileLength);fread(&Version, sizeof(int), 1,m_ShpFile_fp);fread(&ShapeType, sizeof(int), 1,m_ShpFile_fp);fread(&Xmin, sizeof(double),1,m_ShpFile_fp);fread(&Ymin, sizeof(double),1,m_ShpFile_fp);fread(&Xmax, siz

12、eof(double),1,m_ShpFile_fp);fread(&Ymax, sizeof(double),1,m_ShpFile_fp);fread(&Zmin, sizeof(double),1,m_ShpFile_fp);fread(&Zmax, sizeof(double),1,m_ShpFile_fp);fread(&Mmin, sizeof(double),1,m_ShpFile_fp);fread(&Mmax, sizeof(double),1,m_ShpFile_fp);/读取坐标文件头的内容 结束/根据几何类型读取实体信息 2) 实体信息的内容实体信息负责记录坐标信息,它

13、以记录段为基本单位,每一个记录段记录一个地理实体目标的坐标信息,每个记录段分为记录头和记录内容两部分。记录头的内容包括记录号(Record Number)和坐标记录长度(Content Length) 两个记录项。它们的位序都是 big。记录号(Record Number)和坐标记录长度(Content Length) 两个记录项都是 int 型,并且 shapefile 文件中的记录号都是从 1 开始的。记录内容包括目标的几何类型(ShapeType)和具体的坐标记录(X、Y) ,记录内容因要素几何类型的不同其具体的内容及格式都有所不同。下面分别介绍点状目标(Point)、线状目标(Poly

14、Line)和面状目标(Polygon)三种几何类型的.shp 文件的记录内容:(1) 点状目标shapefile 中的点状目标由一对 X、Y 坐标构成,坐标值为双精度型(double)。点状目标的记录内容如表 2.4:记录项 数值 数据类型 长度 个数 位序几何类型(ShapeType) 1(表示点状目标) int 型 4 1 LittleX 方向坐标 X 方向坐标值 double型8 1 LittleY 方向坐标 Y 方向坐标值 double型8 1 Little表 2.4 点状目标的记录内容下面是读取点状目标的记录内容的代码:OnReadPointShp(CString ShpFileNa

15、me)/打开坐标文件/读取坐标文件头的内容 开始/读取点状目标的实体信息 int RecordNumber;int ContentLength;int num =0;while(fread(&RecordNumber, sizeof(int), 1,ShpFile_fp)!=0)num+;fread(&ContentLength,sizeof(int), 1,ShpFile_fp);RecordNumber = OnChangeByteOrder (RecordNumber);ContentLength = OnChangeByteOrder (ContentLength);int shapeType;double x;dou

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号